espanso/scripts/test_binary.rs

79 lines
1.7 KiB
Rust

//! ```cargo
//! [dependencies]
//! envmnt = "*"
//! ```
use std::process::Command;
#[derive(Debug, PartialEq)]
enum Profile {
Debug,
Release,
}
fn main() {
let profile = if envmnt::get_or_panic("RELEASE") == "true" {
Profile::Release
} else {
Profile::Debug
};
println!("Using profile: {:?}", profile);
let wayland = envmnt::get_or("NO_X11", "false") == "true";
if wayland {
println!("Using Wayland feature");
}
let mut args = Vec::new();
args.push("test");
args.push("--workspace");
args.push("--exclude");
args.push("espanso-modulo");
args.push("--exclude");
args.push("espanso-ipc");
if profile == Profile::Release {
args.push("--release");
}
let override_target_arch = envmnt::get_or("BUILD_ARCH", "current");
if override_target_arch != "current" {
args.push("--target");
args.push(&override_target_arch);
}
let mut features = Vec::new();
if wayland {
features.push("wayland");
}
let features_flag = features.join(" ");
args.push("--no-default-features");
args.push("--features");
args.push(&features_flag);
println!("Calling with args: {:?}", args);
let mut cmd = Command::new("cargo");
cmd.args(&args);
// Remove cargo/rust-specific env variables, as otherwise they mess up the
// nested cargo build call.
let all_vars = envmnt::vars();
for (key, _) in all_vars {
if key.starts_with("CARGO") || (key.starts_with("RUST") && !key.starts_with("RUSTUP")) {
//println!("Removing {}", key);
cmd.env_remove(key);
}
}
let mut handle = cmd.spawn().expect("cargo test failed");
let result = handle.wait().expect("unable to read cargo exit status");
if !result.success() {
panic!("cargo test failed");
}
}