Files
storkit/server/build.rs

51 lines
1.7 KiB
Rust
Raw Normal View History

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;
}
// When cross-compiling (e.g. musl via `cross`), the Docker container
// has no Node/pnpm. The release script builds macOS first, so
// frontend/dist/ already exists. Skip the frontend build in that case.
let target = env::var("TARGET").unwrap_or_default();
let host = env::var("HOST").unwrap_or_default();
if target != host {
let dist = Path::new("../frontend/dist");
if !dist.exists() {
panic!("Cross-compiling but frontend/dist/ is missing. Build macOS first.");
}
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);
}