Use this skill to finalize a release. It stamps the [Unreleased] changelog section with a version and date, runs bumpversion to update all version files, and creates the release commit and tag. Only run this when you're ready to ship.
68
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Finalize the changelog draft, bump the version across all tracked files, and create a tagged release commit. After this skill runs, the repo has a clean release commit and tag ready to push.
gh CLI installed and authenticated (gh auth status).bumpversion installed (pip install bumpversion or available in the project venv).[Unreleased] section of CHANGELOG.md should already contain the release narrative. If it's empty or stale, run the draft-release-notes skill first.Verify the working tree is clean (except CHANGELOG.md which may have the draft).
git status --porcelainOnly CHANGELOG.md (and optionally .agents/ files) should be modified. If there are other uncommitted changes, stop and ask the user to commit or stash them first.
Determine the bump level.
Ask the user if not specified: patch, minor, or major. Check the current version:
grep '^current_version' .bumpversion.cfgStamp the changelog.
Read the current [Unreleased] content from CHANGELOG.md. Compute the new version (based on bump level and current version). Then:
a. Replace the ## [Unreleased] section body with an empty placeholder.
b. Insert a new stamped section immediately after ## [Unreleased]:
## [Unreleased]
## [X.Y.Z] - YYYY-MM-DD
<the content that was in [Unreleased]>c. Update the reference links at the bottom of the file:
[Unreleased] link to compare against the new tag[Unreleased]: https://github.com/jamiepine/voicebox/compare/vX.Y.Z...HEAD
[X.Y.Z]: https://github.com/jamiepine/voicebox/compare/vPREVIOUS...vX.Y.ZStage the changelog.
git add CHANGELOG.mdRun bumpversion.
bumpversion --allow-dirty <patch|minor|major>The --allow-dirty flag is needed because CHANGELOG.md is already staged. bumpversion will:
.bumpversion.cfg)Bump version: X.Y.Z -> A.B.CvA.B.CThe staged CHANGELOG.md will be included in this commit automatically.
Verify results.
git show --name-only --stat HEAD
git tag --list "v*" --sort=-v:refname | head -n 5Confirm the commit contains:
CHANGELOG.md.bumpversion.cfgtauri/src-tauri/tauri.conf.jsontauri/src-tauri/Cargo.tomlpackage.jsonapp/package.jsontauri/package.jsonlanding/package.jsonweb/package.jsonbackend/__init__.pyConfirm the new tag exists.
Do NOT push unless the user explicitly asks. Report the tag name and suggest:
Ready to push. When you're ready:
git push origin main --follow-tagsGiven current version X.Y.Z:
patch -> X.Y.(Z+1)minor -> X.(Y+1).0major -> (X+1).0.0git tag -d vX.Y.Z && git reset --soft HEAD~1.github/workflows/release.yml) automatically extracts the matching version section from CHANGELOG.md and uses it as the GitHub Release body. No manual copy-paste needed..bumpversion.cfg (Bump version: X.Y.Z -> A.B.C). Do not override it.gh release edit vX.Y.Z --notes-file <(sed -n '/## \[X.Y.Z\]/,/## \[/p' CHANGELOG.md | head -n -1)51f49de
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.