use crate::util;
use anyhow::{Context, Result};
use std::process::Command;
pub fn run(cargo_args: Vec<String>, verbose: bool) -> Result<()> {
crate::info!("[INFO] Building and running with package identity.");
let info = util::load_project_info()?;
let build_result = util::build_and_get_exe(&info.manifest_dir, &cargo_args, verbose)?;
let exe_path = &build_result.exe_path;
crate::info!("[INFO] Applying debug identity...");
let mut cmd = Command::new("winapp");
cmd.arg("create-debug-identity")
.arg(exe_path)
.current_dir(&info.manifest_dir);
if verbose {
cmd.arg("--verbose");
}
let status = cmd.status().context(
"Failed to run winapp. Is it installed? Run: winget install microsoft.winappcli --source winget",
)?;
if !status.success() {
anyhow::bail!("winapp create-debug-identity failed");
}
crate::info!("[INFO] Running {}...", exe_path.display());
crate::status!(verbose, "{}", "─".repeat(50));
let status = Command::new(exe_path)
.status()
.with_context(|| format!("Failed to run {:?}", exe_path))?;
crate::status!(verbose, "{}", "─".repeat(50));
if status.success() {
crate::info!("[INFO] Process exited successfully");
} else {
crate::info!("[WARN] Process exited with code: {:?}", status.code());
}
if !status.success() {
std::process::exit(status.code().unwrap_or(1));
}
Ok(())
}