YAML reference
Top-level structure
version: "1"
defaults: {}
integrations: {}
jobs: {}
version
Currently only "1" is valid.
defaults
Fields applied to jobs that do not override them:
defaults:
timeout: "30m"
retries: 2
retry_delay: exponential
on_failure: alert
default_run_time: "0900"
timezone: "UTC"
Supported fields:
timeoutretriesretry_delayon_failuredefault_run_timetimezonenotify_on_failureexists for compatibility, but richernotifyblocks are the current model
integrations
Defines reusable notification providers.
integrations:
webhook:
webhook_url: "${env:WEBHOOK_URL}"
slack_ops:
provider: slack
webhook_url: "${env:SLACK_OPS_WEBHOOK}"
Known providers:
slackpagerdutydiscordsmtpwebhook
jobs
Each entry key is the job name.
Required fields
descriptionfrequencycommand
Common optional fields
timeworking_dirdepends_ontimeoutretriesretry_delayconcurrencyon_failureenvnotifycatchupslatagstimezonehealthcheckoutput
Example
version: "1"
defaults:
timeout: "20m"
retries: 1
retry_delay: exponential
on_failure: alert
default_run_time: "0900"
timezone: "UTC"
integrations:
webhook:
webhook_url: "${env:WEBHOOK_URL}"
jobs:
ingest_events:
description: "Download events"
frequency: every:15s
command: "./scripts/ingest.sh"
output:
file_path: last_line
transform_events:
description: "Transform the ingested file"
frequency: after:ingest_events
command: "./scripts/transform.sh"
env:
INPUT_FILE: "{{ outputs.ingest_events.file_path }}"
on_failure: stop
tags: [data-pipeline, transform]
notify:
on_failure:
channel: webhook:http://127.0.0.1:9999/failure
message: "{{ job.name }} failed on run {{ run.id }}"
Validation rules to know
timemust be a 4-digitHHMMstringslamust be less thantimeoutwhen both are setretry_delaymust beexponentialorfixed:<duration>concurrencymust beallow,forbid, orreplaceon_failuremust bealert,skip,stop, orignore- timezones must be valid IANA identifiers
- tags must be lowercase alphanumeric or hyphenated
- cycles in the dependency graph are rejected
- output capture modes must be valid