Release Process
Versioning
Semantic versioning; changes recorded in CHANGELOG.md (Keep a Changelog format).
Release checklist
Nothing here is enforced by a machine on push. GitHub Actions does not execute for this
project (Build and deployment), so this checklist is a human procedure
plus two automated gates: scripts/verify.sh on a developer's machine, and the per-image
checks Coolify runs at build time.
scripts/verify.shclean — this is the bulk of the list, and it coversgofmt,go vet,go build ./... ./cmd/...,go test -race ./..., AsyncAPI contract drift, the cryptographic inventory, OpenAPI generated-client drift,lint + typecheck + testfor the eight portals andapps/mobile, the dependency exception/VEX policy, and SBOM generation.scripts/verify.sh --with-dbwithDATABASE_URLset, so the integration suite actually runs against real PostgreSQL + PostGIS. Without the flag it is skipped, and the script says so.- Migrations apply forward on a fresh database, and every new migration has a companion
.down.sql—migrate downfails before rolling anything back if one is missing. - Docs site builds (
cd apps/docs && pnpm build). This is also the broken-internal-link check:onBrokenLinks: "throw"indocusaurus.config.tsfails the build on one, and the same build runs inapps/docs/Dockerfile, so a broken link stops that image. - OpenAPI documents current for anything the release changes.
- Queue the deployment by hand in Coolify — pushing to
maindeploys nothing. Confirm the one-shotmigrateservice completed; the long-running services depend on it. - Post-deploy: verify
/readyz, watch error rate and p95, confirm the outbox drains.
No vulnerability scan gates a release. govulncheck, trivy, semgrep, gitleaks and
go-licenses are configured as workflow steps and have never run against a change. Treat
their absence as a known gap rather than as a passed check.
Rollback
api migrate down [n] exists and has never been run against production. Coolify's redeploy-a-
previous-deployment is a vendor claim that has not been exercised on this instance. Prefer
forward fixes, and treat rollback as untested until somebody tests it — see
docs/architecture/DEPLOYMENT.md §7.