use std::error::Error; use std::path::Path; use std::process::Command; pub fn build_binary_package(arch: Option<&str>, series: Option<&str>, cwd: Option<&Path>) -> Result<(), Box> { let cwd = cwd.unwrap_or_else(|| Path::new(".")); // Parse changelog to get package name and version let changelog_path = cwd.join("debian/changelog"); let (package, version, _series) = crate::changelog::parse_changelog_header(&changelog_path)?; // Construct dsc file name let parent = cwd.parent().ok_or("Cannot find parent directory")?; let dsc_name = format!("{}_{}.dsc", package, version); let dsc_path = parent.join(&dsc_name); if !dsc_path.exists() { return Err(format!("Could not find .dsc file at {}", dsc_path.display()).into()); } println!("Building {} using sbuild...", dsc_path.display()); let mut status = Command::new("sbuild"); if let Some(arch) = arch { status.arg(format!("--arch={}", arch)); } if let Some(series) = series { status.arg(format!("--dist={}", series)); } let status = status .arg(dsc_path) .status()?; if !status.success() { return Err(format!("sbuild failed with status: {}", status).into()); } Ok(()) }