Versioning
Version formats
Section titled “Version formats”| Build type | Version format |
|---|---|
| Tagged release | Semantic version tag, e.g. v0.4.2 |
| Local dev build | devel |
| Local task build | git describe --long output |
go install | Go module build info |
Run bmo --version to see the version in your installed binary.
Where version comes from
Section titled “Where version comes from”- Runtime variable:
internal/version/version.go - Task builds:
Taskfile.yamlinjects the version via-ldflagsat build time VERSION=git describe --long(requires tags)
Release process
Section titled “Release process”Releases are tag-driven, but the tag must point at an exact validated commit. Use the built-in validation step first:
task release:validateThat reruns the public release gates on the current main commit and prints the
validated SHA. Use task release:next to suggest the next tag, then tag the
validated SHA directly with a notes file:
task release:nexttask release:tag TAG=vX.Y.Z SHA=<validated-sha> NOTES_FILE=/path/to/release-notes.mdThis flow:
- Requires branch =
main, clean worktree, and passingbmo-go.ymlon the explicit SHA - Creates a signed annotated git tag on that exact validated commit
- Pushes the tag without creating an empty release-marker commit
- Triggers
.github/workflows/bmo-release.yml - Publishes the GitHub release only after the tagged commit’s source bundle and evidence artifacts pass verification
Release candidates must also publish the validated source bundle and evidence artifacts on the tagged GitHub release.
Verifying a local build
Section titled “Verifying a local build”task build./bmo --version- Version bump strategy is determined by
svu; always review the proposed next version before confirming. - If a stricter commit/tag convention is desired, document it separately and keep aligned with
svu.