Skip to content

Release process

Reproducible steps to cut an Chronacta release. Assumes compatibility policy and compatibility architecture.

Role Responsibility
Release owner Tag, notes, release checklist
Reviewer Confirms breaking-change checklist

For solo development, same person performs both with explicit checklist.

  1. Choose next version per SemVer (compatibility architecture).
  2. Create an annotated git tag for the release, for example v1.1.0.
  3. Release notes reference tag; binaries built from that commit.

Build-time version strings come from const Version in internal/version/version.go; Makefile only injects commit and build time (see versioning.md).

From repository root at release commit:

Terminal window
make proto test test-race vet build

Additional checks when HA or integration touched:

Terminal window
go test ./pkg/server/ -run 'Replication|HA|Cluster|Partition' -count=1

Optional (recommended before minor/major):

Terminal window
make bench-smoke
CHRONACTA_SYNC_WRITES=true make bench

See performance methodology.

All commands must exit 0.

Copy for each release:

## Release vX.Y.Z
- [ ] CHANGELOG entry (Added / Changed / Fixed / Deprecated / Breaking)
- [ ] Compatibility classified: wire / disk / none
- [ ] If disk format bumped: migration doc + test referenced
- [ ] If the protobuf contract changes incompatibly: document the new API version and compatibility window
- [ ] `make proto test test-race vet build` green
- [ ] Tag `vX.Y.Z` created
- [ ] Binaries built from tag (see below)
- [ ] Release notes published (GitHub release or internal note)
- [ ] Upgrade guide section added if operator action required
Terminal window
make release VERSION=v1.0.0

Produces dist/v1.0.0/:

  • chronacta-server, chronacta, chronacta-cli, chronacta-admin
  • sbom.json (CycloneDX)
  • SHA256SUMS (+ optional SHA256SUMS.asc if GPG key available)
  • RELEASE.txt

Validate packaging without full release build:

Terminal window
make release-validate
Terminal window
git checkout vX.Y.Z
make build

Artifacts in bin/:

  • chronacta-server
  • chronacta (CLI)
  • chronacta-admin
  • chronacta-cli
  • Example binaries (optional for distribution)

Record in release notes:

  • Go version from go.mod
  • Whether auth/TLS/cluster require config flags

File: CHANGELOG.md (create on first stable release if absent).

Sections per Keep a Changelog:

## [X.Y.Z] - YYYY-MM-DD
### Added
### Changed
### Fixed
### Deprecated
### Removed
### Security

Breaking changes MUST appear under Changed or Removed with Breaking: prefix.

  • main — integration; release checks must pass before tagging.
  • Release tags on commits that passed the pre-release checks.
  • Hotfix: branch from tag → fix → vX.Y.Z+1 patch tag.
  1. Announce supported upgrade path (upgrade-guide.md).
  2. If HA release: link HA rolling upgrade.
  3. Update docs/README.md current surface if API changed.
  1. Mark feature deprecated in release notes (minor N).
  2. Document the replacement and removal timeline in the release notes.
  3. Log runtime warning if applicable (optional).
  4. Remove only after documented window.
  • Failing pre-release checks
  • Undocumented breaking disk change
  • Silent proto semantic change
  • Known data-loss bug without mitigation note