Dependencies and DAGs
Two ways to declare edges
Husky creates DAG edges from:
depends_onafter:<job>frequency rules
depends_on
Use depends_on when a job has one or more upstream prerequisites.
jobs:
transform:
description: "Transform raw events"
frequency: manual
depends_on: [ingest]
command: "./scripts/transform.sh"
after:<job>
Use after:<job> when a job should fire immediately after a successful upstream run.
jobs:
generate_report:
description: "Generate summary"
frequency: after:transform
command: "./scripts/report.sh"
Example pipeline
jobs:
ingest_events:
description: "Download raw events"
frequency: manual
command: "./scripts/ingest.sh"
transform_events:
description: "Transform events"
frequency: after:ingest_events
command: "./scripts/transform.sh"
generate_report:
description: "Build report"
frequency: after:transform_events
command: "./scripts/report.sh"
DAG validation
Husky rejects cycles before the daemon starts or reloads.
Example invalid chain:
job_a -> job_b -> job_c -> job_a
Runtime rules
A downstream job only runs when required upstream jobs have succeeded.
Important effects:
- failed upstream jobs block downstream dispatch
on_failure: stophalts the affected pipeline branch- output templates resolve at dispatch time using the current
cycle_id
Inspecting the graph
husky dag
husky dag --json
curl http://127.0.0.1:8420/api/dag
Fan-out and fan-in
Husky supports:
- fan-out: one upstream triggers multiple downstream jobs
- fan-in: one job waits for multiple upstream jobs
The graph must remain acyclic.