- Clean working directory (no uncommitted changes)
- All tests passing on main:
cargo test - Version number decided (following semver)
git-cliffinstalled:cargo install git-cliff(script can auto-install)
-
Run the release script:
./scripts/release.sh 0.8.0
-
Review the changes:
- Script shows modified files (Cargo.toml, Cargo.lock, CHANGELOG.md)
- Commit created with message:
chore(release): bump version to 0.8.0 - Tag created:
v0.8.0
-
Push to trigger release:
git push origin main && git push origin v0.8.0 -
Verify release:
- Check GitHub Actions for release workflow
- Verify binaries built successfully
- Confirm GitHub Release published
- β Validates version format (X.Y.Z)
- β Checks tag doesn't already exist
- β Verifies working directory is clean
- β Updates Cargo.toml version (
cargo set-version) - β Updates Cargo.lock (
cargo check) - β Regenerates complete CHANGELOG.md (
git cliff) - β Shows diff of changes
- β Commits with conventional message
- β Creates annotated tag
- β Prompts you to push
If you need to undo a release before pushing:
# Delete tag locally
git tag -d v0.8.0
# Undo commit
git reset --hard HEAD~1If you already pushed:
# Delete remote tag
git push origin :v0.8.0
# Revert commit on main
git revert HEAD
git push origin mainIf you skip the script and push a tag directly:
git tag v0.8.0
git push origin v0.8.0Warning: This creates a release but leaves Cargo.toml and CHANGELOG.md out of sync with the tag version.
- Use X.Y.Z format (e.g., 0.8.0, 1.0.0, 2.1.3)
- Don't include 'v' prefix
- Example:
./scripts/release.sh 0.8.0β - Not:
./scripts/release.sh v0.8.0β
- Check existing tags:
git tag --list | tail -10 - Use next version number
- To delete existing tag:
git tag -d v0.8.0
- Commit or stash your changes first
- Ensure clean working directory:
git status
- Install:
cargo install git-cliff - Or let script auto-install (first run takes longer)
- Verify tag pushed:
git ls-remote --tags origin | grep v0.8.0 - Check release.yml exists in
.github/workflows/ - Check Actions tab for errors