{"id":51043634,"url":"https://github.com/axeforging/pipekit","last_synced_at":"2026-06-22T12:02:01.967Z","repository":{"id":365321864,"uuid":"1153377687","full_name":"AxeForging/pipekit","owner":"AxeForging","description":"CI/CD pipeline Swiss Army knife - replace ugly bash one-liners with a single portable binary","archived":false,"fork":false,"pushed_at":"2026-06-16T20:33:50.000Z","size":1570,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T22:17:01.882Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/AxeForging.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","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-02-09T08:25:08.000Z","updated_at":"2026-06-16T20:33:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AxeForging/pipekit","commit_stats":null,"previous_names":["axeforging/pipekit"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/AxeForging/pipekit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Fpipekit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Fpipekit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Fpipekit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Fpipekit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AxeForging","download_url":"https://codeload.github.com/AxeForging/pipekit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AxeForging%2Fpipekit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34647750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"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":[],"created_at":"2026-06-22T12:01:57.476Z","updated_at":"2026-06-22T12:02:01.957Z","avatar_url":"https://github.com/AxeForging.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/pipekit-wordmark.png\" alt=\"Pipekit — CI/CD pipeline toolkit\" width=\"520\"\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Go-1.25%2B-00ADD8?style=flat-square\u0026logo=go\" alt=\"Go Version\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/OS-Linux%20%7C%20macOS%20%7C%20Windows-darkblue?style=flat-square\u0026logo=windows\" alt=\"OS Support\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-MIT-green?style=flat-square\" alt=\"License\"\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n**CI/CD pipeline Swiss Army knife** — replace fragile bash one-liners with a single, portable Go binary.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/demo.gif\" alt=\"pipekit demo — read JSON/YAML, parse image refs and URLs, retry+mask, cache keys, version bumps\" width=\"900\"\u003e\n\u003c/div\u003e\n\n```bash\n# BEFORE                                    # AFTER\nfor key in $(jq -r 'keys[]' config.json);   pipekit env from-json config.json \\\n  do                                          --uppercase-keys --to-github\n  value=$(jq -r \".[\\\"$key\\\"]\" config.json)\n  echo \"${key^^}=$value\" \u003e\u003e \"$GITHUB_ENV\"\ndone\n```\n\nOne static binary, no runtime deps, works the same on Linux, macOS, and Windows.\n\n---\n\n## Quick install\n\n```sh\n# Linux x86_64\ncurl -L https://github.com/AxeForging/pipekit/releases/latest/download/pipekit-linux-amd64.tar.gz | tar xz\nsudo mv pipekit-linux-amd64 /usr/local/bin/pipekit\n```\n\nARM64, macOS, Windows, source builds → **[docs/INSTALL.md](docs/INSTALL.md)**\n\n---\n\n## 30-second tour\n\n```sh\n# Extract JSON config into GITHUB_ENV as UPPER_SNAKE_CASE\npipekit env from-json config.json --flatten --uppercase-keys --to-github\n\n# Fail fast if required vars are missing\npipekit assert env-exists DEPLOY_TOKEN CLUSTER_NAME IMAGE_TAG\n\n# Wait for a service to be ready\npipekit wait url http://localhost:8080/healthz --timeout 150s\npipekit wait grpc localhost:50051 --service my.package.Worker --timeout 60s\npipekit wait ws ws://localhost:8080/events --timeout 60s\n\n# Request an API and extract JSON without curl+jq\npipekit http get https://api.example.com/release --expect-status 200 --jq .tag --raw\n\n# Pack cross-platform release archives\npipekit archive pack dist/app.tar.zst ./bin/app README.md\n\n# Retry a flaky command with exponential backoff\npipekit retry run --attempts 5 --delay 5s --backoff -- helm upgrade --install myapp ./chart\n\n# Notify Slack on success/failure\npipekit notify slack --status success --title \"Deploy v1.2.3 to prod\"\n```\n\nMore end-to-end recipes → **[docs/EXAMPLES.md](docs/EXAMPLES.md)**\n\n---\n\n## Commands at a glance\n\n| Command | What it does | Reference |\n|---|---|---|\n| `env` | Parse JSON / YAML / dotenv into env vars (GITHUB_ENV, GITHUB_OUTPUT, GitLab) | [↗](docs/COMMANDS.md#env) |\n| `mask` | Hide secrets in logs (regex patterns, partial reveal, GitHub `::add-mask::`) | [↗](docs/COMMANDS.md#mask) |\n| `transform` | base64, URL-encode, case conversion, regex replace, templates, hash, slug | [↗](docs/COMMANDS.md#transform) |\n| `summary` | Append markdown / tables / badges / collapsibles to `$GITHUB_STEP_SUMMARY` | [↗](docs/COMMANDS.md#summary) |\n| `assert` | Pipeline guards: env vars, files, JSON paths, semver, URL health | [↗](docs/COMMANDS.md#assert) |\n| `matrix` | Build GitHub Actions matrix JSON from dirs / files / JSON / Cartesian product | [↗](docs/COMMANDS.md#matrix) |\n| `notify` | Slack / Discord / Teams / generic webhook with status formatting | [↗](docs/COMMANDS.md#notify) |\n| `wait` | Poll a URL / TCP port / shell command until ready | [↗](docs/COMMANDS.md#wait) |\n| `diff` | Detect changed files / dirs / services between git refs (monorepo-friendly) | [↗](docs/COMMANDS.md#diff) |\n| `version` | Get / bump / compare versions across `package.json`, `Cargo.toml`, `Chart.yaml`, etc. | [↗](docs/COMMANDS.md#version) |\n| `retry` | Run any command with attempt count, delay, backoff, exit-code filtering | [↗](docs/COMMANDS.md#retry) |\n| `cache-key` | Deterministic SHA256 cache keys from files / globs / composite parts | [↗](docs/COMMANDS.md#cache-key) |\n| `checksum` | Generate / verify release checksums for artifact files | [↗](docs/COMMANDS.md#checksum) |\n| `artifact` | Assert artifacts exist and generate size/SHA256 manifests | [↗](docs/COMMANDS.md#artifact) |\n| `archive` | Pack, list, and unpack zip/tar/tar.gz/tar.xz/tar.zst archives | [↗](docs/COMMANDS.md#archive) |\n| `git` | CI-friendly git metadata: ref, SHA, tags, dirty state | [↗](docs/COMMANDS.md#git) |\n| `changelog` | Generate release notes from git commit ranges | [↗](docs/COMMANDS.md#changelog) |\n| `config` | Resolve env-specific config maps; map branches to environments | [↗](docs/COMMANDS.md#config) |\n| `parse` | Pull fenced code blocks / YAML / frontmatter out of issue bodies, PR comments, markdown | [↗](docs/COMMANDS.md#parse) |\n| `comment` | Render, inspect, select, and amend hidden-anchor PR comments | [↗](docs/COMMANDS.md#comment) |\n| `json` / `yaml` | Get / set / del / deep-merge / convert / pretty / table on JSON, YAML, TOML, CSV | [↗](docs/COMMANDS.md#json) |\n| `render` | Render Go templates with a sprig-like FuncMap and stacked `--values` files | [↗](docs/COMMANDS.md#render) |\n| `exec` | Unified retry + mask + tee + timeout command runner | [↗](docs/COMMANDS.md#exec) |\n| `http` | Curl-like HTTP requests, JSON extraction, uploads, and chained flows | [↗](docs/COMMANDS.md#http) |\n| `url parse` | Split a URL into `SCHEME / HOST / PORT / USER / PASSWORD / PATH / QUERY` env vars | [↗](docs/COMMANDS.md#url) |\n| `image parse` | Split a container image ref into registry / repository / tag / digest | [↗](docs/COMMANDS.md#image) |\n| `time` | RFC3339 / unix / tag / compact / iso timestamps; format conversion; arithmetic | [↗](docs/COMMANDS.md#time) |\n| `port free` · `uuid` · `random` | Tiny generators for ephemeral resource names and ports | [↗](docs/COMMANDS.md#misc) |\n| `doctor` | Diagnose CI platform, env-var contract, tool availability | [↗](docs/COMMANDS.md#doctor) |\n\nFull flag reference → **[docs/COMMANDS.md](docs/COMMANDS.md)**\n\n---\n\n## Documentation\n\n| Doc | When to read |\n|---|---|\n| [INSTALL.md](docs/INSTALL.md) | Install on Linux / macOS / Windows, build from source |\n| [REQUIREMENTS.md](docs/REQUIREMENTS.md) | Supported platforms, runtime deps, CI env vars contract |\n| [COMMANDS.md](docs/COMMANDS.md) | Full reference: every command, every flag, copy-pasteable examples |\n| [EXAMPLES.md](docs/EXAMPLES.md) | End-to-end pipeline recipes (GitHub Actions, GitLab CI, Jenkins) |\n| [CONTRIBUTING.md](docs/CONTRIBUTING.md) | Repo layout, adding a command, testing, releasing |\n| [AI/README.md](docs/AI/README.md) | Architecture reference for AI assistants working in this repo |\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxeforging%2Fpipekit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxeforging%2Fpipekit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxeforging%2Fpipekit/lists"}