Blog attempt 5
at trunk 71 lines 2.1 kB view raw
1use std::{env, error::Error, fs::copy, path::PathBuf, process::Command}; 2 3use rand::distr::Alphabetic; 4use vergen_git2::{BuildBuilder, CargoBuilder, Emitter, Git2Builder, RustcBuilder, SysinfoBuilder}; 5 6pub fn main() -> Result<(), Box<dyn Error>> { 7 vergen()?; 8 bundle_js()?; 9 10 Ok(()) 11} 12 13pub fn bundle_js() -> Result<(), Box<dyn Error>> { 14 use rand::Rng; 15 let mut rng = rand::rng(); 16 17 // println!("cargo::rerun-if-changed=src/index.js"); 18 // println!("cargo::rerun-if-changed=src/login.js"); 19 // println!("cargo::rerun-if-changed=src/bun.lock"); 20 21 let env_name = "CACHEBUSTING-HASH"; 22 let env_var: String = (&mut rng) 23 .sample_iter(Alphabetic) 24 .take(16) 25 .map(char::from) 26 .collect(); 27 28 println!("cargo:rustc-env={env_name}={env_var}"); 29 30 let out_dir = PathBuf::from(env::var("OUT_DIR")?); 31 let out_dir = out_dir.to_str().ok_or("malformed osstr")?; 32 33 let status = Command::new("bun") 34 .args([ 35 "build", 36 &format!("--outfile={out_dir}/bundle-{env_var}.js"), 37 "src/index.js", 38 ]) 39 .status()?; 40 assert!(status.success()); 41 42 let _ = std::fs::remove_file(format!("{out_dir}/modern-normalize.css")); 43 copy( 44 "node_modules/modern-normalize/modern-normalize.css", 45 format!("{out_dir}/modern-normalize.css"), 46 )?; 47 48 // println!("cargo:rerun-if-changed=bundle.js"); 49 50 Ok(()) 51} 52 53// NOTE: This will output everything, and requires all features enabled. 54// NOTE: See the specific builder documentation for configuration options. 55pub fn vergen() -> Result<(), Box<dyn Error>> { 56 let build = BuildBuilder::all_build()?; 57 let cargo = CargoBuilder::all_cargo()?; 58 let git2 = Git2Builder::all_git()?; 59 let rustc = RustcBuilder::all_rustc()?; 60 let si = SysinfoBuilder::all_sysinfo()?; 61 62 Emitter::default() 63 .add_instructions(&build)? 64 .add_instructions(&cargo)? 65 .add_instructions(&git2)? 66 .add_instructions(&rustc)? 67 .add_instructions(&si)? 68 .emit()?; 69 70 Ok(()) 71}