Deploy staging
Hosting the server on Render and the web client on Cloudflare.
Server on Render
render.yaml describes one web service, gavel-host, with one instance and a 1 GB disk at /var/data. The build bundles the server and workspace packages into packages/server/dist/main.js; the start command runs node dist/main.js, so no dev tooling is in the runtime. The health check is /healthz. Auto deploy is off.
The real deploy path: the owner uses Manual Deploy of main in the Render dashboard, then checks GET /version and runs scripts/smoke.sh. deploy-staging is an optional workflow that runs by hand only; it calls the Render deploy hook, waits, then runs scripts/smoke.sh. It is not configured, so a run says SKIPPED in its job summary and a manual start fails.
The smoke script checks, with timeouts: GET /healthz is 200, GET /warmup is 200, an unsigned POST /webhooks/paypal is 400, and POST /api/auctions without a key is 401.
Settings the owner must provide (names only)
| Where | Names |
|---|---|
| Render environment | PUBLIC_URL, CORS_ORIGINS, TOKEN_SECRET, ADMIN_KEY, PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET, PAYPAL_WEBHOOK_ID |
GitHub environment staging | secret RENDER_DEPLOY_HOOK_URL, secret ADMIN_KEY (optional), variable STAGING_URL |
| Hosted checks | variables UPTIME_ENABLED, PRODUCTION_URL |
Without them the uptime probe is skipped. The nightly judge smoke needs no variable: it targets the public domains unless a run is started with other web_url and api_url inputs.
Rate limits behind one address
Socket upgrades and HTTP joins share one per-address bucket. RATE_JOIN_BURST (default 40) is the bucket size and RATE_JOIN_PER_MIN (default 10) the refill. A venue where many judges share one NAT address can raise RATE_JOIN_BURST. Each address may hold at most 20 open sockets.
Known limits
- The smoke may pass against the old instance if it answers before the new build is live; the workflow waits 60 seconds first.
- Boot validation exits 78 and names each missing or invalid variable before the server listens.
- docs/DEPLOY.mdthe guide this page is distilled from
- render.yamlthe blueprint
- scripts/smoke.shthe smoke checks
Last updated on