Context: this is part of Contribute. Start with the primer if you haven't.
Releases produce three artefacts in lockstep:
- Tagged GitHub Release with platform binaries.
- Multi-arch Docker images at
authplane/authserver:<tag>. - A Helm chart bump under
charts/authplane/.
The CI step is driven by goreleaser and
triggered by a v* git tag. Everything else is manual prep.
develop— integration branch; all PRs land here.main— release branch; fast-forwarded fromdevelopat release time.- Feature branches:
<author>/<short-name>offdevelop.
No long-lived release branches; the tag is the release.
Use semver. authserver is pre-1.0 today (see
charts/authplane/Chart.yaml
appVersion) so the convention is:
- Breaking wire / DTO / config change → bump minor.
- Bug fix / additive change → bump patch.
Releases up to 1.0 do not promise wire stability across minor bumps. After 1.0, only major bumps may break wire compat.
Move entries out of ## [Unreleased] into a new ## [vX.Y.Z] — YYYY-MM-DD
section. The format follows Keep a Changelog;
keep entries operator-facing — wire changes, config additions,
behavioural shifts — not internal refactors.
Categories used: Added, Changed, Fixed, Deprecated, Removed,
Security. The existing entries under
CHANGELOG.md are the style reference.
goreleaser also generates a release-notes block from commit messages
(see the changelog section of
.goreleaser.yml); the hand-written changelog
is the authoritative one — the auto-generated one is supplemental.
In charts/authplane/Chart.yaml:
appVersion— the authserver image tag the chart pulls ("X.Y.Z"). Bumps every authserver release. Theartifacthub.io/imagesannotation hardcodes the same tag for ArtifactHub's scanner (Helm can't template it fromappVersion) — bump both in lockstep, or the chart page drifts.version— the chart's own version (X.Y.Z). Bump patch for image-only changes; bump minor when chart values / templates change.
The two version numbers move independently. A chart-only change (new values key, template fix) ships as a chart-version bump without an authserver release.
make ci-local
make test-integration
make test-integration-postgres
make test-e2e
make docs-checkIf anything is red, fix it before tagging — there's no clean way to unship a tag once it has triggered goreleaser.
git checkout main
git pull origin main
git merge --ff-only develop
git push origin main
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin vX.Y.ZThe v prefix is required by goreleaser.
The release workflow consumes the tag and runs goreleaser. Per
.goreleaser.yml:
- Pre-flight:
go mod tidy+make check-imports(thebeforehooks). - Cross-compiles
authserverforlinux/{amd64,arm64}anddarwin/{amd64,arm64}fromcmd/authserver—CGO_ENABLED=0, ldflags injectingversion,commit,date. - Packages tarballs under
authserver_<version>_<os>_<arch>.tar.gzbundled withLICENSE,README.md,CHANGELOG.md. - Builds two single-arch Docker images via
build/Dockerfile.goreleaserand pushes them toauthplane/authserver:<version>-{amd64,arm64}. - Stitches the manifest at
authplane/authserver:<version>(and:lateston stable tags). - Drafts the GitHub Release with the generated changelog + checksum file.
Sibling SDK repos (../go-sdk, ../ts-sdk, ../python-sdk) and
in-repo examples under
examples/{go,typescript,python}/ pin specific SDK
versions. After a release that changes the wire shape:
- Cut matching SDK releases from the sibling repos.
- Bump the SDK version pin in every example's
go.mod/package.json/pyproject.tomlto match. - Run
make docs-smoketo confirm every example still passes against the new binary + new SDK pin.
# Helm chart pulls the right image:
helm show values charts/authplane | grep -E '^\s*tag:'
docker pull authplane/authserver:vX.Y.Z
docker run --rm authplane/authserver:vX.Y.Z version
# Binary tarball boots:
curl -sL https://github.com/authplane/authserver/releases/download/vX.Y.Z/authserver_X.Y.Z_linux_amd64.tar.gz | tar -xz
./authserver versionIf any of those fail, open a hot-fix PR and cut vX.Y.(Z+1) —
do not retag.
For a critical fix off an already-released tag:
- Branch from the release tag:
git checkout -b hotfix/<issue> vX.Y.Z. - Cherry-pick or write the fix; add a
Fixedentry under a new## [vX.Y.(Z+1)] — YYYY-MM-DDheading inCHANGELOG.md. - Bump
charts/authplane/Chart.yaml(bothappVersionandversionpatch). - Run the gate.
- Merge into
main, tagvX.Y.(Z+1), push. - Back-merge into
develop.