use std::{io, process::Command}; fn main() -> Result<(), io::Error> { // trigger recompilation when a new migration is added println!("cargo::rerun-if-changed=migrations"); // rerun npm install whenever packages or npm config are changed println!("cargo::rerun-if-changed=.npmrc"); println!("cargo::rerun-if-changed=package.json"); // `node_modules` and `package-lock.json` are always touched if `npm install` // runs, leading to spurious rebuilds. // // See: // println!("cargo::rerun-if-changed=package-lock.json"); // println!("cargo::rerun-if-changed=node_modules"); let status = Command::new("npm").args(["install"]).status()?; if !status.success() { return Err(io::Error::other(format!( "'npm install' exited with status {status:?}" ))); } // rerun `npm run build` whenever the UI changes. // // `node_modules` is always touched if `npm install` runs, leading to spurious // rebuilds. (This duplicate is purely organizational; it reflects that the ui // depends on node_modules.) // // See: // println!("cargo::rerun-if-changed=node_modules"); println!("cargo::rerun-if-changed=postcss.config.js"); println!("cargo::rerun-if-changed=svelte.config.js"); println!("cargo::rerun-if-changed=vite.config.js"); println!("cargo::rerun-if-changed=ui"); let status = Command::new("npm").args(["run", "build"]).status()?; if !status.success() { return Err(io::Error::other(format!( "'npm run build' exited with status {status:?}" ))); } Ok(()) }