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
- Branch from
developin the repo you are changing. If the change spans repos, open matching branches and link the pull requests. - Backend: write tests, run pytest against the throwaway database. Frontends:
npm run lint(andnpm testfor the CRM). - Pull request into
develop. Reviewer checks the access and security rules.
2. Dev environment
- 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). - 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. - Ask staff to exercise the workflow on the dev website or admin CRM. They are the acceptance test.
3. Production
- Pull request
develop→mainin each affected repo. Merge in deploy order. - Backend: new env vars added in Portainer's stack environment and in
docker-compose.yml'sx-app-env; live-mode Stripe objects created if needed; Portainer redeploy; check/admin/loads anderror.logis quiet. If Qdrant was recreated, load embeddings. - Web app: merge to
main; watch the Action; sign in atapp.everymanawarrior.cc. - Website:
npm run buildwith production env andwrangler pages deploy dist --branch main; load the store and a conference page. - Admin CRM:
npm test,npm run deploy:production; pass Access, sign in, load Contacts. - Mobile: JS-only changes
eas update --channel production; native changes go through Builds and releases.
4. After
- Watch
error.logon 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
| App | How |
|---|---|
| Backend | Portainer redeploy of the previous main commit; migrations are not reversed automatically |
| Pages / Workers apps | Redeploy the previous commit with the same command, or roll back the deployment in the Cloudflare dashboard |
| Mobile | eas update:republish the previous update; a bad native build needs a new store build |