| name | release |
| description | Cut and publish a release. Does CHANGELOG prep, version bumps, PR creation, CI, tagging, and publishing. |
Release
Overview
- Analyze CHANGELOG and git history to prepare release
- Suggest missing CHANGELOG entries from git log
- Determine version bump type (major/minor/patch)
- Run
scripts/release.py with the determined bump type
Step 0: Check out main
git checkout main && git pull
Step 1: Ensure CHANGELOG Has ## next Section
If no ## next section exists, create one at the top of the changelog (after the header):
## next
- [entries go here]
Step 2: Analyze CHANGELOG for Missing Entries
Before releasing, review git history for commits since the last release that aren't in CHANGELOG.
git log $(git describe --tags --abbrev=0)..HEAD --oneline
For each important change not already mentioned in CHANGELOG under ## next:
- Summarize the change in user-facing terms
- Ask the user: "Add to CHANGELOG: [summary]? (y/n)"
- If confirmed, add the entry under
## next in CHANGELOG.md
Step 3: Determine Version Bump Type
Analyze the ## next section of CHANGELOG.md to determine the appropriate bump:
MAJOR (breaking changes):
- "BREAKING" keyword in any entry
- Removed features or APIs
- Changed behavior that breaks existing usage
MINOR (new features):
- "Add" keyword starting an entry
- New commands, flags, or configuration options
- New capabilities that don't break existing usage
PATCH (bug fixes):
- "Fix" keyword starting an entry
- Performance improvements
- Documentation updates
- Internal refactoring without user-facing changes
Apply the highest applicable bump type. Present the suggestion to the user:
"Based on CHANGELOG entries, suggesting [type] bump. Proceed? (y/n/major/minor/patch)"
Step 5: Run the Release Script
Execute the release script with the determined bump type:
python3 .claude/skills/release/scripts/release.py [major|minor|patch]
The script handles:
- Checkout main, pull, create
release branch
- Update version in Cargo.toml
- Update CHANGELOG.md (replace
## next with version header and link)
- Run
cargo clippy -- --all-targets --deny warnings and cargo test
- Commit changes with message
vX.Y.Z
- Create PR with title
vX.Y.Z
- Open PR in browser
- Wait for user to press ENTER
- Wait for all CI checks to pass
- Merge PR
- Checkout main, pull
- Create and push annotated tag
vX.Y.Z
- Wait for tag CI to complete
- Publish draft GitHub release
Example Session
User: cut a release
Claude:
1. Checks git log for interesting commits
2. "Add to CHANGELOG: Add support for YAML configs? (y/n)"
3. User: "y"
4. Claude adds entry to CHANGELOG
5. "Based on CHANGELOG (new 'Add' entry), suggesting minor bump. Proceed?"
6. User: "y"
7. Claude runs: python3 .claude/skills/release/scripts/release.py minor