2.4 KiB
DevOps Release Workflow
This document describes the deployment and release process for KoalaSync.
Tag-Based Releases
KoalaSync uses a gated release pipeline triggered by immutable Git tags.
Important
DO NOT edit individual version files or tag an unmerged branch. Run
npm run prepare:release -- MAJOR.MINOR.PATCHon a branch, review all generated source changes, and merge them through a pull request with successful CI.
How it Works
When an annotated tag matching exact vMAJOR.MINOR.PATCH is pushed, the GitHub
Actions workflow performs these ordered gates:
- Confirms that the tag is annotated, points exactly at current
origin/main, and matches every committed version source. - Requires successful
verify,node20, ande2echecks for that commit. - Re-runs release verification, cross-browser E2E, and an unpublished relay container smoke test.
- Builds and locally validates Chrome/Firefox archives, checksums, AMO output, website output, archive parity, and manifests.
- Creates an attested draft GitHub Release.
- Publishes the multi-architecture relay image, verifies both platforms, attestation identity, digest, tag source, and a running health check.
- Makes the GitHub Release public only after every preceding gate succeeds.
The release workflow never writes to main and never derives shell code from a
tag. Version changes must pass normal branch protection first.
Steps to Deploy a New Release
To release a new version (e.g., v2.5.1), follow these steps:
- Create a release-preparation branch from current
mainand update every version source atomically:git checkout main git pull origin main git checkout -b release/v2.5.1 npm run prepare:release -- 2.5.1 npm run verify - Commit the release notes and prepared version changes, open a pull request,
and wait for required
verify,node20, ande2echecks. - After the PR is merged, fast-forward local
mainand create an annotated tag on that exact commit:git checkout main git pull --ff-only origin main git tag -a v2.5.1 -m "Release v2.5.1" - Verify the tag target, then push it once:
test "$(git rev-parse v2.5.1^{commit})" = "$(git rev-parse origin/main)" git push origin v2.5.1
Never reuse or move a published tag. Monitor every release job and verify both the public GitHub assets and GHCR digest before calling the release complete.