Skip to main content

Release process

The rule​

Backend → web app → website → admin CRM → mobile. The backend must be live before any client that depends on a change; clients stay compatible with the previous backend for one release so a staged rollout is safe.

1. Develop​

  1. Branch from develop in the repo you are changing. If the change spans repos, open matching branches and link the pull requests.
  2. Backend: write tests, run pytest against the throwaway database. Frontends: npm run lint (and npm test for the CRM).
  3. Pull request into develop. Reviewer checks the access and security rules.

2. Dev environment​

  1. Merge. Frontends with a workflow deploy themselves. For the backend, SSH to the dev VM, git pull origin develop, docker compose up -d --build (or hand the tunnel back if you had it).
  2. Smoke test on dev: sign in on develop-web-app, load the admin CRM contacts list, and, if commerce changed, place a store order with a test card.
  3. Ask staff to exercise the workflow on the dev website or admin CRM. They are the acceptance test.

3. Production​

  1. Pull request develop → main in each affected repo. Merge in deploy order.
  2. Backend: new env vars added in Portainer's stack environment and in docker-compose.yml's x-app-env; live-mode Stripe objects created if needed; Portainer redeploy; check /admin/ loads and error.log is quiet. If Qdrant was recreated, load embeddings.
  3. Web app: merge to main; watch the Action; sign in at app.everymanawarrior.cc.
  4. Website: npm run build with production env and wrangler pages deploy dist --branch main; load the store and a conference page.
  5. Admin CRM: npm test, npm run deploy:production; pass Access, sign in, load Contacts.
  6. Mobile: JS-only changes eas update --channel production; native changes go through Builds and releases.

4. After​

  • Watch error.log on the backend and Stripe's webhook dashboard for failures for a day.
  • Note anything manual you had to do in the pull request so the next person has it.

Hotfix​

Branch from main, fix, PR to main, deploy, then merge main back into develop.

Rollback​

AppHow
BackendPortainer redeploy of the previous main commit; migrations are not reversed automatically
Pages / Workers appsRedeploy the previous commit with the same command, or roll back the deployment in the Cloudflare dashboard
Mobileeas update:republish the previous update; a bad native build needs a new store build