Versioning
Commit format
Commits follow Conventional Commits:
<type>[(scope)][!]: <subject>
[body]
[BREAKING CHANGE: <note>]A commit is breaking when it has ! after the type/scope or a
BREAKING CHANGE: (or BREAKING-CHANGE:) footer. The footer text becomes the
entry in the notes' breaking changes section; with only !, the subject is
used. Commits that don't match the format are ignored.
Rules
Each commit asks for a bump; the strongest one wins.
| Key | Default |
|---|---|
breaking | major |
feat | minor |
fix | patch |
perf | patch |
revert | patch |
| any other | none |
rules overrides or adds keys with none, patch, minor or major:
with:
rules: breaking=patch,feat=patch,docs=patch,refactor=patchOverrides are merged over the defaults, so fix and perf still bump patch
above. Unknown levels fail the run.
Tags
- Tags are
vX.Y.Z. The previous release is the highest such tag reachable fromHEAD; prereleases (v2.0.0-rc.1) and other tags are ignored. - With
prerelease, releases arevX.Y.Z-<id>.Ntags; see Canaries and release PR. They only number the next prerelease. - No tag yet → the first release is
1.0.0, whatever the bump. - Only commits after that tag count. The release commit is a
chore, so it never triggers another release.
Release notes
Sections appear in this order, only when they have entries:
- ⚠ BREAKING CHANGES
- Features —
feat - Bug Fixes —
fix - Performance Improvements —
perf - Reverts —
revert - Documentation —
docs - Code Refactoring —
refactor
Other types (chore, ci, test…) can trigger a release through rules but
don't appear in the notes. Scopes are shown in bold, and every entry links to
its commit. The heading links to the compare view against the previous tag.
This guide lives in the project repo: edit it there, and this page follows within a day.