bular 0.0.2

CLI for managing Bular deployments
use std::{path::PathBuf, process::Stdio};

use crate::manifest::Entrypoint;

pub fn build(cwd: &PathBuf, target_dir: &PathBuf, name: &str, entrypoint: &Entrypoint) -> PathBuf {
    let release = true; // TODO: Configurable by user

    println!("Building {name}...");

    // TODO: Bundle cargo-zigbuild into the CLI??? (cargo install cargo-zigbuild && pip3 install ziglang && rustup target add x86_64-unknown-linux-musl)
    // TODO: Allow custom flags
    let release_arg: &[&str] = if release { &["--release"] } else { &[] };
    let result = std::process::Command::new("cargo")
        .args([
            "zigbuild",
            "--target",
            "x86_64-unknown-linux-musl",
            "-p",
            &entrypoint._crate,
            "--bin",
            name,
        ])
        .args(release_arg)
        .current_dir(cwd)
        .stderr(Stdio::inherit())
        .stdout(Stdio::inherit())
        .output()
        .expect("failed to execute build Rust");

    if !result.status.success() {
        panic!("failed to build Rust");
    }

    let path = target_dir.join("x86_64-unknown-linux-musl");
    if release {
        path.join("release")
    } else {
        path.join("debug")
    }
    .join(&name)
}