Gunnar

nordisk/Skidbladnir

.nornir/build-variants.toml

# Skidbladnir — .nornir/build-variants.toml — EMITTED, NOT SOURCE.
#
# Generated by `cargo run -p Skidbladnir-build-thing -- emit` from
# crates/Skidbladnir-build-thing (the Rust `impl BuildThing`). The code is the
# one source; this file DESCRIBES the build. Editing it changes NOTHING: re-emit
# after changing the code. Do not edit by hand.
#
# Model: variant → features → settings/sub-settings → typ. FOUR `exe` rows are
# the shipped half (the CLI on the lean offline core, the CLI with the real
# znippy engine, and the probe crate's two test executables). The SEVEN `lib`
# rows are not deliveries: they exist so a feature that GATES A TEST is compiled
# by something automatic instead of by a human remembering to type `--features`,
# and they are split by DEPENDENCY STACK so a red row names the stack that broke.
# Why that is worth eleven rows — and what the twelve unbuilt features are
# excused for — is in .nornir/build-thing-design.md.

[build]
offers = [
    "container",
    "download",
    "federation",
    "jera",
    "kubernetes",
    "kvm",
    "machine",
    "matrix",
    "msi-oci",
    "oci",
    "openbao",
    "pack-oci",
    "pki",
    "promote",
    "promote-k8s",
    "redfish",
    "service-drive",
    "sockets",
    "talos",
    "terraform",
    "testmatrix",
    "upstream-aws",
    "upstream-azure",
    "vault",
    "watch-refresh",
    "znippy",
]
base_suite = "ORIGINAL"

[build.allow_unbuilt]
container = "the podman/docker MachineController (fast, stateless tests). Not reached by `matrix`, and no row builds it: it is an ALTERNATIVE controller for the same trait, and the KVM one is what the install matrix actually drives. The day a container arm of the matrix exists it gets a row."
jera = "route the machine module's container/VM spawns through jera instead of raw Command. Deliberately an ADDITIVE first step — a classifier, a mapper and an honest `jera_unsupported()` gap-list beside the working direct path, not a replacement — so there is no artifact to build it into yet."
kvm = "the qemu/KVM MachineController. REACHED by `matrix`, which the `skidbladnir-matrix` row builds; naming it alone would be a second row over the same closure."
machine = "the server-side machine lifecycle module (MachineController + MachineSpec/Handle + the content-addressed ImageCache). REACHED by `kvm`, which `matrix` implies and a row builds; no row names it alone because the trait without a controller implementing it compiles nothing a test exercises."
msi-oci = "build MSIs (WiX v4 under Wine) through draupnir's one OCI engine. Pulls draupnir's bollard/tokio; the lean core must not carry it, and with the feature off the build renders the WXS for real and then bails HONESTLY, which is the behaviour every shipped row wants."
oci = "the convenience umbrella over `msi-oci` + `pack-oci`. An umbrella cannot be less unbuilt than what it unions."
pack-oci = "the container dep-capture build in pack.rs through the same draupnir OCI engine. Same reason as `msi-oci`: heavy backend, honest bail when off."
promote-k8s = "`promote` plus `kubernetes` plus the gzip/base64 payload path. Both halves already have rows of their own; a third row over their union would compile nothing the two do not, and it is the union that is rare in practice."
redfish = "BMC provisioning over Redfish REST (power/boot/virtual-media). A CONNECTED backend nothing in this repo's own test surfaces drives — the Redfish end of the constellation is draupnir's, and pointing a row at a BMC nobody has would be a build point that proves nothing."
terraform = "drive the `terraform` binary. A zero-dependency feature (`terraform = []`) that shells out to an external tool; there is nothing for a build point to link, and the zero-shell law means it is on the way out rather than the way in."
testmatrix = "turns the `functional_status` emit markers into real nornir matrix rows. A TEST-HARNESS mode, never a delivery: it is turned on by the test command, not by a build point."
watch-refresh = "a gix-backed watch/refresh path. Not built by any row and not exercised by any declared test surface — the one entry here that is a genuine gap rather than a decision, and it is named so it stops being invisible."

[build.allow_unbuilt_bins]
Skidbladnir-build-thing = "this recipe crate's own emit door (`cargo run -p Skidbladnir-build-thing -- emit` regenerates .nornir/build-variants.toml); the forge loads the crate as wasm, the bin is repository tooling, never shipped."
pairing-probe = "nordisk-pairing's real-socket/mTLS/WireGuard probe for the draupnir fleet test (tests/fleet_draupnir.rs), run in the test's containers — a test subject, never shipped."
skidbladnir-scenario = "the probe crate's THIRD executable — a scenario driver for the install/verify probe, run by hand and by the probe's own harness, never installed. It was not mentioned in the hand-written recipe at all (found 2026-08-30, lane AG); naming it here is what makes its absence from the roster a decision instead of an oversight."
xtask = "the `cargo xtask` door (`cargo xtask ci`, `cargo xtask build`): repository tooling that runs the CI plan and the declared rows; a member nothing depends on, never shipped."

[[build.variant]]
name = "skidbladnir"
package = "skidbladnir"
bin = "skidbladnir"
features = ["pki"]
profile = "release"
role = "tool"
suites = ["ORIGINAL"]
default = true

[[build.variant]]
name = "skidbladnir-znippy"
package = "skidbladnir"
bin = "skidbladnir"
features = [
    "pki",
    "znippy",
]
profile = "release"
role = "tool"
suites = ["ORIGINAL"]

[[build.variant]]
name = "skidbladnir-probe"
package = "skidbladnir-probe"
bin = "skidbladnir-probe"
profile = "release"
manifest_dir = "probe"
role = "tool"
suites = ["ORIGINAL"]

[[build.variant]]
name = "skidbladnir-testsvc"
package = "skidbladnir-probe"
bin = "skidbladnir-testsvc"
profile = "release"
manifest_dir = "probe"
role = "tool"
suites = ["ORIGINAL"]

[[build.variant]]
name = "skidbladnir-matrix"
package = "skidbladnir"
features = [
    "pki",
    "matrix",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "skidbladnir-promote"
package = "skidbladnir"
features = [
    "pki",
    "promote",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "skidbladnir-service-drive"
package = "skidbladnir"
features = [
    "pki",
    "service-drive",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "skidbladnir-connected"
package = "skidbladnir"
features = [
    "pki",
    "vault",
    "openbao",
    "download",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "skidbladnir-federation"
package = "skidbladnir"
features = [
    "pki",
    "federation",
    "upstream-aws",
    "upstream-azure",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "skidbladnir-cluster"
package = "skidbladnir"
features = [
    "pki",
    "kubernetes",
    "talos",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[[build.variant]]
name = "skidbladnir-sockets"
package = "skidbladnir"
features = [
    "pki",
    "sockets",
]
linkage = "not-applicable"
role = "tool"
suites = ["ORIGINAL"]
kind = "lib"

[build.toolchain]
image = "nordisk-cargo-toolchain"
image_sha256 = "668468e775ad80f32d700cbc9709d41cac726f40d00649461a0932f30d1b2067"
rust_version = "1.97.1"
targets = [
    "x86_64-unknown-linux-gnu",
    "x86_64-unknown-linux-musl",
    "wasm32-unknown-unknown",
]
timeout_secs = 3600
mem_limit_mb = 8192
cpus = 8
siblings = [
    "draupnir",
    "edda",
    "openzl-sys-rs",
    "tunnr",
    "znippy",
    "znippy-zoomies",
]