use std::fs::File; use std::io::Write; fn main() { write_version_file(); write_monologues_file(); } fn write_version_file() { use chrono::prelude::*; use std::process::Command; // Date of build let now = Utc::now().format("%Y%m%d%H%M%S"); // Latest commit ID let git_sha = String::from_utf8( Command::new("git") .arg("rev-parse") .arg("--short") .arg("HEAD") .output() .expect("Failed to get git sha") .stdout, ) .expect("Read stdout from git sha command"); let git_sha = git_sha.trim(); // Determine the build type based on cfg flags #[cfg(debug_assertions)] let build_type = "debug"; #[cfg(not(debug_assertions))] let build_type = "release"; // If the workspace is dirty or clean let clean = Command::new("git") .arg("diff") .arg("--quiet") .status() .expect("Failed to run git diff") .success(); let mut file = File::create("VERSION").expect("Create VERSION file"); if clean { write!(file, "0.0.0-{now}+{git_sha}-{build_type}").expect("Write version to VERSION file"); } else { write!(file, "0.0.0-{now}+{git_sha}-{build_type}-dirty") .expect("Write version to VERSION file"); } } fn write_monologues_file() { let mut file = File::create("assets/trees/MONOLOGUES").expect("Create MONOLOGUES file"); walkdir::WalkDir::new("assets/trees") .into_iter() .filter_map(|entry| entry.ok()) .filter(|entry| entry.path().extension() == Some(std::ffi::OsStr::new("mono"))) .for_each(|entry| { let _ = writeln!( file, "{}", entry .path() .to_string_lossy() .strip_prefix("assets/") .unwrap() ); }); }