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.
Version numbering
Section titled “Version numbering”- Choose next version per SemVer (compatibility architecture).
- Create an annotated git tag for the release, for example
v1.1.0. - 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).
Pre-release checks
Section titled “Pre-release checks”From repository root at release commit:
make proto test test-race vet buildAdditional checks when HA or integration touched:
go test ./pkg/server/ -run 'Replication|HA|Cluster|Partition' -count=1Optional (recommended before minor/major):
make bench-smokeCHRONACTA_SYNC_WRITES=true make benchAll commands must exit 0.
Release checklist
Section titled “Release checklist”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 requiredBuilding release artifacts
Section titled “Building release artifacts”Automated (recommended)
Section titled “Automated (recommended)”make release VERSION=v1.0.0Produces dist/v1.0.0/:
chronacta-server,chronacta,chronacta-cli,chronacta-adminsbom.json(CycloneDX)SHA256SUMS(+ optionalSHA256SUMS.ascif GPG key available)RELEASE.txt
Validate packaging without full release build:
make release-validateManual
Section titled “Manual”git checkout vX.Y.Zmake buildArtifacts in bin/:
chronacta-serverchronacta(CLI)chronacta-adminchronacta-cli- Example binaries (optional for distribution)
Record in release notes:
- Go version from
go.mod - Whether auth/TLS/cluster require config flags
CHANGELOG format
Section titled “CHANGELOG format”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### SecurityBreaking changes MUST appear under Changed or Removed with Breaking: prefix.
Branch and tag policy (recommended)
Section titled “Branch and tag policy (recommended)”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+1patch tag.
Post-release
Section titled “Post-release”- Announce supported upgrade path (upgrade-guide.md).
- If HA release: link HA rolling upgrade.
- Update docs/README.md current surface if API changed.
Deprecation process
Section titled “Deprecation process”- Mark feature deprecated in release notes (minor N).
- Document the replacement and removal timeline in the release notes.
- Log runtime warning if applicable (optional).
- Remove only after documented window.
What blocks a release
Section titled “What blocks a release”- Failing pre-release checks
- Undocumented breaking disk change
- Silent proto semantic change
- Known data-loss bug without mitigation note

