Skip to main content

Deployment

DevelopmentProduction
Pages projectemaw-website, branch developemaw-website, production branch
URLhttps://develop.emaw-website.pages.dev → https://develop-website.everymanawarrior.cc (Cloudflare Access)everymanawarrior.com at launch
TriggerGitHub Action on push to develop (.github/workflows/deploy-develop.yml)Manual
Buildnpm run deploy:develop = tsc -b && vite build --mode development && wrangler pages deploy dist --project-name emaw-website --branch developnpm run build then wrangler pages deploy dist --project-name emaw-website
VariablesGitHub repository vars.VITE_*Pages project environment variables (Production)
SecretsCLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID (GitHub environment develop)the same token in your shell

The workflow uses npm install (no lockfile, see Local development) and Node 24, cancels an older run when a newer push arrives, and reads its VITE_* values from repository variables because the .env.* files are gitignored.

Manual production deploy​

npx wrangler login # once per machine
npm run build
npx wrangler pages deploy dist --project-name emaw-website --branch main

wrangler.toml deliberately has no pages_build_output_dir (it conflicts with the dev:pages proxy), so always pass dist explicitly.

Set the production VITE_* values in the Pages project (Settings → Environment variables → Production) before building there, or export them in the shell that runs npm run build; Vite bakes them into the bundle.

Go-live for commerce​

Donations, store and events need live-mode Stripe objects and the production backend's env in place first. The checklist is docs/donations-go-live.md; the store and events follow the same pattern (webhook endpoint with all nine events, payment method configurations, products).

Deploy order​

When a change spans the backend and the hand-off: backend, then web app, then website.

Known gaps​

  • No production workflow. Adding deploy-production.yml (push to main, --branch main) mirroring the web app is straightforward once the production custom domain exists.
  • The raw *.pages.dev hostname should sit behind Cloudflare Access like the custom domain.