use crate::config::gate_args::GateArgs;
use crate::config::pre_build_runner::PreBuildRunner;
const LIBTEST_ARGS_FOR_DISCOVERED_BINARY: [&str; 3] = ["{job}", "--exact", "--test-threads=1"];
pub struct PreBuildResolver;
impl PreBuildResolver {
pub async fn resolve(args: &GateArgs) -> Result<GateArgs, String> {
let Some(pre_build_program) = &args.pre_build_program else {
return Ok(args.clone());
};
println!(
"SLOTGATE — PRE-BUILD: {pre_build_program} {}",
args.pre_build_args.join(" ")
);
let discovered = PreBuildRunner::run(
pre_build_program,
&args.pre_build_args,
args.pre_build_target_name.as_deref(),
)
.await?;
println!();
let Some(executable) = discovered else {
return Ok(args.clone());
};
println!("SLOTGATE — PRE-BUILD discovered test binary: {executable}");
println!();
Ok(Self::with_discovered_binary(args, executable))
}
fn with_discovered_binary(args: &GateArgs, executable: String) -> GateArgs {
let mut effective_args = args.clone();
effective_args.program = executable;
effective_args.program_args = LIBTEST_ARGS_FOR_DISCOVERED_BINARY
.iter()
.map(|arg| String::from(*arg))
.collect();
effective_args
}
}