Establish release CI matrix (#99)
Some checks failed
Native code generation / deterministic (push) Failing after 2m4s
Imaging and meshing gate / native (push) Successful in 6m35s
JPEG 2000 feature / linux (push) Successful in 2m45s
Release platform and feature matrix / audit (push) Successful in 34s
Native Rust workspace compile / compile (push) Failing after 56s
Skia feature / linux (push) Successful in 30m55s
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Has been cancelled

This commit is contained in:
2026-08-11 22:12:31 +00:00
parent a9e2711447
commit 9779e50ce9
15 changed files with 1194 additions and 23 deletions

View File

@@ -0,0 +1,47 @@
use metacrate_ci_matrix::{audit, load, run, workspace_root};
use std::path::{Path, PathBuf};
fn main() {
if let Err(error) = execute() {
eprintln!("ci-matrix: {error}");
std::process::exit(1);
}
}
fn execute() -> Result<(), Box<dyn std::error::Error>> {
let current = std::env::current_dir()?;
let root = workspace_root(&current).ok_or("could not locate the Cargo workspace")?;
let matrix = load(&root)?;
let mut arguments = std::env::args().skip(1);
match arguments.next().as_deref() {
Some("audit") if arguments.next().is_none() => {
audit(&root, &matrix)?;
println!(
"release CI matrix: {} validated profiles; Linux, Windows, macOS, MSRV, stable, default/minimal/optional features, tests, examples, and docs covered",
matrix.profiles.len()
);
}
Some("run") => {
let profile = arguments.next().ok_or("run requires a profile")?;
let flag = arguments.next().ok_or("run requires --evidence FILE")?;
let evidence = arguments.next().ok_or("run requires --evidence FILE")?;
if flag != "--evidence" || arguments.next().is_some() {
return Err("usage: ci-matrix run PROFILE --evidence FILE".into());
}
let evidence = absolute_or_rooted(&root, &evidence);
run(&root, &matrix, &profile, &evidence)?;
println!("release CI profile {profile}: ok ({})", evidence.display());
}
_ => return Err("usage: ci-matrix audit | run PROFILE --evidence FILE".into()),
}
Ok(())
}
fn absolute_or_rooted(root: &Path, value: &str) -> PathBuf {
let path = PathBuf::from(value);
if path.is_absolute() {
path
} else {
root.join(path)
}
}