Skip to main content

wait

The wait step type blocks the workflow until one or more named background container services are ready. The companion wait-all step type waits for every background service started so far. Readiness reuses the service's container healthcheck, so you describe "wait until healthy" declaratively instead of hand-rolling readiness-polling scripts.

A container step with background: true starts a long-running service detached and lets the workflow continue. Use wait to gate the next step on that service becoming ready:

steps:
- name: emulator
type: container
action: run
background: true
with:
image: localstack/localstack
ports:
- host: 4566
container: 4566
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4566/_localstack/health"]
interval: 5s
retries: 10
start_period: 30s

- type: wait
for: [emulator]

- name: apply
type: atmos
command: terraform apply vpc -s dev

When the named service declares a healthcheck, Atmos already blocks until it is healthy before running the next step, so an explicit wait is most useful when you start several services and want to gate a specific point in the workflow on a subset of them.

For a background service, wait means "until the service is healthy", never "until it exits" — a long-running service never exits on its own, so its health check defines readiness.

Fields

for
List of background service step names to wait for. Each named step must be an earlier action: run step with background: true. The wait step blocks until every named service reports healthy.

wait-all

wait-all waits for every background service started earlier in the workflow, without naming them individually:

steps:
- name: localstack
type: container
action: run
background: true
with:
image: localstack/localstack
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4566/_localstack/health"]
interval: 5s
retries: 10

- name: registry
type: container
action: run
background: true
with:
image: registry:2
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:5000/v2/"]
interval: 5s
retries: 10

- type: wait-all

- name: e2e
type: shell
command: ./scripts/e2e.sh

wait-all takes no for field — it blocks until all background services declared up to that point are healthy.

Readiness semantics

  • A background service with a healthcheck is "ready" when its container reports healthy.
  • wait and wait-all block until the named (or all) services are ready, then let the workflow continue.
  • The ordinary needs field is unchanged: it expresses step ordering, not service readiness.
  • Background services are torn down with a cancel step, or automatically at workflow end.

See background services on the container step page for the full lifecycle.