Warning
This project is archived and no longer maintained.
Release automation has moved to
Google Release Please.
Reusable Telegram pull request and issue notification workflows have moved to
rubykatzen/baseline:
notify-telegram-pr-shared.yml and notify-telegram-issue-shared.yml.
Existing consumers should migrate away from Releaser workflows and actions.
releaser is an opinionated zero-config release orchestrator for GitHub repositories.
It verifies that origin/main is releasable (new commits, CI green or recoverable),
dispatches protecting workflows when needed, runs prepare-release.yml, opens a
release/vX.Y.Z PR, merges it, and waits until publish-release.yml creates the
annotated tag and GitHub Release.
Check release readiness:
releaser status
releaser status --verbose # includes per-check CI detailsCut a full release (version calculated automatically; waits until published):
releaser patch
releaser minor
releaser majorOpen a release PR and stop (merge manually later):
releaser patch --pr-onlyCut a release with an explicit version:
releaser cut 1.2.3Dry-run without triggering anything:
releaser patch --dry-runCheck local tooling:
releaser doctorMachine-readable output:
releaser status --json
releaser patch --dry-run --json- Fetches
origin/mainand finds the latest SemVer tag. - Checks that there are new commits since that tag and lists them in
status. - Queries GitHub branch protection to find required CI checks.
- If required checks are missing on the
origin/mainSHA, dispatches{check}.ymlworkflows (zero-config convention) and waits until they pass. - Dispatches
prepare-release.ymlwith the computedversionandbase_sha. - Watches the workflow run; aborts if it fails.
- Opens a PR from
release/vX.Y.Z→main. - Unless
--pr-only: merges the PR (auto-merge when the repo allows it, otherwise waits for PR checks and merges directly), watchespublish-release.yml, and verifies the tag and GitHub Release exist.
- Run from inside the target git repository.
- Release source is
origin/main, not localHEAD. - Local dirty worktrees do not block releases.
- Release tags use
vMAJOR.MINOR.PATCHand are annotated. - GitHub Actions must have successful check runs for the
origin/mainSHA (protecting workflows must exposeworkflow_dispatchand use job names matching branch-protection contexts, e.g. checklint→lint.yml). - The repository must provide
prepare-release.yml(triggered by workflow dispatch) andpublish-release.yml(triggered by mergedrelease/*PRs). - GitHub Releases are created by
publish-release.yml, not by the CLI.
releaser ships composite actions that can be used in any repo's publish-release.yml to publish packages to the relevant target.
Updates all formulas in the checked-out tap to the latest upstream release.
- uses: rubykatzen/releaser/.github/actions/update-homebrew-formulas@vX.Y.Z
with:
token: ${{ secrets.GITHUB_TOKEN }} # optional, defaults to github.tokenBuilds and pushes a Ruby gem. Auto-detects the .gemspec in the repo root.
- uses: rubykatzen/releaser/.github/actions/publish-rubygems@vX.Y.Z
with:
api-key: ${{ secrets.RUBYGEMS_API_KEY }}
# ruby-version: "3.2" # optional, default: 3.2
# gemspec: path/to/my.gemspec # optional, auto-detectedBuilds a Python distribution (python -m build) and uploads it to PyPI using an API token.
- uses: rubykatzen/releaser/.github/actions/publish-pypi@vX.Y.Z
with:
pypi-token: ${{ secrets.PYPI_TOKEN }}
# python-version: "3.12" # optional, default: 3.12releaser releases itself. Run from inside this repository:
releaser patch # or: releaser minor / releaser majorCheck readiness without triggering anything:
releaser status
releaser patch --dry-runprepare-release.yml fires on dispatch, creates the release/vX.Y.Z branch,
generates AI release notes, bumps pyproject.toml, and pushes the branch.
By default the CLI then merges the PR and waits for publish-release.yml.
Use --pr-only to stop after opening the PR.
brew tap rubykatzen/tap
brew trust rubykatzen/tap
brew install releaserUpgrade with:
brew update && brew upgrade releasergit- GitHub CLI (
gh) installed and authenticated - A GitHub repository with
origin/main prepare-release.ymlworkflow (workflow dispatch, fields:version,base_sha)publish-release.ymlworkflow (triggers on mergedrelease/*PRs)
| Code | Meaning |
|---|---|
0 |
Success |
1 |
Release is not allowed |
2 |
Usage error |
3 |
Environment error |
4 |
External command failed |