arqen 0.11.4

Backend infrastructure for agent-ready applications
Documentation
use std::process::Command;

use super::exit;
use super::output::Output;

pub fn run_build(release: bool, output: &Output) -> i32 {
    if !output.is_quiet() {
        output.print("Building...");
    }

    let mut args = vec!["build"];
    if release {
        args.push("--release");
    }

    match Command::new("cargo").args(&args).status() {
        Ok(status) if status.success() => {
            if output.is_json() {
                output.print_json(serde_json::json!({
                    "command": "build",
                    "status": "ok"
                }));
            } else if !output.is_quiet() {
                output.print("Build succeeded");
            }
            exit::SUCCESS
        }
        Ok(status) => {
            let code = status.code().unwrap_or(1);
            if output.is_json() {
                output.print_json(serde_json::json!({
                    "command": "build",
                    "status": "fail",
                    "exit_code": code
                }));
            } else if !output.is_quiet() {
                output.print(&format!("Build failed (exit code {})", code));
            }
            exit::RUNTIME
        }
        Err(e) => {
            if output.is_json() {
                output.print_json(serde_json::json!({
                    "command": "build",
                    "status": "fail",
                    "detail": format!("cargo not found: {}", e)
                }));
            } else {
                output.print(&format!("cargo not found: {}", e));
            }
            exit::DEPENDENCY
        }
    }
}