- Standard:
v{MAJOR}.{MINOR}.{PATCH}(e.g., v0.1.0, v1.0.0) - Pre-release:
v{MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}(e.g., v0.1.0-alpha.1, v0.1.0-beta.2)
- MAJOR: Breaking API changes, major CLI command restructuring
- MINOR: New features, new commands, backward-compatible changes
- PATCH: Bug fixes, documentation updates, minor improvements
- Breaking Changes: Allowed in any release without deprecation notices
- API Stability: No backwards compatibility guarantees
- CLI Interface: Commands, flags, and output formats may change
- Configuration: Profile and config structure may evolve
- Semantic Versioning: Strict adherence to SemVer after v1.0.0
- Deprecation Cycle: Minimum 1 major version warning period
- Breaking Changes: Only in major version releases
- Migration Guides: Provided for all breaking changes
- Only one entrypoint:
make release <type> VERSIONin the repo reflects the next tag to be created for prereleases; release commands tag the current version then bump for ongoing development when appropriate.
make release <type>: Dry-run; prints the exact steps without changing files.make release-do <type>: Executes the printed steps.
Types:
-
alpha:- Tags the current
VERSIONif it’s-alpha.N; otherwise starts at-alpha.0and tags it. - Always bumps
VERSIONto the next-alpha.N+1after tagging.
- Tags the current
-
beta:- Same as
alpha, but for beta.
- Same as
-
stable:- Makes a formal release for the base version (drops prerelease): tags
vX.Y.Z. - Bumps
VERSIONto the next patch prerelease:vX.Y.(Z+1)-alpha.0.
- Makes a formal release for the base version (drops prerelease): tags
-
bump {minor|major}:- Updates
VERSIONto start a new development cycle:vX.(Y+1).0-alpha.0orv(X+1).0.0-alpha.0. - Commits the change (no tag created).
- Updates
Notes:
- Pre-1.0 (
v0.x) may contain breaking changes. - Prerelease tags (
-alpha.N,-beta.N) are GitHub prereleases. Stable tags (no suffix) are normal releases.
Push the tag created locally:
git push origin vX.Y.Z[-pre.N]
The CI workflow runs GoReleaser to build and attach artifacts. Prerelease vs stable is detected from the tag.
- First alpha on a new line (dry-run then execute):
echo v0.1.0-alpha.0 > VERSION && git commit -am 'chore: start v0.1.0-alpha.0'make release alpha(preview)make release-do alpha→ tagsv0.1.0-alpha.0, bumps to-alpha.1.
- Move to a new minor line for development:
make release bump minor→ setsVERSIONtov0.2.0-alpha.0.
If a wrong tag was created:
git push --delete origin vWRONG || true
git tag -d vWRONG || true
Then correct locally and re‑push.
Last Updated: 2026-01-18