fn read_lf(path: &str) -> String {
std::fs::read_to_string(path)
.unwrap_or_else(|error| panic!("read {path}: {error}"))
.replace("\r\n", "\n")
}
#[test]
fn every_declared_binary_is_packaged_and_smoke_tested() {
let manifest = read_lf("Cargo.toml");
let workflow = read_lf(".github/workflows/release.yml");
let binaries: Vec<String> = manifest
.lines()
.skip_while(|line| !line.starts_with("[[bin]]"))
.filter_map(|line| {
line.strip_prefix("name = \"")
.and_then(|rest| rest.strip_suffix('"'))
.map(str::to_string)
})
.collect();
assert!(
binaries.len() >= 3,
"expected the declared binaries, found {binaries:?}"
);
for binary in binaries {
assert!(
workflow.contains(&format!("release/{binary}\"")),
"{binary} is declared in Cargo.toml but never copied into the release package"
);
assert!(
workflow.contains(&format!("dist/package/{binary} ")),
"{binary} is packaged but never smoke-tested in the published archive"
);
}
}
#[test]
fn every_packaged_binary_is_reachable_in_the_container_image() {
let manifest = read_lf("Cargo.toml");
let dockerfile = read_lf("Dockerfile");
let binaries: Vec<String> = manifest
.lines()
.skip_while(|line| !line.starts_with("[[bin]]"))
.filter_map(|line| {
line.strip_prefix("name = \"")
.and_then(|rest| rest.strip_suffix('"'))
.map(str::to_string)
})
.collect();
assert!(
binaries.len() >= 3,
"expected the declared binaries, found {binaries:?}"
);
for binary in binaries {
let copied = dockerfile.contains(&format!("/usr/local/bin/{binary}\n"));
let linked = dockerfile.contains(&format!(
"ln -s link-assistant-router /usr/local/bin/{binary}"
));
assert!(
copied || linked,
"{binary} is packaged for release but is not on PATH in the container image"
);
}
}