use std::process::{Command, ExitStatus, Output, Stdio};
pub fn has_docker() -> bool {
Command::new("docker")
.arg("info")
.stdout(Stdio::null())
.stderr(Stdio::null())
.status()
.is_ok_and(|s| s.success())
}
#[allow(dead_code)]
pub fn image_exists(name: &str) -> bool {
Command::new("docker")
.args(["image", "inspect", name])
.stdout(Stdio::null())
.stderr(Stdio::null())
.status()
.is_ok_and(|s| s.success())
}
#[allow(dead_code)]
pub fn compose_run(compose_dir: &str, args: &[&str]) -> Result<ExitStatus, String> {
Command::new("docker")
.arg("compose")
.args(args)
.current_dir(compose_dir)
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
.map_err(|e| format!("failed to run docker compose: {}", e))
}
#[allow(dead_code)]
pub fn compose_output(compose_dir: &str, args: &[&str]) -> Result<Output, String> {
Command::new("docker")
.arg("compose")
.args(args)
.current_dir(compose_dir)
.output()
.map_err(|e| format!("failed to run docker compose: {}", e))
}
pub fn docker_output(args: &[&str]) -> Result<Output, String> {
Command::new("docker")
.args(args)
.output()
.map_err(|e| format!("failed to run docker: {}", e))
}
pub fn docker_run(args: &[&str]) -> Result<ExitStatus, String> {
Command::new("docker")
.args(args)
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
.map_err(|e| format!("failed to run docker: {}", e))
}