name: release description: Create a release PR with version bump and changelog update
Create a release PR that bumps the version and updates the changelog. After the PR is merged, a GitHub workflow will automatically tag the release, create a GitHub release, and bump to the next development version.
Arguments
The skill accepts a version level argument:
patch- 5.5.0 -> 5.5.1minor- 5.5.0 -> 5.6.0major- 5.5.0 -> 6.0.0- Or an explicit version like
5.6.0
Example: /release minor
Steps
Verify prerequisites:
- Must be on
mainbranch - Working directory must be clean
- Must be up to date with origin/main
git fetch origin if [ "$(git branch --show-current)" != "main" ]; then echo "Error: Must be on main branch" exit 1 fi if [ -n "$(git status --porcelain)" ]; then echo "Error: Working directory not clean" exit 1 fi if [ "$(git rev-parse HEAD)" != "$(git rev-parse origin/main)" ]; then echo "Error: Not up to date with origin/main" exit 1 fi- Must be on
Run local checks:
cargo clippy --all-targets -- -D warnings cargo testIf checks fail, stop and report the errors.
Determine the new version:
# Get current version from Cargo.toml (strip -alpha.N suffix if present) CURRENT=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') echo "Current version: $CURRENT" # Use cargo-release to calculate new version (handles alpha suffix removal) cargo release version <LEVEL> --dry-run 2>&1 | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1Note: cargo-release will strip the
-alpha.Nsuffix when bumping to a release version.Create release branch:
NEW_VERSION="X.Y.Z" # from step 3 git checkout -b release/v${NEW_VERSION}Bump version using cargo-release:
cargo release version <LEVEL> --execute --no-confirmUpdate CHANGELOG.md:
- Rename "Unreleased" section to new version with today's date
- Create new empty "Unreleased" section at the top
- Update the comparison links at the bottom of the file:
- Add a new
[unreleased]link pointing tocompare/vX.Y.Z...HEAD - Add a new
[X.Y.Z]link comparing to the previous version
- Add a new
The changelog follows Keep a Changelog format. Ask the user if they want to review/edit the changelog before proceeding.
Commit changes:
git add -A git commit -m "release: prepare v${NEW_VERSION}"Push and create PR:
IMPORTANT: The PR title must start with
release: prepare vso thetag-release.ymlworkflow fires after merge. When the PR is squash-merged (the repo default), the squash commit takes the PR title as its message, and the workflow guard checksstartsWith(head_commit.message, 'release: prepare v'). A title likerelease: v${NEW_VERSION}would NOT match and the tag/release would be silently skipped.git push -u origin release/v${NEW_VERSION} gh pr create \ --repo iopsystems/rezolus \ --title "release: prepare v${NEW_VERSION}" \ --body "$(cat <<'EOF' ## Release v${NEW_VERSION} This PR prepares the release of v${NEW_VERSION}. ### Changes - Version bump in Cargo.toml - Changelog update ### After Merge The release workflows will automatically: 1. Create git tag `v${NEW_VERSION}` and bump to next dev version 2. Build and publish packages (deb, rpm, Homebrew) 3. Create GitHub release with all artifacts 4. Publish to crates.io --- See CHANGELOG.md for details. EOF )"Report the PR URL to the user.
After PR Merge
When the PR is merged to main, the following workflow chain runs automatically:
tag-release.yml(triggered by push to main with release commit message):- Detects the version from Cargo.toml
- Creates and pushes the git tag
vX.Y.Z - Bumps to next dev version (e.g.,
5.5.1-alpha.0) and pushes to main
release.yml(triggered by the tag push):- Builds .deb packages for all supported distros and architectures
- Builds .rpm packages for Rocky Linux and Amazon Linux
- Uploads packages to GCP Artifact Registry
- Creates GitHub release with all package artifacts
- Publishes to crates.io (stable releases only)
- Updates Homebrew formula (stable releases only)
Troubleshooting
- cargo-release not installed:
cargo install cargo-release - gh CLI not installed:
brew install ghor see https://cli.github.com/ - Not authenticated with gh:
gh auth login