Skip to content

Release workflow

Cut a new stax release with an auto-generated changelog entry.

make release                  # defaults to a minor bump
make release LEVEL=patch      # patch bump
make release LEVEL=major      # major bump

During cargo release's pre-release hook, git-cliff regenerates the whole CHANGELOG.md from the git history, treating the commits since the latest v<major>.<minor>.<patch> tag as the version being released. Configuration lives in cliff.toml.

What gets generated

git-cliff groups commits by their conventional-commit type:

Commit prefix Section
feat: πŸš€ Features
fix: πŸ› Bug Fixes
refactor: 🚜 Refactor
perf: ⚑ Performance
docs: πŸ“š Documentation
style: 🎨 Styling
test: πŸ§ͺ Testing
chore: / ci: βš™οΈ Miscellaneous Tasks
revert: ◀️ Revert
anything else πŸ’Ό Other

PR references like (#123) become links to the GitHub repo. The automated chore: Release stax version … commits and chore(deps…) bumps are skipped. Non-conventional squash-merge subjects are kept (in πŸ’Ό Other) rather than dropped, so no change silently disappears.

Notes

  • make release defaults to a minor bump. Use LEVEL=patch, LEVEL=minor, or LEVEL=major to control the semver bump.
  • For a dry run, invoke cargo release <level> --no-confirm directly without --execute; cargo-release skips the version bump, tag, and push. git-cliff still rewrites CHANGELOG.md in place β€” run git checkout CHANGELOG.md to discard it.
  • Preview the upcoming entry without touching the file: git-cliff --unreleased --tag v<next-version>.
  • make release installs cargo-release and git-cliff via cargo install automatically if they're missing, so there's no manual prerequisite step.