Release a new version of BranchBox. Use when the user says "release", "new version", "cut a release", "publish release", or "tag version". Handles version bumping, changelog updates, quality checks, and GitHub release workflow.
This skill guides you through releasing a new version of BranchBox with all necessary checks, documentation updates, and automation.
Before starting, verify:
main branchgit status shows no changes)gh auth status)Run all these checks in parallel:
# Format check
cargo fmt --all -- --check
# Linting (allow up to 5 minutes)
cargo clippy --all-targets --all-features -- -D warnings
# Tests (allow up to 5 minutes)
cargo test --all-features
# Documentation
cargo doc --no-deps --all-features
# Docs site (Docusaurus)
cd docs && npm install --silent && npm run build && cd ..
All checks must pass before proceeding.
Check the CHANGELOG.md [Unreleased] section to determine the appropriate version bump:
| Change Type | Version Bump | Example |
|-------------|--------------|---------|
| Breaking changes | major | 0.6.0 → 1.0.0 |
| New features (backwards compatible) | minor | 0.5.0 → 0.6.0 |
| Bug fixes only | patch | 0.5.1 → 0.5.2 |
Change the [Unreleased] section header to include the new version and today's date:
## [Unreleased]
## [X.Y.Z] - YYYY-MM-DD
Keep an empty ## [Unreleased] section at the top for future changes.
Add a new row to the version history table:
| X.Y.Z | YYYY-MM-DD | Minor/Patch/Major | Brief description of release highlights |
git add CHANGELOG.md RELEASING.md
git commit -m "chore(release): prepare vX.Y.Z
- Update CHANGELOG.md with vX.Y.Z release notes
- Update RELEASING.md version history table
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
Always run a dry-run first to verify everything is correct:
cargo release --workspace <bump-level> --dry-run
Where <bump-level> is minor, major, or patch.
IMPORTANT: Do NOT use cargo release --workspace --execute without specifying the bump level. This will fail with "tag already exists" error.
cargo release --workspace <bump-level> --execute --no-confirm
Key flags:
--workspace: Update all crates in the workspace--execute: Actually perform the release (dry-run is default)--no-confirm: Skip interactive confirmation (NOT -y)This command will:
# List recent workflow runs
gh run list --limit 5
# Watch a specific workflow (get ID from list above)
gh run watch <run-id> --exit-status
# Or check status periodically
gh run view <run-id> --json status,conclusion,jobs | jq '{status, conclusion, jobs: [.jobs[] | {name, status, conclusion}]}'
The release workflow builds binaries for:
Expected duration: ~10-20 minutes.
# View the release
gh release view vX.Y.Z
# Verify all expected artifacts are present
gh release view vX.Y.Z --json assets | jq '.assets[].name'
Expected artifacts:
branchbox-X.Y.Z-x86_64-unknown-linux-gnu.tar.gzbranchbox-X.Y.Z-aarch64-unknown-linux-gnu.tar.gzbranchbox-X.Y.Z-x86_64-apple-darwin.tar.gzbranchbox-X.Y.Z-aarch64-apple-darwin.tar.gzbranchbox-X.Y.Z-x86_64-pc-windows-msvc.zipchecksums.txtbranchbox-local-vm-image-X.Y.Z-x86_64.tar.gzgh run list --workflow "Deploy Site" --limit 1
Wrong:
cargo release --workspace --execute
# Error: tag `vX.Y.Z` already exists
Correct:
cargo release --workspace minor --execute --no-confirm
Wrong:
cargo release --workspace minor --execute -y
# Error: unexpected argument '-y' found
Correct:
cargo release --workspace minor --execute --no-confirm
cargo-release creates its own commit. If you have uncommitted changes to CHANGELOG.md or RELEASING.md, they won't be included in the release.
Always commit documentation updates BEFORE running cargo release.
Clippy and tests can take several minutes. Always use appropriate timeouts:
# Delete the GitHub release (if created)
gh release delete vX.Y.Z --yes
# Delete local tag
git tag -d vX.Y.Z
# Delete remote tag
git push origin :refs/tags/vX.Y.Z
# Fix the issue and retry
# Create patch release
cargo release --workspace patch --execute --no-confirm
# Full release command sequence (after docs are updated and committed):
cargo release --workspace minor --execute --no-confirm
gh run watch # Monitor the release workflow
gh release view vX.Y.Z # Verify the release
Problem: The GitHub release notes include the entire project changelog instead of just the changes for that specific release.
Root Cause: The release workflow uses git-cliff --tag vX.Y.Z which generates the full changelog up to that tag.
Fix: Update .github/workflows/release.yml line 67 to use --latest flag:
# Before (generates full changelog):
git-cliff --tag v${{ steps.version.outputs.version }} > RELEASE_CHANGELOG.md
# After (generates only changes since last tag):
git-cliff --latest > RELEASE_CHANGELOG.md
Workaround: Manually edit the GitHub release notes after publishing:
gh release edit vX.Y.Z --notes-file <(git-cliff --latest)
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer