Skip to content

Deployment checks

uv run python -m bot.scripts.deploy runs all of these and prints one line each, so a single run surfaces every problem rather than only the first.

Check Verifies Always runs?
config Every setting the service needs is resolvable locally yes
pricing Every provider's effective model has a rate-table entry (a warning only -- an unpriced model runs, without a cost estimate) yes
boot-creds-live The vars the service reads at every boot are present on the deployed Render service under their current names -- not just locally needs an operator key
github-app The App has exactly one installation, every repo in GITHUB_TARGET_REPO is covered by it, and its webhook points here (set only if wrong) yes
health /healthz answers BOTH GET and HEAD -- UptimeRobot's free tier sends HEAD, so a GET-only endpoint lets the instance sleep yes
database Postgres is reachable and the app has provisioned its tickets table needs an operator key
runtime-config runtime_config has every column store.py's schema declares -- a column added after the table was first provisioned is never backfilled by the app's own CREATE TABLE IF NOT EXISTS boot DDL needs an operator key
provider The provider that will actually run -- LLM_PROVIDER, or an active DB override -- has its credential set needs an operator key
provider-live The actively-resolved provider's credential is present on the deployed Render service, not just locally needs an operator key
api-key-live The actively-resolved provider's actively-resolved key slot is present on the deployed Render service needs an operator key
render-service The latest Render deploy is live, and matches local HEAD when a commit is comparable needs an operator key
uptime-pinger A monitor targets /healthz exactly, is active, and polls at most every 10 minutes needs an operator key

Unskipping the optional checks

An optional check degrades to SKIPPED with a hint, never to a failure, when its operator-local key is unset. RENDER_API_KEY and UPTIMEROBOT_API_KEY are operator-local and are never set on the Render service; DATABASE_URL is both — the service needs it too, and --sync-env pushes it there.

  • RENDER_API_KEY (Render → Account Settings → API Keys) enables boot-creds-live, render-service, provider-live, api-key-live, and --sync-env.
  • UPTIMEROBOT_API_KEY (a read-only key) enables uptime-pinger.
  • DATABASE_URL enables database and provider — the provider override lives in the same database.