Co to znamená
Debug executable, který staví job rust, nezmizí s runnerem: je to artefakt majordomus-cli-<target>, s majordomus-cli.json vedle něj, jež pojmenovává commit, cílový triple, toolchain a digest Cargo.lock, takže pozdější job nebo pozdější fáze (release, scenario runner nad skutečným binárním souborem) jej může stáhnout, nastavit MAJORDOMUS_BIN a nikdy nespustit cargo build. Každý případ, který executable spouští, tuto proměnnou respektuje, jako to už dělal launcher bin/majordomus-mcp.
Princip
scripts/rust-check --artifact DIR zkopíruje target/debug/majordomus do DIR a zapíše metadata; workflow nahraje adresář. rust_bin v test/lib.sh je to, co volá jako první případ v Rustu: s nastaveným MAJORDOMUS_BIN vrátí cestu a nikdy nebuduje, přičemž cestu, která není spustitelná, odmítne jako selhání, a ne jako přeskočení; bez něj jednou sestaví přes cargo a vrátí cestu v targetu; bez cargo i bez proměnné vrátí kód přeskočení, který případy převedou na přeskočení, jaké vždy měly. Joby suite a macOS buildují jednou a proměnnou exportují, takže žádný případ nebuilduje. test/cases/94_ci_plan.sh dokazuje tři odpovědi rust_bin; test/cases/72_rust_mcp.sh a ostatní případy v Rustu běží přes něj.
Jak to vidět
scripts/rust-check --integration --artifact /tmp/dist && cat /tmp/dist/majordomus-cli.json
MAJORDOMUS_BIN=/tmp/dist/majordomus bash test/run.sh 72_rust_mcp
MAJORDOMUS_BIN=/nonexistent bash test/run.sh 72_rust_mcp # a failure, not a skip
just test-shell 94_ci_planCo nepokrývá
Dva případy si ponechávají cargo pro tu polovinu svých tvrzení, která je vlastní cargu (sady HTTP a projekcí cratu v 76, příklady v dokumentaci a build měření výkonu v 77); s dodaným spustitelným souborem a bez cargo spustí svou polovinu se spustitelným souborem a řeknou, co přeskočily. V rámci jednoho běhu workflow suite nečeká na artefakt jobu rust: změřeno, build s teplou cache stojí vteřiny, zatímco čekání by serializovalo minuty (docs/CI.md). Artefakt je debug profil, který pohání každá kontrola; release binárky patří release workflow.
Proč existuje
Pozdější fáze pipeline potřebují spustitelný soubor a job, který ho nedbale přestavuje, zaplatí celou kompilaci znovu na izolovaném runneru. Publikovat build jednou s dostatečným původem, aby bylo jasné, že je správný, a naučit každého konzumenta jednu proměnnou, činí ze spustitelného souboru plnohodnotný výstup buildu místo vedlejšího efektu testů.