Releases
agents-cli follows Semantic Versioning 2.0.0 and Conventional Commits 1.0.0. The full process is documented in RELEASING.md in the repo; this page summarises the rules.
Versioning
A version is MAJOR.MINOR.PATCH:
| Bump | When |
|---|---|
MAJOR | Backwards-incompatible change to the CLI surface, on-disk layout, audit-log schema, or installer contract. |
MINOR | New feature, fully backwards compatible. |
PATCH | Bug fix, internal refactor, doc/CI change. No behaviour change for users. |
The version is enforced by a CI guard against the scripts/commit-lint.sh output: a feat!: or BREAKING CHANGE footer requires a major bump; a feat: requires at least a minor bump.
Commits
All commits on main use Conventional Commits:
<type>(<scope>): <imperative summary>
<body explaining why>
<trailers>| Type | Use for |
|---|---|
feat | New feature for users. |
fix | Bug fix. |
docs | Documentation only. |
refactor | Code change without behaviour change. |
test | Adding or updating tests. |
chore | Maintenance, deps, config. |
perf | Performance improvement. |
ci | CI/CD config. |
Breaking changes use ! after the type (feat!:) and an explicit BREAKING CHANGE: footer with the migration steps.
Changelog
Every release adds a section to CHANGELOG.md following Keep a Changelog 1.1.0. The next release’s section lives under ## [Unreleased] until the bump.
Process
-
Open an MR with the change. Title and commits follow Conventional Commits.
-
Update
CHANGELOG.mdunder## [Unreleased]with a one-line entry per change. Reference the issue or MR number. -
Get CI green. Get an approval.
-
Merge to
main. -
When ready to release, run the bump helper:
Terminal window scripts/release.sh vX.Y.ZThe helper:
- Verifies you’re on
mainwith a clean working tree. - Verifies the bump matches the changes since the last tag (
feat!→ major required,feat→ minor required, otherwise patch is fine). - Renames the
Unreleasedsection to[X.Y.Z] - YYYY-MM-DD. - Commits and tags
vX.Y.Z. - Prints the next steps (push tag, watch pipeline).
- Verifies you’re on
-
Push the tag. The CI pipeline picks it up and runs
release → publish:release— GoReleaser builds for Linux/macOS × amd64/arm64, generateschecksums.txt, publishes the GitLab Release.publish:r2— Mirrors the binary archives +install.sh+latest.txttochagbrasil-installers(R2). See ADR-005.publish:site— Builds this site and uploads it tochagbrasil-acli-site(R2) underdocs/vX.Y.Z/. Syncsdocs/latest/. Updatesdocs/latest.txt. See ADR-006.verify:install-url+verify:acli-site— Smoke checks (allow_failure: true).
-
Once the pipeline is green, the Releases page shows the new version,
acli.chagbrasil.com/install/serves it, and this site is reachable at/docs/vX.Y.Z/.
Artefacts
| Surface | URL |
|---|---|
| Release notes (canonical) | GitLab Releases |
| Installer + binaries | https://acli.chagbrasil.com/install/... |
| This site (current) | https://acli.chagbrasil.com/docs/latest/ |
| This site (per version) | https://acli.chagbrasil.com/docs/vX.Y.Z/ |
| Changelog | CHANGELOG.md |
Pre-release versions
Pre-releases use SemVer pre-release suffixes (v2.1.0-rc.1). The CI pipeline tag matcher is ^v\d+\.\d+\.\d+$ — pre-releases do not trigger release or publish. To publish a pre-release, push a final tag (v2.1.0-rc.1 → v2.1.0).