use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
let embedded = manifest_dir.join("_embedded/dashboard/dist");
let sibling = manifest_dir.join("../dashboard/dist");
let embedded_index = embedded.join("index.html");
let sibling_index = sibling.join("index.html");
if sibling_index.exists() {
let _ = std::fs::remove_dir_all(&embedded);
copy_dir_recursive(&sibling, &embedded)
.expect("failed to mirror ../dashboard/dist to _embedded/dashboard/dist");
println!("cargo:rerun-if-changed=../dashboard/dist");
} else if !embedded_index.exists() {
std::fs::create_dir_all(&embedded).expect("cannot create _embedded/dashboard/dist");
std::fs::write(
&embedded_index,
"<!doctype html><html><body>Dashboard not built. Run <code>pnpm build</code> in dashboard/ then rebuild aa-cli, OR install a published aasm binary that ships the prebuilt dashboard.</body></html>\n",
)
.expect("cannot write _embedded/dashboard/dist/index.html");
}
println!("cargo:rerun-if-changed=_embedded/dashboard/dist");
}
fn copy_dir_recursive(src: &std::path::Path, dst: &std::path::Path) -> std::io::Result<()> {
std::fs::create_dir_all(dst)?;
for entry in std::fs::read_dir(src)? {
let entry = entry?;
let kind = entry.file_type()?;
let src_path = entry.path();
let dst_path = dst.join(entry.file_name());
if kind.is_dir() {
copy_dir_recursive(&src_path, &dst_path)?;
} else {
std::fs::copy(&src_path, &dst_path)?;
}
}
Ok(())
}