apm-server 0.1.18

Web UI and agent dispatcher for APM, a git-native project manager for parallel AI coding agents.
use std::path::Path;
use std::process::Command;

fn main() {
    let ui_dist = Path::new(env!("CARGO_MANIFEST_DIR")).join("../apm-ui/dist");
    if !ui_dist.exists() {
        std::fs::create_dir_all(&ui_dist).expect("failed to create apm-ui/dist stub");
        std::fs::write(
            ui_dist.join("index.html"),
            "<html><body>UI not built. Run <code>npm run build</code> in apm-ui/.</body></html>\n",
        )
        .expect("failed to write stub index.html");
    }
    println!("cargo::rerun-if-changed=../apm-ui/dist");

    let describe = Command::new("git")
        .args(["describe", "--tags", "--dirty", "--always"])
        .output()
        .ok()
        .filter(|o| o.status.success())
        .map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string())
        .unwrap_or_else(|| "unknown".to_string());
    println!("cargo:rustc-env=APM_GIT_DESCRIBE={describe}");
    println!("cargo:rerun-if-changed=../.git/HEAD");
    println!("cargo:rerun-if-changed=../.git/refs/tags");
}