Release Process
How telectl versions and ships releases.
Version scheme
telectl follows Semantic Versioning 2.0 with Kubernetes-style pre-release stages:
v<major>.<minor>.<patch>-<stage>.<n>
The ladder: alpha.N → beta.N → rc.N → stable (no suffix).
flowchart LR
A[alpha.1] --> B[alpha.2] --> C[beta.0] --> D[rc.0] --> E[v1.0.0]
Tags are immutable. A broken release is never deleted and re-tagged with
the same number — it gets the next number. History is history; v0.1.0-alpha.1
stays in the release list even after v0.1.0-alpha.2 and v0.1.0-beta.0
ship. See Versioning & Releases for the full
rationale.
What a release contains
- GitHub Release with binaries for 5 platforms (linux/macos/windows × amd64/arm64), each with SHA256 checksums.
- GHCR image
ghcr.io/ksauraj/telectl:<tag>— multi-arch (amd64 + arm64), compiled perTARGETARCHin the Dockerfile. - CHANGELOG.md entry under a new version header.
How a release is cut
- Update CHANGELOG.md — add
## [vX.Y.Z-stage.n] - <date>with Added/Changed/Fixed sections describing the release. - Commit the changelog (
docs:conventional commit). - Tag the commit and push the tag:
git tag v0.1.0-beta.0 git push origin v0.1.0-beta.0Pushing a tag triggers the CI release pipeline.
- CI builds and publishes — the workflow:
- runs the full test/lint/build suite,
- builds the multi-platform Docker image and pushes to GHCR,
- builds release binaries for all platforms,
- creates the GitHub Release via
softprops/action-gh-releasewith checksums attached.
- Verify — the release page shows binaries + checksums; the GHCR package shows the new tag; both platforms’ images are real binaries (the arm64 image contains an arm64 binary).
Promoting stages
- Fixes to an existing pre-release → bump the number (
alpha.2→alpha.3) or promote if the project is stable enough (beta.0). - The decision to promote (alpha → beta → rc → stable) is a maintainer call, recorded in the CHANGELOG.
- Docs and wiki updates ride along in the same commit as the changelog so the release is self-consistent.
Branch policy
- Development happens on feature branches; merges land on
mainvia--no-ffmerge commits. - Tags are cut from
mainonly. - See Branch Protection in the repo for the protection rules.
After release
- Announce the release (the GitHub Release notes double as the changelog).
- Update the Helm chart version to match when the chart itself changes
(
charts/telectl/Chart.yamlversion), and re-publish the chart repo on GitHub Pages if so.