Skip to main content

Environments

Environments let you define named configurations — sets of variables and tasks — that can be applied across all repositories at once. Switching from local to staging to production is a single command.

Define environments

Environments are defined at the top level of the profile, as a list. Each environment has a name, optional variables, and optional tasks.

profile.yaml
name: platform

environments:
- name: local
variables:
- name: LOG_LEVEL
value: debug
tasks:
- type: Shell
cmd: docker-compose up -d db
- name: staging
variables:
- name: LOG_LEVEL
value: info
tasks:
- type: Print
message: "Switched to staging"
- name: production
variables:
- name: LOG_LEVEL
value: warn
tasks:
- type: Confirm
message: "Switch to production?"

repositories:
- name: api
url: [email protected]:my-org/api.git
path: ~/dev/api

Individual repositories can also define their own environments in their raid.yaml. These are merged with the profile-level environments when applied.

~/dev/api/raid.yaml
environments:
- name: local
variables:
- name: DATABASE_URL
value: postgres://localhost:5432/api_dev
- name: API_PORT
value: "3000"
tasks:
- type: Shell
cmd: docker-compose up -d db
- name: staging
variables:
- name: DATABASE_URL
value: postgres://staging-db.internal:5432/api
- name: API_PORT
value: "443"
- name: production
variables:
- name: DATABASE_URL
value: postgres://prod-db.internal:5432/api
- name: API_PORT
value: "443"
tasks:
- type: Confirm
message: "Point API at production database?"
- type: Shell
cmd: ./scripts/rotate-api-key.sh
FieldDescription
nameEnvironment name used with raid env <name>
variablesList of {name, value} pairs to set when the environment is activated
tasksTasks to run when this environment is applied

Apply an environment

raid env staging

Check the active environment

raid env

List available environments

raid env list

Tips

Use Confirm tasks for production. A confirmation gate before switching to a production environment prevents accidents.

Use Prompt and Template for developer-specific values. If values differ per developer (e.g. local ports), prompt for them at apply-time.

~/dev/api/raid.yaml
environments:
- name: local
tasks:
- type: Prompt
var: DB_PORT
message: "Local database port"
default: "5432"
- type: Prompt
var: API_PORT
message: "Local API port"
default: "3000"
- type: Template
src: ./envs/local.env.tmpl
dest: ~/dev/api/.env