Chains
A chain is how a job describes what to run. It binds repo images to named steps and wires them into a pipeline where one step's output feeds the next.
AI assisted, human approved — novem uses AI to review and keep our documentation up to date.
A job's config/chains file defines its pipeline. It ranges from a single
image to a directed graph of steps that pipe data through one another. You
write it to the job's config/chains path:
report_builder
A step points at a repo image. There are two reference forms:
- Short form — a bare repo name resolves to your latest image:
report_builder→@<your_username>/report_builder:latest. - Canonical form — name the owner and label explicitly:
@novem_demo/report_builder:latest. Use this to pin a label or reference an image shared with you by another user.
The simplest chain is one reference. This runs that image and is exactly what the quick start uses.
report_builder
To pipe steps together, use the chain grammar. It has two kinds of line:
- Bindings assign a short label to a repo image with
<-. - Edges wire labels together with
->, left to right.
fetch <- data_fetcher
render <- chart_builder
fetch -> render
This runs fetch first, then pipes its output files into render as that
step's input. The labels keep the pipeline readable and let you reference the
same image more than once.
Edges can be chained in a single line for longer pipelines:
fetch <- data_fetcher
transform <- transformer
render <- chart_builder
fetch -> transform -> render
Each step receives the previous step's output as its input; the final step's output becomes the job's result.
Prefix a step with a dot to fan out over the previous step's output: the step runs once per output file, in parallel.
split <- splitter
render <- chart_builder
split -> .render
Here render runs once for each file split produced. Fan-out currently
supports the per-file mode shown above.
Note: A few constructs are reserved and not yet available: AND
dependencies (,), OR dependencies (|), error handlers (:) and
cross-joins (.X.). Using them is a configuration error rather than a
silent no-op.
novem normalises whatever you write into a canonical form — bindings first,
then the edge line — so reading config/chains back may look slightly
different from what you wrote:
fetch <- @you/data_fetcher:latest
render <- @you/chart_builder:latest
fetch -> render
- Jobs overview — env vars, schedules and running.
- Repos — build the images your chain references.