Releasing¶
This page is for maintainers cutting a release. Spillway uses tag-driven semantic versioning releases.
Versioning scheme¶
- Git tags:
vMAJOR.MINOR.PATCH - Pre-releases:
vMAJOR.MINOR.PATCH-rc.N - Container image tags:
- Always publish the exact chart
appVersiontag (MAJOR.MINOR.PATCH) - Also publish the git-tag-compatible alias (
vMAJOR.MINOR.PATCH) for backward compatibility - Stable releases also publish
MAJOR.MINOR,MAJOR, andlatest
- Always publish the exact chart
- Helm chart:
charts/spillway/Chart.yamlversion=MAJOR.MINOR.PATCHcharts/spillway/Chart.yamlappVersion=MAJOR.MINOR.PATCH
Release process¶
- Update code/docs/chart. If
api/changed, runmake manifestsand commit the generated files. - Make sure
CHANGELOG.mdhas an entry under## [Unreleased]for every user-facing change. The Changelog page on this site is rendered from that file. - Run
make bump VERSION=X.Y.Z(withoutv). This is the only supported way to change the version: it stampscharts/spillway/Chart.yaml(version,appVersion),config/default/kustomization.yaml(newTag),README.md, anddocs/install.md, rolls[Unreleased]inCHANGELOG.mdinto a dated[X.Y.Z]section, then verifies they all agree. CI runsmake check-versionon every push.docs/install.mdis the only docs page that carries the version literal; keep it that way. - Commit changes.
- Create a signed tag:
git tag -s vX.Y.Z -m "Release vX.Y.Z". - Push branch and tag.
- GitHub Actions publishes:
- GitHub release artifacts (Linux binaries + checksums)
- Container image to
ghcr.io/kroy-the-rabbit/spillway - Helm OCI chart to
ghcr.io/kroy-the-rabbit/charts/spillway
Validation¶
- CI runs
gofmtcheck, envtest integration tests (real API server viasetup-envtest; the job fails if they are skipped),go test ./...,go test -race ./...,go vet ./..., binary build smoke,helm lint, Helm template smoke render, and Helm install dry-run. - CI also runs a kind end-to-end job: upgrade from the previous released OCI chart to the local chart (
hack/e2e-upgrade.sh), then a fresh install exercised byhack/e2e.sh(annotation and profile replication, updates, replica recreation, cleanup), then uninstall. Both scripts run locally against any kubeconfig. - CI also runs
golangci-lint(errcheck, staticcheck, gocritic, misspell, ineffassign, unused) and asecurityjob withgovulncheck+ Trivy filesystem scan (blocks on CRITICAL/HIGH CVEs). - Release workflow verifies the git tag matches chart
versionandappVersion.
Documentation site¶
The site at https://spillway.kroy.io is built with Material for MkDocs from docs/ and mkdocs.yml by .github/workflows/deploy-pages.yaml on every push to main. Build it locally with: