{"id":43586986,"url":"https://github.com/danielmschmidt/go-again","last_synced_at":"2026-02-25T16:00:32.659Z","repository":{"id":336099657,"uuid":"1148268105","full_name":"DanielMSchmidt/go-again","owner":"DanielMSchmidt","description":"A CLI tool that remembers your failing Go tests so you can re-run them quickly.","archived":false,"fork":false,"pushed_at":"2026-02-20T06:51:11.000Z","size":4796,"stargazers_count":1,"open_issues_count":9,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-20T11:18:48.600Z","etag":null,"topics":["cli","golang-testing"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/DanielMSchmidt.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-02T19:14:19.000Z","updated_at":"2026-02-12T12:05:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"36f64d40-a45f-43cf-b25a-895803484bef","html_url":"https://github.com/DanielMSchmidt/go-again","commit_stats":null,"previous_names":["danielmschmidt/go-again"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/DanielMSchmidt/go-again","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielMSchmidt%2Fgo-again","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielMSchmidt%2Fgo-again/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielMSchmidt%2Fgo-again/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielMSchmidt%2Fgo-again/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DanielMSchmidt","download_url":"https://codeload.github.com/DanielMSchmidt/go-again/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanielMSchmidt%2Fgo-again/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29829408,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T15:41:19.027Z","status":"ssl_error","status_checked_at":"2026-02-25T15:40:47.150Z","response_time":61,"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":["cli","golang-testing"],"created_at":"2026-02-04T01:15:42.946Z","updated_at":"2026-02-25T16:00:32.651Z","avatar_url":"https://github.com/DanielMSchmidt.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-again\n\nA CLI tool that remembers your failing Go tests so you can re-run or watch them quickly.\n\n![go-again demo](demo.gif)\n\n## The Problem\n\nWhen working on a large Go codebase, you often:\n\n1. Run all tests and see several failures\n2. Pick one failing test to fix\n3. Want to re-run *just* the failing tests to check your fix\n4. Repeat until all tests pass\n\nManually copying test names and constructing `go test -run` commands gets tedious fast.\n\n## The Solution\n\n`go-again` automates this workflow:\n\n```sh\n# Run tests and remember failures\ngo test ./... | go-again remember\n\n# Re-run only the failing tests\ngo-again run\n```\n\nThat's it. Failed tests are stored per project and branch, so you can context-switch freely.\n\n## Installation\n\n### Homebrew (macOS) - Recommended\n\n```sh\nbrew tap danielmschmidt/homebrew-tap\nbrew install go-again\n```\n\nOr in one command:\n\n```sh\nbrew install danielmschmidt/homebrew-tap/go-again\n```\n\n### Binary Releases\n\nDownload pre-built binaries from [GitHub Releases](https://github.com/DanielMSchmidt/go-again/releases).\n\n### From Source\n\nRequires [Rust](https://rustup.rs/):\n\n```sh\ncargo install --git https://github.com/DanielMSchmidt/go-again\n```\n\n## Quick Start\n\n```sh\n# 1. Run your tests and pipe to go-again\ngo test ./... | go-again remember\n# Output: Remembered 3 failing tests\n\n# 2. Fix a bug, then re-run just the failing tests\ngo-again run\n\n# 3. Once everything passes, clear the list\ngo-again clear\n```\n\n## Commands\n\n### `remember` - Capture failing tests\n\nReads `go test` output from stdin and stores any failures.\n\n```sh\ngo test ./... | go-again remember\ngo test ./... -v | go-again remember   # verbose works too\ngo test ./... -json | go-again remember # JSON output works too\n```\n\n### `run` - Re-run failing tests\n\nRuns all remembered failing tests.\n\n```sh\ngo-again run\n```\n\nUse `--update` to automatically remove tests that now pass:\n\n```sh\ngo-again run --update\n```\n\n### `list` - Show failing tests\n\nSee what tests are currently remembered.\n\n```sh\ngo-again list\n# ./internal/logic TestCalculateSum\n# ./api/handler TestHandleRequest\n```\n\n### `select` - Pick tests interactively\n\nOpens an fzf-style picker to choose which tests to run.\n\n```sh\ngo-again select\n```\n\n### `watch` - Interactive test loop\n\nCombines `select` and `run` in a loop. Pick tests, run them, repeat.\n\n```sh\ngo-again watch\n```\n\n### `clear` - Reset\n\nForget all remembered tests for the current project/branch.\n\n```sh\ngo-again clear\n```\n\n## How It Works\n\n- Failed tests are stored in `~/.go-again/state.json`\n- Each project+branch combination has its own list\n- Project identity is based on git repository root and current branch\n- Switching branches automatically switches to that branch's failing tests\n\n## Contributing\n\n### Demo GIF\n\nThe demo GIF is generated from `demo.tape` using [VHS](https://github.com/charmbracelet/vhs). CI verifies the tape runs successfully and that `demo.gif` is up-to-date.\n\nIf you modify `demo.tape`, regenerate the GIF before committing:\n\n```sh\nbrew install vhs  # or: go install github.com/charmbracelet/vhs@latest\nvhs demo.tape\ngit add demo.gif\n```\n\n### Example project\n\nThe `testdata/example-project` contains a Go project with intentionally failing tests. CI runs the full go-again workflow against it to verify the CLI works correctly.\n\n```sh\ncd testdata/example-project\ngo test ./... | go-again remember\ngo-again list\ngo-again run\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielmschmidt%2Fgo-again","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielmschmidt%2Fgo-again","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielmschmidt%2Fgo-again/lists"}