{"id":32265934,"url":"https://github.com/minduca/gecko-ci","last_synced_at":"2026-02-20T16:33:06.845Z","repository":{"id":57245646,"uuid":"65337554","full_name":"minduca/gecko-ci","owner":"minduca","description":"A lightweight build monitor that handles IoT gadgets and brings CI feedbacks to the real world","archived":false,"fork":false,"pushed_at":"2017-04-10T02:02:09.000Z","size":200,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-24T05:43:14.401Z","etag":null,"topics":["build","build-automation","build-management","build-monitor","ci","continuous-delivery","continuous-deployment","continuous-integration","gecko-ci","iot","lifx","light-bulbs","monitor","nodejs","nodejs-modules","tfs","typescript","xtreme-feedback"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/minduca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-10T00:31:38.000Z","updated_at":"2018-09-20T20:22:12.000Z","dependencies_parsed_at":"2022-08-24T16:10:46.425Z","dependency_job_id":null,"html_url":"https://github.com/minduca/gecko-ci","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/minduca/gecko-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minduca%2Fgecko-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minduca%2Fgecko-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minduca%2Fgecko-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minduca%2Fgecko-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/minduca","download_url":"https://codeload.github.com/minduca/gecko-ci/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minduca%2Fgecko-ci/sbom","scorecard":{"id":647913,"data":{"date":"2025-08-11","repo":{"name":"github.com/minduca/gecko-ci","commit":"9146b4b631dccb703a7159d12ca108a94b4442c6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-21T12:39:04.997Z","repository_id":57245646,"created_at":"2025-08-21T12:39:04.997Z","updated_at":"2025-08-21T12:39:04.997Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29656981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","build-automation","build-management","build-monitor","ci","continuous-delivery","continuous-deployment","continuous-integration","gecko-ci","iot","lifx","light-bulbs","monitor","nodejs","nodejs-modules","tfs","typescript","xtreme-feedback"],"created_at":"2025-10-22T21:21:38.002Z","updated_at":"2026-02-20T16:33:06.840Z","avatar_url":"https://github.com/minduca.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gecko-ci\nGecko-ci is a lightweight plugin that improves engagement of team members by providing physical feedback of the status of the build. It creates a link between a build server and smart RGB light bulbs, displaying specific colors for each build status.\n\nGecko-ci currently supports only **TFS** as build server and **[LIFX Bulbs](http://www.lifx.com/)** as extreme feedback device. \n\n[![Dependency Status](https://david-dm.org/minduca/gecko-ci.svg)](https://david-dm.org/minduca/gecko-ci)\n[![npm](https://img.shields.io/npm/dt/gecko-ci.svg)](https://www.npmjs.com/package/gecko-ci)\n[![Stories in Ready](https://badge.waffle.io/minduca/gecko-ci.svg?label=ready\u0026title=ready)](http://waffle.io/minduca/gecko-ci)\n\n## Build Status Colors\nWhen the build status change, the color of the light bulb changes accordingly. \n\n| Status change\t            | Color\t  |\n| :------------------------ | :------ |\n| `buildSucceeded`  \t    | Green   |\n| `buildPartiallySucceeded` | Orange  |\n| `buildFailed`\t\t        | Red     |\n\n## Install\n**node.js** \u0026 **bower**\n```javascript\nnpm install gecko-ci --save\nbower install gecko-it --save\n```\n\n## Quick Start\nDefine one or more connections to your build server(s), create one or more build monitors associated to these connections and link each monitor to light bulbs that will display the status of the build.\n\n**node.js**\n```javascript\nlet gecko = require(\"gecko-ci\")\n```\n\n**browser**\n```javascript\nlet gecko = window.$gecko\n```\n\n```javascript\nlet monitor = gecko.watchBuilds({\n    connections: [\n        {\n            name: \"my connection 01\",\n            technology: \"tfs\",\n            collection: \"DefaultCollection\",\n            server: \"https://foo.visualstudio.com/\",\n            user: \"foo@gmail.com\",\n            personalToken: \"xxxXXXxxXXXXxxXXXXxxxXXXXxxXXXXxxxxxXXXXxxx\"\n        }\n    ],\n    buildMonitors: [\n        {\n            name: \"my monitor 01\",\n            teamProject: \"MyTeamProject\",\n            connectionName: \"my connection 01\"\n        }\n    ],\n    lightBulbs: [\n        {\n            name: \"my bulb config 01\",\n            technology: \"lifx\",\n            buildMonitorsNames: [\"my monitor 01\"],\n            selector: \"all\",\n            personalToken: \"yyyyYYYYyyYYyyyYYYyyyyyyYYYYyyyyyYYYyyyyyyYYyyyy\"\n        }\n    ]\n});\n```\n\nTo stop the application, you simply do\n```javascript\nmonitor.stopWatchingBuilds();\n```\n## Options\n\n#### `connections`\nArray of connections to one or more build servers.\n\n| Attribute\t\t   | Type\t  | Supported values |  \t    | Description |\n| :--------------- | :------: | :--------------- | :------: | :---------- |\n| `name`\t\t   | *String* | -\t\t         | Required\t\t| Unique name (id) of the connection. |\n| `technology`\t   | *String* | \"tfs\"\t\t     | Required\t\t| Technology of the build server. TFS is currently the only build server supported. |\n| `collection`\t   | *String* | -\t\t         | Required\t\t| Name of the Team Project Collection on TFS. |\n| `server`\t       | *String* | -\t\t         | Required\t\t| Address of the build server. |\n| `user`           | *String* | -\t\t         | Required\t\t| User account to authenticate to the build server via REST api. |\n| `personalToken`  | *String* | -\t\t         | Required\t\t| App token for authorizations on the build server. For TFS, take a look at [Create personal access tokens to authenticate access](https://www.visualstudio.com/en-us/docs/integrate/get-started/auth/overview). Only the scope **Build (read)** is required. The token supplied must be associated to the value supplied on `user`. |\n\n#### `buildMonitors`\nArray of monitors that connect to build servers and check the build status\n\n| Attribute\t\t   | Type\t  | Supported values |  \t    | Description |\n| :--------------- | :------: | :--------------- | :------: | :---------- |\n| `name`\t\t   | *String* | -                | Required | Unique name (id) of the build monitor. |\n| `teamProject`\t   | *String* | -\t\t         | Required\t| Name of the Team Project on TFS. |\n| `connectionName` | *String* | -\t\t         | Required\t| id of the connection that will be used by the monitor. it must be an existing `options.connections[].name`. | \n| `definitions`\u003cbr/\u003e`queues`\u003cbr/\u003e`type`\u003cbr/\u003e`requestedFor`\u003cbr/\u003e`reasonFilter`\u003cbr/\u003e`tagFilters`\u003cbr/\u003e`propertyFilters`\u003cbr/\u003e\t| *String*\t\t| -\t\t| Optional\t\t| TFS parameters that are also supported. Check the [TFS Builds api](https://www.visualstudio.com/en-us/docs/integrate/api/build/builds) for the MSDN documentation of these parameters. The TFS api documentation contains many other parameters that aren't listed here, but gecko-ci will handle them. Although it's strongly recommended that you don't override these arguments that aren't listed here, you can play with them at your own risk. |\n\n#### `lightBulbs`\nArray of light bulbs that display the status of one or more build monitors\n\n| Attribute\t\t   | Type\t  | Supported values |  \t    | Description |\n| :--------------- | :------: | :--------------- | :------: | :---------- |\n| `name`   \t\t   | *String* | -\t\t         | Required\t| Unique name (id) of the light bulb. |\n| `technology`\t   | *String* | \"lifx\"\t\t | Required\t| Technology of the light bulb. LIFX is currently the only bulb supported. |\n| `buildMonitorsNames`\t| *String[]*\t\t| -\t\t| Required\t\t| array of ids of build monitors that are linked to this light bulb configuration. it must be an existing `options.buildMonitors[].name`. |\n| `selector`\t\t| *String*\t\t| -\t\t| Required\t\t| A LIFX selector. Check the [LIFX selectors](https://api.developer.lifx.com/docs/selectors) for the documentation of this argument. |\n| `personalToken`  |  *String* | -\t\t| Required\t\t| App token for authorizations on the LIFX server. Check the [Account settings](https://cloud.lifx.com/settings) in order to generate a token. |\n\n## License\n[GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminduca%2Fgecko-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fminduca%2Fgecko-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminduca%2Fgecko-ci/lists"}