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, the workflow rebuilds the upcoming release entry in CHANGELOG.md from commits since the latest v<major>.<minor>.<patch> tag, refreshes the compare links, and leaves a fresh empty Unreleased header at the top.

What gets generated

Commit prefix Section
feat: (and related) ### Added
fix: ### Fixed
docs: ### Documentation
anything else ### Changed

The generator strips the conventional-commit prefix, keeps PR references like (#123), and overwrites any stale manual Unreleased body before cargo release commits the version bump — the release target stays deterministic.

Failure mode

If no non-merge commits exist since the last version tag, release prep fails with No commits found since last tag and the release stops before cargo release would create an empty version entry.

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; the hook sees DRY_RUN=true and leaves CHANGELOG.md untouched.