Deploy#

Push to main. Once CI passes, Cabotage (the guild’s deploy platform, built on Kubernetes) builds the Docker image, runs the database migrations, then starts the new version. The whole deploy takes about 13 minutes.

Two things to know:

  • Only app changes deploy. A push deploys only if its newest commit changes an app file. A commit that touches only .github/ or docs deploys nothing, even if an earlier, undeployed commit underneath it changed app code.

  • Old and new code run together. For about a minute, the previous version keeps serving traffic while the new one starts, and the migration runs first. See How it works for what that means for a migration.

Settings#

Settings are passed as environment variables, grouped by prefix: API_ for the API itself, DB_ for the database, and WEB_ for the site and sign-in. The repo’s .env.example lists every one with what it’s for; never put a real value in a doc or a commit.

After a deploy#

The Deployed GitHub Actions workflow runs once the new version is live: it clears Cloudflare’s cache (so visitors don’t keep seeing the old build’s files) and runs the browser tests against the live site.

gh run list --workflow deployed.yml

Each deploy starts two or three runs that skip themselves; look for the one that actually ran.