simian 0.2.0

A command-line tool for exploring and implementing Machine Learning algorithms in Rust.
use std::env;
use std::path::Path;
use std::process::Command;

fn copy_dir_all(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> std::io::Result<()> {
  std::fs::create_dir_all(&dst)?;
  for entry in std::fs::read_dir(src)? {
    let entry = entry?;
    let ty = entry.file_type()?;
    let name = entry.file_name();
    if name == "node_modules" || name == "dist" || name == ".git" {
      continue;
    }
    if ty.is_dir() {
      copy_dir_all(entry.path(), dst.as_ref().join(name))?;
    } else {
      std::fs::copy(entry.path(), dst.as_ref().join(name))?;
    }
  }
  Ok(())
}

fn main() {
  println!("cargo:rerun-if-changed=ui/src");
  println!("cargo:rerun-if-changed=ui/package.json");
  println!("cargo:rerun-if-changed=ui/vite.config.ts");
  println!("cargo:rerun-if-changed=ui/index.html");

  let out_dir = env::var("OUT_DIR").unwrap();
  let dest_ui = Path::new(&out_dir).join("ui");

  let _ = std::fs::remove_dir_all(&dest_ui);
  copy_dir_all("ui", &dest_ui).expect("Failed to copy ui directory");

  let status = Command::new("npm")
    .current_dir(&dest_ui)
    .args(["install"])
    .status()
    .expect("Failed to run npm install");

  if !status.success() {
    panic!("npm install failed");
  }

  let status = Command::new("npm")
    .current_dir(&dest_ui)
    .args(["run", "build"])
    .status()
    .expect("Failed to run npm run build");

  if !status.success() {
    panic!("npm run build failed");
  }
}