{"id":13878004,"url":"https://github.com/grodowski/undercover-ci","last_synced_at":"2025-07-31T05:31:14.756Z","repository":{"id":36853196,"uuid":"157597157","full_name":"grodowski/undercover-ci","owner":"grodowski","description":"UndercoverCI - GitHub App for actionable code coverage","archived":false,"fork":false,"pushed_at":"2025-07-24T21:58:26.000Z","size":4108,"stargazers_count":7,"open_issues_count":13,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-25T01:46:38.591Z","etag":null,"topics":["coverage","github-app","hacktoberfest","ruby","test-coverage","testing"],"latest_commit_sha":null,"homepage":"https://undercover-ci.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grodowski.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-11-14T19:05:14.000Z","updated_at":"2025-07-24T21:56:04.000Z","dependencies_parsed_at":"2023-02-15T05:01:42.457Z","dependency_job_id":"4dbe964b-d0df-4e4e-a1d6-8e4cf64b6a4e","html_url":"https://github.com/grodowski/undercover-ci","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/grodowski/undercover-ci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grodowski%2Fundercover-ci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grodowski%2Fundercover-ci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grodowski%2Fundercover-ci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grodowski%2Fundercover-ci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grodowski","download_url":"https://codeload.github.com/grodowski/undercover-ci/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grodowski%2Fundercover-ci/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267992016,"owners_count":24177761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["coverage","github-app","hacktoberfest","ruby","test-coverage","testing"],"created_at":"2024-08-06T08:01:37.272Z","updated_at":"2025-07-31T05:31:14.080Z","avatar_url":"https://github.com/grodowski.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"![logo](https://github.com/grodowski/undercover-ci/assets/4991698/49b55d6b-47d5-4e9d-b650-676cb8c6a357)\n# UndercoverCI\n\n[![Build Status](https://github.com/grodowski/undercover-ci/actions/workflows/ruby.yml/badge.svg)](https://github.com/grodowski/undercover-ci/actions/workflows/ruby.yml)\n\nGitHub Checks with code coverage warnings from [undercover](https://github.com/grodowski/undercover), detecting when code being changed is untested.\n\nWorks with Ruby and GitHub.\n\n![github_check_preview](app/assets/images/check_screenshot.png)\n\n## Installation\n\nSign up on [https://undercover-ci.com](https://undercover-ci.com) to set it up with your CI pipeline.\n\n#### 1. Report test coverage with simplecov\n\n```\nrequire 'simplecov'\nrequire 'simplecov-lcov'\nSimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true\nSimpleCov.formatter = SimpleCov::Formatter::LcovFormatter\nSimpleCov.start do\n  add_filter(/^\\/spec\\//) # For RSpec, use `test` for MiniTest\nend\n````\n\n#### 2. Upload coverage data after running tests\n\nUndercoverCI accepts LCOV-formatted coverage reports. Please use the `simplecov-lcov` gem to generate them when running your specs. Then you should be able to create a build step uploading the coverage file with `uploader.rb`.\n\nExample:\n```\nruby -e \"$(curl -s https://undercover-ci.com/uploader.rb)\" -- \\\n  --repo grodowski/undercover-ci \\\n  --commit $TRAVIS_COMMIT \\\n  --lcov coverage/lcov/undercover-ci.lcov\n```\n\n#### 3. Receive GitHub checks for commits and pull request\n\n## Development and contributing\n\nHere's a short summary of the development feeback loop with webhooks delivered through `ngrok`.\n\n1. Start `rails s`. ActiveJob jobs are processed synchronously in `development`, so that's all you need.\n\n2. Start `ngrok http 3000` to accept webhooks locally.\n\n3. Configure the UndercoverCI (DEV) on GitHub to to point at your `ngrok` url\n\n4. Make a test commit in `twitchy-tortoise/undercover-test` or any other test app that has UndercoverCI (DEV) installed.\n\n5. Push it\n\n```\ngit commit --amend -m  \"test with branch cov\" \u0026\u0026 git push -f\n```\n\n6. Send a fake coverage report using the uploader API with the `--url` flag pointing to the local server:\n\n```\nruby -e \"$(curl -s https://undercover-ci.com/uploader.rb)\" -- \\\n                  --repo twitchy-tortoise/undercover-test \\\n                  --commit $(git rev-parse HEAD) \\\n                  --lcov coverage/lcov/undercover-test.lcov \\\n                  --url http://localhost:3000/v1/coverage\n201\n```\n\n7. Check out app logs for errors and see the newly created GitHub Check on the commit.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrodowski%2Fundercover-ci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrodowski%2Fundercover-ci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrodowski%2Fundercover-ci/lists"}