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: the repo's variables are written to that repo's .env, and the repo's tasks run with the repo directory as their default working directory (after any profile-level tasks for the same environment). An environment declared only in a repo's raid.yaml is switchable with raid env <name> like any profile-level environment.

Repositories that haven't been cloned yet are skipped with a notice — run raid install first, then re-run raid env <name> to write their .env files.

~/dev/api/raid.yaml
name: "api"
branch: "main"

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
name: "api"
branch: "main"

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"