Your First broskifile
Goal: define one interactive task and one deterministic graph task.
version = "0.5"
setup:
@mode interactive
npm install
build [target] [mode="release"]:
@in src/**/* Cargo.toml
@out dist/{{ target }}
@requires cargo
cargo build --bin {{ target }} --{{ mode }}
Run tasks:
broski setup
broski build api debug
broski run build --explain
Expected behavior:
broski setupstreams output directlybroski build api debugproduces declared output path--explainreports why build ran or was reused
What this gives you
- deterministic cache keys from
@in, params, env, command, and metadata - strict graph mode when outputs are declared
- interactive mode for long-running local workflows
Field quick-reference for this example
| Field | Type | Default | Why it is used here |
|---|---|---|---|
version | string | none | Enables current DSL behavior (0.5). |
@mode interactive | enum | inferred | Forces direct terminal streaming for setup. |
@in | list | empty | Declares content contract for cache key input. |
@out | list | empty | Declares artifact contract for deterministic output. |
@requires cargo | list | empty | Fails fast when required tool is missing. |