{"id":37682484,"url":"https://github.com/stacklok/releaseo","last_synced_at":"2026-02-03T16:16:14.309Z","repository":{"id":332629639,"uuid":"1133698483","full_name":"stacklok/releaseo","owner":"stacklok","description":"Just a release tool that helps automate some releasing stuff into an action","archived":false,"fork":false,"pushed_at":"2026-01-16T15:03:41.000Z","size":99,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T05:12:20.548Z","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/stacklok.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-01-13T17:44:06.000Z","updated_at":"2026-01-16T00:23:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stacklok/releaseo","commit_stats":null,"previous_names":["stacklok/releaseo"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/stacklok/releaseo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklok%2Freleaseo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklok%2Freleaseo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklok%2Freleaseo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklok%2Freleaseo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stacklok","download_url":"https://codeload.github.com/stacklok/releaseo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacklok%2Freleaseo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29048698,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T15:43:47.601Z","status":"ssl_error","status_checked_at":"2026-02-03T15:43:46.709Z","response_time":96,"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":[],"created_at":"2026-01-16T12:27:38.297Z","updated_at":"2026-02-03T16:16:14.265Z","avatar_url":"https://github.com/stacklok.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Releaseo\n\nA GitHub Action written in Go that creates release PRs with automated version bumping for VERSION files, Helm charts, and any YAML configuration.\n\n## Why Releaseo?\n\n### The Problem\n\nMaintaining version consistency across a project is surprisingly difficult, especially when deploying containerized applications with Helm charts. Common pain points include:\n\n- **Chart versions drift from image versions**: When you release a new version of your application, the Helm chart's `appVersion`, `image.tag`, and chart `version` need to stay in sync. This is often forgotten or done inconsistently.\n\n- **Manual version bumps are error-prone**: Developers frequently forget to update all the places where versions live, leading to mismatched deployments.\n\n- **Release automation gaps**: Tools like Renovate handle dependency updates well, but don't solve the problem of coordinating your own application's version across multiple files.\n\n- **Documentation gets out of sync**: Helm chart documentation (via helm-docs) needs regenerating when versions change, but this step is often missed.\n\nThis problem is well-documented in projects like [ToolHive](https://github.com/stacklok/toolhive/issues/1779), where the release flow required manual intervention to bump chart versions after image releases, causing CI failures and forgotten updates.\n\n### The Solution\n\nReleaseo automates the entire version bump workflow:\n\n1. Bump the version in your `VERSION` file (single source of truth)\n2. Propagate that version to any YAML files you specify (Chart.yaml, values.yaml, etc.)\n3. Optionally run helm-docs to regenerate chart documentation\n4. Create a release PR with all changes ready for review\n\nNo more forgotten version bumps. No more mismatched chart and image versions.\n\n## Features\n\n- Semantic version bumping (major, minor, patch)\n- Updates `VERSION` file as single source of truth\n- Updates any YAML file at any path (Chart.yaml version, appVersion, values.yaml image.tag, etc.)\n- Optional helm-docs integration for chart documentation\n- Creates release branch and PR automatically\n- Validates version is increasing\n- Preserves YAML formatting and comments\n\n## Usage\n\n### Basic Usage\n\n```yaml\nname: Release\n\non:\n  workflow_dispatch:\n    inputs:\n      bump_type:\n        description: 'Version bump type'\n        required: true\n        type: choice\n        options:\n          - patch\n          - minor\n          - major\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Create Release PR\n        uses: stacklok/releaseo@v1\n        with:\n          releaseo_version: v1.0.0\n          bump_type: ${{ inputs.bump_type }}\n          token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n### With Helm Chart Version Sync\n\n```yaml\n- name: Create Release PR\n  uses: stacklok/releaseo@v1\n  with:\n    releaseo_version: v1.0.0\n    bump_type: ${{ inputs.bump_type }}\n    token: ${{ secrets.GITHUB_TOKEN }}\n    version_files: |\n      - file: deploy/charts/myapp/Chart.yaml\n        path: version\n      - file: deploy/charts/myapp/Chart.yaml\n        path: appVersion\n      - file: deploy/charts/myapp/values.yaml\n        path: image.tag\n        prefix: \"v\"\n```\n\n### With helm-docs Integration\n\n```yaml\n- name: Setup Go\n  uses: actions/setup-go@v5\n  with:\n    go-version: '1.23'\n\n- name: Install helm-docs\n  run: go install github.com/norwoodj/helm-docs/cmd/helm-docs@latest\n\n- name: Create Release PR\n  uses: stacklok/releaseo@v1\n  with:\n    releaseo_version: v1.0.0\n    bump_type: ${{ inputs.bump_type }}\n    token: ${{ secrets.GITHUB_TOKEN }}\n    version_files: |\n      - file: deploy/charts/myapp/Chart.yaml\n        path: version\n      - file: deploy/charts/myapp/Chart.yaml\n        path: appVersion\n    helm_docs_args: --chart-search-root=deploy/charts/myapp --template-files=README.md.gotmpl\n```\n\n### Using Outputs\n\n```yaml\n- name: Create Release PR\n  id: release\n  uses: stacklok/releaseo@v1\n  with:\n    releaseo_version: v1.0.0\n    bump_type: ${{ inputs.bump_type }}\n    token: ${{ secrets.GITHUB_TOKEN }}\n\n- name: Print PR URL\n  run: |\n    echo \"Created PR #${{ steps.release.outputs.pr_number }}\"\n    echo \"URL: ${{ steps.release.outputs.pr_url }}\"\n    echo \"New version: ${{ steps.release.outputs.version }}\"\n```\n\n## Inputs\n\n| Input | Description | Required | Default |\n|-------|-------------|----------|---------|\n| `releaseo_version` | Version of releaseo to use (e.g., `v1.0.0`) | Yes | - |\n| `bump_type` | Version bump type (`major`, `minor`, `patch`) | Yes | - |\n| `version_file` | Path to VERSION file | No | `VERSION` |\n| `version_files` | YAML list of files with paths to update (see below) | No | - |\n| `helm_docs_args` | Arguments to pass to helm-docs (if provided, helm-docs runs) | No | - |\n| `token` | GitHub token for creating PR | Yes | - |\n| `base_branch` | Base branch for the PR | No | `main` |\n\n### version_files Format\n\nThe `version_files` input accepts a YAML list where each entry specifies:\n- `file`: Path to the YAML file\n- `path`: Dot-notation path to the value (e.g., `image.tag`, `metadata.version`)\n- `prefix`: Optional prefix to prepend to the version (e.g., `v` for `v1.0.0`)\n\n```yaml\nversion_files: |\n  - file: deploy/charts/myapp/Chart.yaml\n    path: version\n  - file: deploy/charts/myapp/Chart.yaml\n    path: appVersion\n  - file: deploy/charts/myapp/values.yaml\n    path: image.tag\n    prefix: \"v\"\n  - file: config/version.yaml\n    path: spec.version\n```\n\n## Outputs\n\n| Output | Description |\n|--------|-------------|\n| `version` | The new version number |\n| `pr_number` | The created PR number |\n| `pr_url` | The created PR URL |\n\n## How It Works\n\n1. Reads current version from `VERSION` file\n2. Calculates new version based on bump type:\n   - `major`: `1.0.0` → `2.0.0`\n   - `minor`: `1.0.0` → `1.1.0`\n   - `patch`: `1.0.0` → `1.0.1`\n3. Validates new version is greater than current\n4. Updates `VERSION` file\n5. Updates all specified `version_files` at their configured paths\n6. Runs helm-docs if `helm_docs_args` is provided\n7. Creates branch `release/v{version}`\n8. Commits all changes\n9. Creates pull request with release label\n\n## Development\n\n### Building\n\n```bash\ngo build -o releaseo .\n```\n\n### Testing\n\n```bash\ngo test ./...\n```\n\n### Running Locally\n\n```bash\nexport GITHUB_TOKEN=your_token\nexport GITHUB_REPOSITORY=owner/repo\n\n./releaseo \\\n  --bump-type=patch \\\n  --version-file=VERSION \\\n  --version-files='[{\"file\":\"deploy/charts/myapp/Chart.yaml\",\"path\":\"version\"}]'\n```\n\n## Related Issues\n\n- [ToolHive: Better Chart Release Flow](https://github.com/stacklok/toolhive/issues/1779) - The original motivation for this tool\n\n## License\n\nApache License 2.0 - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstacklok%2Freleaseo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstacklok%2Freleaseo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstacklok%2Freleaseo/lists"}