{"id":19269549,"url":"https://github.com/status-im/github-comment-manager","last_synced_at":"2026-03-12T21:03:45.670Z","repository":{"id":40733419,"uuid":"161504272","full_name":"status-im/github-comment-manager","owner":"status-im","description":"Service for managing comments on GitHub","archived":false,"fork":false,"pushed_at":"2026-03-02T08:46:19.000Z","size":481,"stargazers_count":3,"open_issues_count":12,"forks_count":0,"subscribers_count":55,"default_branch":"master","last_synced_at":"2026-03-02T11:48:07.919Z","etag":null,"topics":["comments","continuous-integration","github"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/status-im.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-12-12T15:02:48.000Z","updated_at":"2026-01-20T19:43:00.000Z","dependencies_parsed_at":"2026-01-20T23:00:07.436Z","dependency_job_id":null,"html_url":"https://github.com/status-im/github-comment-manager","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/status-im/github-comment-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/status-im%2Fgithub-comment-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/status-im%2Fgithub-comment-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/status-im%2Fgithub-comment-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/status-im%2Fgithub-comment-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/status-im","download_url":"https://codeload.github.com/status-im/github-comment-manager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/status-im%2Fgithub-comment-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30444292,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T20:23:30.529Z","status":"ssl_error","status_checked_at":"2026-03-12T20:23:14.027Z","response_time":114,"last_error":"SSL_read: 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":["comments","continuous-integration","github"],"created_at":"2024-11-09T20:20:28.534Z","updated_at":"2026-03-12T21:03:45.651Z","avatar_url":"https://github.com/status-im.png","language":"JavaScript","readme":"# Description\n\nThis is a minimal REST API intended for use with a Continuous Integration system for managing comments on GitHub.\n\nThe problem this solves is posting comments in a PR from multiple builds without spamming the comment section. Instead we post just one comment with a table and continue to update it.\n\n# Example Comment\n\n---\n### Jenkins Builds\n| :grey_question: | Commit | :hash: | Finished (UTC) | Duration | Platform | Result |\n|-|-|-|-|-|-|-|\n| :x: | a088572b | [#3](https://example.org) | 2018-12-21 12:13:18 | ~12 min | `android` | [:page_facing_up:`log`](https://example.org) |\n| :heavy_check_mark: | a088572b | [#3](https://example.org) | 2018-12-21 12:13:53 | ~12 min | `ios` | [:package:`api`](https://example.org) |\n| :heavy_check_mark: | a088572b | [#3](https://example.org) | 2018-12-21 12:13:34 | ~12 min | `android` | [:package:`apk`](https://example.org) [:calling:](https://chart.apis.google.com/chart?cht=qr\u0026chs=400x400\u0026chld=L%7C%0A0\u0026chl=https%3A%2F%2Fexample.org) |\n| :heavy_check_mark: | a088572b | [#3](https://example.org) | 2018-12-21 12:14:44 | ~12 min | `windows` | [:package:`exe`](https://example.org) |\n| :interrobang: | a088572b | [#3](https://example.org) | 2018-12-21 12:15:37 | ~13 min | `macos` | [:page_facing_up:`log`](https://example.org) |\n| :heavy_multiplication_x: | a088572b | [#3](https://example.org) | 2018-12-21 12:16:40 | ~12 min | `linux` | [:package:`pkg`](https://unknown.example.org/path/package) |\n---\n\n# API\n\nIt exposes 3 calls:\n\n* `GET /builds/:repo/:pr` - Return all known builds for given PR in repo.\n* `POST /builds/:repo/:pr` - Add a new build result and update the PR comment.\n* `POST /builds/:repo/:pr/refresh` - Re-render the comment for given PR ID.\n* `DELETE /builds/:repo/:pr` - Delete all known builds for given PR ID in repo. \n* `POST /comments` - Show currently managed comments in PRs.\n\nBy default it listens on `localhost:8000`.\n\n# Usage\n\n```\n$ cat \u003c\u003c EOF\n{\n  \"id\": 1, \"commit\": \"7367f3d5\", \"success\": true, \"platform\": \"linux\", \"duration\": \"~15 min\",\n  \"url\": \"https://ci.status.im/job/status-react/job/prs/job/linux/job/PR-7123/1/\",\n  \"pkg_url\": \"https://status-im-prs.ams3.digitaloceanspaces.com/StatusIm-181212-211210-5157d2-pr.AppImage\"\n}\nEOF \u003e\u003e /tmp/body/json\n\n$ curl -s -XPOST http://localhost:8000/builds/my-repo/7123 -d@/tmp/body.json -H 'Content-Type: application/json'\n{ \"status\": \"ok\" }\n\n$ curl -s -XPOST http://localhost:8000/builds/my-repo/7123/refresh\n{ \"status\": \"ok\" }\n```\nYou can also check all PRs the application knows about:\n```\n$ curl -s http://localhost:8000/comments\n{\n  \"count\": 2,\n  \"comments\": [\n    { \"pr\": \"7000\", \"comment_id\": 446940840 },\n    { \"pr\": \"7084\", \"comment_id\": 446779864 }\n  ]\n}\n```\n# Configuration\n\nThere are few environment variables you can set:\n\n* `LISTEN_PORT` - Self explanatory. (Default: `8000`)\n* `DB_SAVE_INTERVAL` - How often database is written to disk. (Default: `5000`)\n* `DB_PATH` - Path where the [LokiJS](http://lokijs.org/#/) DB file is stored. (Default: `/tmp/builds.db`)\n* `GH_TOKEN` - Required for GitHub API access.\n* `GH_REPO_OWNER` - Name of owner of repo to manage.\n* `GH_REPO_NAMES` - Whitelist of names of GitHub repos to manage. (Empty means all)\n\n# Building\n\n* `yarn run start` - For production use.\n* `yarn run devel` - For development use.\n* `yarn run default` - For building use.\n* `yarn run release` - To create and push the docker image use.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatus-im%2Fgithub-comment-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstatus-im%2Fgithub-comment-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatus-im%2Fgithub-comment-manager/lists"}