use std::env; use std::path::Path; use std::process::Command; fn run(cmd: &str, args: &[&str], dir: &Path) { let status = Command::new(cmd) .args(args) .current_dir(dir) .status() .unwrap_or_else(|e| panic!("Failed to run {} {:?}: {}", cmd, args, e)); if !status.success() { panic!("Command failed: {} {:?}", cmd, args); } } fn main() { println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-env-changed=PROFILE"); println!("cargo:rerun-if-changed=../frontend/package.json"); println!("cargo:rerun-if-changed=../frontend/pnpm-lock.yaml"); println!("cargo:rerun-if-changed=../frontend/vite.config.ts"); println!("cargo:rerun-if-changed=../frontend/index.html"); println!("cargo:rerun-if-changed=../frontend/src"); println!("cargo:rerun-if-changed=../frontend/public"); let profile = env::var("PROFILE").unwrap_or_default(); if profile != "release" { return; } let frontend_dir = Path::new("../frontend"); // Ensure dependencies are installed and build the frontend bundle. run("pnpm", &["install"], frontend_dir); run("pnpm", &["build"], frontend_dir); }