pub fn run_hook(hook: Option<&str>, label: &str) -> anyhow::Result<()> {
let cmd = match hook {
Some(c) => c,
None => {
tracing::debug!(" sin hook para {label}");
return Ok(());
}
};
tracing::info!(" 🔍 {label}: ejecutando hook...");
let status = std::process::Command::new("sh")
.arg("-c")
.arg(cmd)
.status()
.map_err(|e| anyhow::anyhow!("no se pudo ejecutar hook '{cmd}': {e}"))?;
if status.success() {
tracing::info!(" ✓ hook {label} OK");
Ok(())
} else {
let code = status.code().unwrap_or(-1);
anyhow::bail!("hook '{label}' falló con exit code {code}: {cmd}")
}
}