{"id":49606531,"url":"https://github.com/bavix/gripmock-action","last_synced_at":"2026-05-04T13:10:04.740Z","repository":{"id":348174568,"uuid":"1196494677","full_name":"bavix/gripmock-action","owner":"bavix","description":"Start GripMock in GitHub Actions for gRPC tests, mocks, replay, and proxy workflows","archived":false,"fork":false,"pushed_at":"2026-03-31T05:16:42.000Z","size":57,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-31T06:48:21.014Z","etag":null,"topics":["github-actions","grpc-mock","grpc-mock-server"],"latest_commit_sha":null,"homepage":"https://bavix.github.io/gripmock/","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/bavix.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":"2026-03-30T18:53:15.000Z","updated_at":"2026-03-31T04:12:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bavix/gripmock-action","commit_stats":null,"previous_names":["bavix/gripmock-action"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/bavix/gripmock-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bavix%2Fgripmock-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bavix%2Fgripmock-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bavix%2Fgripmock-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bavix%2Fgripmock-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bavix","download_url":"https://codeload.github.com/bavix/gripmock-action/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bavix%2Fgripmock-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32608446,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"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":["github-actions","grpc-mock","grpc-mock-server"],"created_at":"2026-05-04T13:10:03.913Z","updated_at":"2026-05-04T13:10:04.728Z","avatar_url":"https://github.com/bavix.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GripMock GitHub Action\n\nRun [GripMock](https://github.com/bavix/gripmock) in your workflow with a single step.\n\nThe action wraps **the fastest and most reliable gRPC mock server** for CI scenarios.\n\nThis action:\n\n- downloads GripMock binary from GitHub Releases (`latest` or pinned version)\n- starts GripMock in background\n- waits for readiness (`/api/health/readiness`)\n- exposes connection outputs for test steps\n- stops GripMock automatically in the post step\n\n## Quick start\n\n```yaml\nname: test\n\non: [push, pull_request]\n\njobs:\n  e2e:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v5\n\n      - name: Start GripMock\n        uses: bavix/gripmock-action@v1\n        with:\n          source: proto/service.proto\n          stub: stubs\n\n      - name: Run tests\n        run: go test ./...\n```\n\n## Recommended API\n\n### Inputs\n\n| Input | Default | Description |\n| --- | --- | --- |\n| `source` | `\"\"` | Single descriptor source (`.proto`, `.pb`, `buf.build/...`, `grpc://...`, `grpcs://...`) |\n| `sources` | `\"\"` | Extra sources, one per line |\n| `stub` | `\"\"` | Stub folder/file passed as `--stub` |\n| `imports` | `\"\"` | Proto import directories, one per line (`--imports`) |\n| `plugins` | `\"\"` | Plugin paths (`.so`), one per line (`--plugins`) |\n| `extra-args` | `\"\"` | Additional raw args, one per line |\n| `version` | `latest` | GripMock version (`latest`, `3.7.1`, `v3.7.1`) |\n| `github-token` | `\"\"` | Optional token used only for authenticated `latest` fallback to GitHub API |\n| `grpc-host` | `127.0.0.1` | `GRPC_HOST` env |\n| `grpc-port` | `4770` | `GRPC_PORT` env |\n| `http-host` | `127.0.0.1` | `HTTP_HOST` env |\n| `http-port` | `4771` | `HTTP_PORT` env |\n| `log-level` | `info` | `LOG_LEVEL` env |\n| `env` | `\"\"` | Extra env vars, one `KEY=VALUE` per line |\n| `wait` | `true` | Wait for readiness before finishing step |\n| `wait-timeout` | `30s` | Max readiness wait time (`ms`, `s`, `m`) |\n| `wait-interval` | `500ms` | Poll interval while waiting |\n| `auto-stop` | `true` | Stop GripMock in post step |\n| `log-file` | `${{ runner.temp }}/gripmock.log` | File to write GripMock logs |\n\n### Outputs\n\n| Output | Description |\n| --- | --- |\n| `version` | Resolved GripMock version (without `v`) |\n| `binary-path` | Full path to downloaded binary |\n| `pid` | GripMock process id |\n| `grpc-addr` | `\u003cgrpc-host\u003e:\u003cgrpc-port\u003e` |\n| `http-addr` | `\u003chttp-host\u003e:\u003chttp-port\u003e` |\n| `grpc-port` | Effective gRPC port |\n| `http-port` | Effective HTTP port |\n| `readiness-url` | Health endpoint URL used by waiter |\n| `log-file` | Effective log file path |\n\n## Advanced examples\n\n### BSR module + custom env\n\n```yaml\n- name: Start GripMock from BSR\n  uses: bavix/gripmock-action@v1\n  with:\n    source: buf.build/connectrpc/eliza\n    stub: stubs\n    env: |\n      BSR_BUF_TOKEN=${{ secrets.BSR_BUF_TOKEN }}\n```\n\n### Reflection source with replay mode\n\n```yaml\n- name: Start replay mode\n  uses: bavix/gripmock-action@v1\n  with:\n    source: grpc+replay://localhost:50051\n    wait-timeout: 60s\n```\n\n### Multiple proto files and imports\n\n```yaml\n- name: Start GripMock with multiple sources\n  uses: bavix/gripmock-action@v1\n  with:\n    source: proto/a.proto\n    sources: |\n      proto/b.proto\n      proto/c.proto\n    imports: |\n      proto\n      third_party\n```\n\n## Notes\n\n- Use pinned `version` in CI for reproducibility.\n- If `version` is pinned (`x.y.z`), the action does not call GitHub release API.\n- For `version: latest`, the action resolves via redirect first; API fallback is used only when `github-token` is provided.\n- `extra-args` is parsed line-by-line; each line is one CLI argument.\n- If startup fails, the action prints the last part of the log file.\n- Node runtime is `node24` (requires GitHub Actions Runner `v2.327.1+`).\n\n## Project structure\n\nThis repository follows the same structure used by mature JavaScript actions (for example, `actions/checkout`):\n\n- `action.yml` - action metadata and API contract\n- `src/` - editable source code\n- `dist/` - runtime files used by GitHub Actions (`runs.main` and `runs.post`)\n- `.github/workflows/ci.yml` - CI validation (build + syntax checks)\n- `.github/workflows/check-dist.yml` - dedicated guard that `dist/` is always committed and in sync\n- `scripts/build.mjs` - deterministic build step (`src` -\u003e `dist`)\n\nDevelopment commands:\n\n```bash\nnpm run build\nnpm run check\n```\n\nSmoke validation in pull requests (`.github/workflows/release-smoke.yml`) runs this action against:\n\n- local Greeter descriptor source as `.proto`\n- local Greeter descriptor source as compiled `.pb`\n- BSR source `buf.build/connectrpc/eliza`\n- reflection and upstream modes: `grpc://`, `grpc+proxy://`, `grpc+replay://`, `grpc+capture://` (using `bavix/greeter-server`)\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbavix%2Fgripmock-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbavix%2Fgripmock-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbavix%2Fgripmock-action/lists"}