From 147845d079873890e2948bf02d8e38cca0b9ade2 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Mon, 18 May 2026 13:33:10 -0300 Subject: [PATCH] ci(lesavka): reuse process contract server build --- .../main/server_main_process_contract.rs | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/tests/contract/server/main/server_main_process_contract.rs b/tests/contract/server/main/server_main_process_contract.rs index b66cea7..174384d 100644 --- a/tests/contract/server/main/server_main_process_contract.rs +++ b/tests/contract/server/main/server_main_process_contract.rs @@ -12,6 +12,7 @@ use std::io::Read; use std::net::TcpListener; use std::path::PathBuf; use std::process::{Command, Stdio}; +use std::sync::OnceLock; use std::time::{Duration, Instant}; fn cargo_binary(name: &str) -> Option { @@ -45,31 +46,36 @@ fn build_current_binary(name: &str) -> Option { if name != "lesavka-server" { return None; } - let cargo = option_env!("CARGO").unwrap_or("cargo"); - let target_dir = workspace_root().join("target/process-contract-debug"); - let _ = fs::remove_dir_all(&target_dir); - let mut command = Command::new(cargo); - let status = command - .current_dir(workspace_root()) - .env_remove("CARGO_BUILD_RUSTFLAGS") - .env_remove("CARGO_ENCODED_RUSTFLAGS") - .env_remove("CARGO_LLVM_COV") - .env_remove("CARGO_LLVM_COV_TARGET_DIR") - .env_remove("CARGO_TARGET_DIR") - .env_remove("LLVM_COV") - .env_remove("RUSTFLAGS") - .env_remove("RUSTDOCFLAGS") - .env_remove("LLVM_PROFILE_FILE") - .arg("build") - .arg("--target-dir") - .arg(&target_dir) - .args(["-p", "lesavka_server", "--bin", name]) - .status() - .ok()?; - status - .success() - .then(|| target_dir.join("debug").join(name)) - .filter(|path| path.exists() && path.is_file()) + static SERVER_BINARY: OnceLock> = OnceLock::new(); + SERVER_BINARY + .get_or_init(|| { + let cargo = option_env!("CARGO").unwrap_or("cargo"); + let target_dir = workspace_root().join("target/process-contract-debug"); + let _ = fs::remove_dir_all(&target_dir); + let mut command = Command::new(cargo); + let status = command + .current_dir(workspace_root()) + .env_remove("CARGO_BUILD_RUSTFLAGS") + .env_remove("CARGO_ENCODED_RUSTFLAGS") + .env_remove("CARGO_LLVM_COV") + .env_remove("CARGO_LLVM_COV_TARGET_DIR") + .env_remove("CARGO_TARGET_DIR") + .env_remove("LLVM_COV") + .env_remove("RUSTFLAGS") + .env_remove("RUSTDOCFLAGS") + .env_remove("LLVM_PROFILE_FILE") + .arg("build") + .arg("--target-dir") + .arg(&target_dir) + .args(["-p", "lesavka_server", "--bin", name]) + .status() + .ok()?; + status + .success() + .then(|| target_dir.join("debug").join(name)) + .filter(|path| path.exists() && path.is_file()) + }) + .clone() } fn find_binary(name: &str) -> Option {