Release Checklist¶
Purpose¶
Concrete steps to run through before merging to main - since a merge is a production deploy,
with no staging tier to catch anything first.
Before opening/merging the PR¶
- [ ]
npm install --no-audit --no-fundruns clean - [ ]
npm run check:portal-styles-driftpasses (runnpm run sync:portal-stylesfirst if it doesn't, and commit the result) - [ ]
npm run buildsucceeds for all 7 apps - [ ]
npx tsc -p workers/api/tsconfig.jsonhas no type errors - [ ]
npm testpasses - [ ] If the change touches
workers/api/migrations/: migration is additive (new table/column/index), not destructive - see Cloudflare → D1 for why this matters (no automated backup, no staging tier) - [ ] If the change touches an app's
wrangler.jsoncbindings/routes: confirmed against Architecture → Data Platform that the binding change is intentional - [ ] If the change touches
workers/api/src/index.tsCORS/ALLOWED_ORIGINS: confirmed the origin list still matches the apps that actually need it (see Infrastructure → Security - note Investors is intentionally excluded while it remains out of scope / inactive) - [ ] Ran locally end-to-end (see Local) for at least the app(s) directly touched
PR review¶
- [ ] CI (
validate) green on the PR - [ ] Reviewer has read the diff for anything matching
password|secret|token|api_key|account_id|private_key(should be none - see Infrastructure → Security)
After merge (automatic deploy)¶
- [ ] Watch the
deploy-productionrun in the Actions tab - [ ] If it fails partway, see Operations → Rollback before merging
anything else (the
akshaya-productionconcurrency group will queue further deploys behind a stuck one) - [ ] On success, confirm the smoke test step passed (7/7) - or run
npm run smoke:productionyourself if using Path 2 - [ ] Spot-check the specific app/route the change targeted, not just the smoke test's generic health checks