{"id":26114724,"url":"https://github.com/basecamp/gh-signoff","last_synced_at":"2025-07-20T03:31:15.085Z","repository":{"id":280705865,"uuid":"886068815","full_name":"basecamp/gh-signoff","owner":"basecamp","description":"Local CI. Sign off on your own work.","archived":false,"fork":false,"pushed_at":"2025-04-30T07:49:36.000Z","size":29,"stargazers_count":903,"open_issues_count":0,"forks_count":12,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-07-18T05:34:45.568Z","etag":null,"topics":["gh-extension"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/basecamp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"MIT-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}},"created_at":"2024-11-10T05:22:02.000Z","updated_at":"2025-07-15T21:01:49.000Z","dependencies_parsed_at":"2025-04-30T07:35:40.175Z","dependency_job_id":"a91e1230-de56-4731-b8d8-06965596592f","html_url":"https://github.com/basecamp/gh-signoff","commit_stats":null,"previous_names":["basecamp/gh-signoff"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/basecamp/gh-signoff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fgh-signoff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fgh-signoff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fgh-signoff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fgh-signoff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/basecamp","download_url":"https://codeload.github.com/basecamp/gh-signoff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fgh-signoff/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266063096,"owners_count":23870716,"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","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":["gh-extension"],"created_at":"2025-03-10T05:03:04.167Z","updated_at":"2025-07-20T03:31:15.080Z","avatar_url":"https://github.com/basecamp.png","language":"Shell","funding_links":[],"categories":["Shell","⭐ Most Starred","Actions/CI"],"sub_categories":[],"readme":"# gh-signoff\n\nA GitHub CLI extension for local CI. Run your tests on your own machine and sign off when they pass.\n\nRemote CI runners are fantastic for repeatable builds, comprehensive test suites, and parallelized execution. But many apps don't need all that. Maybe yours doesn't either.\n\nDev laptops are super fast these days. They're chronically underutilized. And you already own them. Cloud CI services are typically slow, expensive, and rented.\n\nYou already trusted your team with good test/push/deploy discipline. Merge queues, deployment pipelines, and high ceremony CI is … all too much.\n\nA green GitHub commit status is just the ticket, but it's quite a hassle to get one WITHOUT renting cloud CI.\n\nSo let's do it ourselves. Bring CI back in-house.\n\nRun your test suite (`rails test`) and sign off on your work when it passes (`gh signoff`).\n\nYou're the CI now. ✌️👀\n\n\n## How to sign off\n\n```bash\n# Install the extension\ngh extension install basecamp/gh-signoff\n\n# When your tests pass, sign off on your PR\ngh signoff\n```\n\n### To require signoff for PR merges\n\n```bash\n# Require signoff to merge PRs\ngh signoff install\n```\n\n## Advanced usage: Partial signoff\n\nA single signoff is all you need for most projects. If you're feeling extra fancy, picky, or organized, you can use *partial* signoff to reflect each CI step, each build platform (e.g. linux, macos, windows), each signoff role (e.g. qa, dev, ops), etc.\n\n```bash\n# Sign off on CI steps\ngh signoff tests      # Tests are green\ngh signoff lint       # Linting checks pass\ngh signoff security   # Security scan is happy\n\n# Or all at once\ngh signoff tests lint security\n```\n\nTo require partial signoff:\n\n```bash\n# Require partial signoff for the default branch\ngh signoff install security\n\n# Require multiple signoffs at once\ngh signoff install tests lint security\n\n# With a specific branch\ngh signoff install --branch main tests lint security\n\n# Check if partial signoff is required\ngh signoff check tests\ngh signoff check --branch main tests lint security\n```\n\n### Checking signoff status\n\nCheck whether you've signed off on the current commit:\n\n```bash\ngh signoff status\n✓ signoff\n```\n\nWith partial signoff:\n\n```bash\ngh signoff status\n✓ signoff\n✓ tests\n✗ lint\n✗ security\n```\n\n### Bash completion\n\n```bash\n# Add to ~/.bashrc:\neval \"$(gh signoff completion)\"\n```\n\n\n## License\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasecamp%2Fgh-signoff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasecamp%2Fgh-signoff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasecamp%2Fgh-signoff/lists"}