holger.runa.ron
// holger.runa.ron — the holger CI/CD pipeline, authored in the typed `runa` format.
//
// The `*.runa.ron` port of the in-code `dwarves::holger_build::pipeline`
// (crates/dwarves/src/holger_build.rs): it builds holger's products, each one crate and
// one row of holger's one product list (`holger`, `holger-downstream`, `holger-cli`).
// `holger-ui`'s row builds from the sibling holger-ui checkout, so it is no step here;
// the estate's rows (the appliance, the metered builds, the media) have their own verbs.
// `dwarves run holger.runa.ron` loads + validates this file, topo-orders the stage DAG,
// and dispatches every step through the real jera Scheduler.
//
// Each `Build{variant}` names a row holger declares in its `.nornir/build-variants.toml`;
// the forge resolves it against that discovered set and drives
// `nornir-build-thing::build_variant` IN-PROCESS (a real `cargo build`, zero shell). The
// `ReleaseDoctor` step kicks off the dwarves release engine in DRY-RUN.
//
// To execute against a real holger checkout:
// DWARVES_REPO_ROOT=/path/to/holger dwarves run holger.runa.ron
// (else the repo root defaults to this file's directory).
Pipeline(
name: "holger-products",
// Built on a release push to main, and always startable by hand.
triggers: [
Push(branch: "main"),
Manual,
],
stages: [
// ── build: one Build step per product row (holger's real declared row names).
// `"*"` would fan out over the WHOLE discovered set, the estate's media
// pointers included; naming the products is explicit + stable.
Stage(
name: "build",
steps: [
Build(variant: "holger"),
Build(variant: "holger-downstream"),
Build(variant: "holger-cli"),
],
),
// ── test: gate the built products behind the fast test + lint matrix.
Stage(
name: "test",
needs: ["build"],
steps: [
Nextest(all_features: true),
Lint(tool: Clippy, deny_warnings: true),
],
),
// ── package: forge the product executables into holger deploy packages.
Stage(
name: "package",
needs: ["build"],
steps: [
HolgerPackage(targets: ["x86_64-unknown-linux-gnu"]),
],
),
// ── release: kick off the deps-first crates.io release PLAN (dry-run — the
// forge NEVER --execute/publishes from a pipeline step).
Stage(
name: "release",
needs: ["test", "package"],
steps: [
ReleaseDoctor,
],
),
],
)