Skip to main content
Bellows is configured with environment variables only. Locally they come from .env (loaded by npm run dev and read by Compose). In Kubernetes the Helm chart renders them from its values. A bad value is fatal at boot and names the variable.
  • Req means the process refuses to start without it (or without it in the stated mode).
  • Booleans on the server accept 1, true, yes or 0, false, no. Artifact flags accept true, 1, false, 0.
  • An unknown variable is ignored, except the retired ones at the end of this page.
  • The secret-store keys go in secrets.env, not .env. The driver deletes every SECRETS_* variable at startup.

Server

Database and network

Authentication

GitHub App

See GitHub App for permissions and setup.

Jira

See Jira app.

Optional features

Admission and capacity

Admission budgets apply to every claim across all drivers and replicas. Unset means unlimited. Values are positive integers. DRIVER_CONCURRENCY (below) limits one driver.

Telemetry

Artifacts and attachments

Artifacts and member uploads share one backend. The gcs backend takes its credentials from Application Default Credentials only: Workload Identity on GKE, or gcloud auth application-default login on a workstation. A service-account key file is refused.

Secret store

Required on every boot. Read from the server’s environment only, from secrets.env. npm run secrets:init writes it for the database backend. The gcp backend uses Application Default Credentials only: Workload Identity on GKE, gcloud auth application-default login locally. There is no key file option, and a service-account key file is refused. SECRETS_DATA_KEYS and SECRETS_ACTIVE_KEY_ID are refused with gcp. A variable for a backend you did not choose is refused.

Driver

The driver reads only the environment. It has no database access and talks to the board over HTTP.

Connection and identity

Executor images and runner environment

Polling, leases and timeouts

Cleanup

Gates and metrics

Resources

Values are Kubernetes quantities: CPU as cores or millicores (2, 500m), memory with an optional suffix (1Gi). A request above its limit is fatal. All unset means no requests or limits. On Docker, memory request becomes --memory-reservation, limits become --memory and --cpus, and there is no CPU request.

Kubernetes executor

Used only with EXECUTOR=kubernetes. The Helm chart sets them. See Kubernetes.

Retired variables

These are fatal if set, so a stale value cannot change what a deployment reads: GITHUB_TOKEN, GITHUB_OWNER, GITHUB_REPOS, ORG_REPOS, ORG_ID, ORG_NAME, GITHUB_APP_INSTALLATION_ID, AUTH_AUTO_JOIN_GITHUB_ORG, AUTH_BOOTSTRAP_ADMIN, DATA_SOURCE, SYNC_TTL_SECONDS, CACHE_TTL_SECONDS, BASE_BRANCH and BOTS. Organizations are now the GitHub App’s installations, and the repository list comes from the App.