Refactor build script

This commit is contained in:
Joscha 2023-08-03 19:13:40 +02:00
parent 8b5bfdd231
commit 8b0e6fe268
3 changed files with 36 additions and 22 deletions

1
Cargo.lock generated
View file

@ -783,6 +783,7 @@ dependencies = [
"mime_guess", "mime_guess",
"rust-embed", "rust-embed",
"tokio", "tokio",
"walkdir",
] ]
[[package]] [[package]]

View file

@ -11,3 +11,6 @@ axum = { version = "0.6.19", features = ["macros"] }
mime_guess = "2.0.4" mime_guess = "2.0.4"
rust-embed = "6.8.1" rust-embed = "6.8.1"
tokio = { version = "1.29.1", features = ["full"] } tokio = { version = "1.29.1", features = ["full"] }
[build-dependencies]
walkdir = "2.3.3"

View file

@ -4,27 +4,40 @@ use std::{
process::Command, process::Command,
}; };
use walkdir::WalkDir;
const STATIC_DIR: &str = "static"; const STATIC_DIR: &str = "static";
const STATIC_OUT_DIR: &str = "target/static"; const STATIC_OUT_DIR: &str = "target/static";
const STATIC_IGNORE_EXT: &[&str] = &["ts"];
fn copy_recursively(path: &Path) { fn watch_dir(path: &Path) {
let from = PathBuf::new().join(STATIC_DIR).join(path); WalkDir::new(path)
let to = PathBuf::new().join(STATIC_OUT_DIR).join(path); .into_iter()
.for_each(|e| println!("cargo:rerun-if-changed={}", e.unwrap().path().display()));
}
println!("cargo:rerun-if-changed={}", from.display()); fn run_tsc() {
let status = Command::new("tsc").status().unwrap();
assert!(status.success(), "tsc produced errors");
}
if from.is_file() { fn copy_static_files() {
if from.extension() == Some("ts".as_ref()) { let files = WalkDir::new(STATIC_DIR)
return; .into_iter()
} .map(|e| e.unwrap())
fs::create_dir_all(to.parent().unwrap()).unwrap(); .filter(|e| e.file_type().is_file())
fs::copy(from, to).unwrap(); .filter(|e| {
} else if from.is_dir() { let extension = e.path().extension().and_then(|s| s.to_str()).unwrap_or("");
for entry in from.read_dir().unwrap() { !STATIC_IGNORE_EXT.contains(&extension)
copy_recursively(&path.join(entry.unwrap().file_name())); });
}
} else { for file in files {
panic!("Unexpected file type at {}", from.display()); let components = file.path().components().collect::<Vec<_>>();
let relative_path = components.into_iter().rev().take(file.depth()).rev();
let mut target = PathBuf::new().join(STATIC_OUT_DIR);
target.extend(relative_path);
fs::create_dir_all(target.parent().unwrap()).unwrap();
fs::copy(file.path(), target).unwrap();
} }
} }
@ -35,10 +48,7 @@ fn main() {
fs::create_dir_all(STATIC_OUT_DIR).unwrap(); fs::create_dir_all(STATIC_OUT_DIR).unwrap();
fs::remove_dir_all(STATIC_OUT_DIR).unwrap(); fs::remove_dir_all(STATIC_OUT_DIR).unwrap();
// Run typescript compiler watch_dir(STATIC_DIR.as_ref());
let status = Command::new("tsc").status().unwrap(); run_tsc();
assert!(status.success(), "tsc produced errors"); copy_static_files();
// Copy remaining static files
copy_recursively("".as_ref());
} }