Deployment Workflow
Terra now uses a mainline release model: main is the source of truth, CI gates every change, and tags create human-readable GitHub releases.
Branch and Environment Model
| Branch | Purpose | Deployment |
|---|---|---|
main | Shipping branch | Production deploy target |
| feature branches | In-progress work | Preview deploys + PR checks |
Required CI Gates
Terra CI (.github/workflows/ci.yml) enforces:
- Build/typecheck
- ESLint
- Vitest suite
- No skipped Terra Playwright directives (
check-terra-skipped-tests.mjs) - Chromium public status smoke test
Daily Development Flow
Release Process (GitHub Releases)
Terra release automation lives in.github/workflows/release.yml.
Option A: Tag push (most direct)
Option B: Manual workflow dispatch
Use Actions → Release → Run workflow and provide:tag(optional; auto-generatesvYYYY.M.Dif omitted) IfvYYYY.M.Dalready exists, the workflow auto-selectsvYYYY.M.D.1,.2, etc.target(defaults tomain)prerelease(optional)
Rollback
If a bad change lands on production:Quick Commands
| Task | Command |
|---|---|
| Update local main | git checkout main && git pull origin main |
| Push feature branch | git push -u origin codex/<name> |
| Open PR | gh pr create --base main |
| Run Terra tests locally | pnpm --dir apps/terra test |
| Run Terra smoke E2E locally | pnpm --dir apps/terra exec playwright test tests/status-lookup.spec.ts --project=chromium --grep "Smoke Tests" |
| Cut release tag | git tag vYYYY.M.D && git push origin vYYYY.M.D (or vYYYY.M.D.N for same-day patch releases) |