use std::process::Command; fn main() { // Git commit hash let git_commit = Command::new("git") .args(["rev-parse", "--short", "HEAD"]) .output() .ok() .and_then(|o| String::from_utf8(o.stdout).ok()) .map(|s| s.trim().to_string()) .filter(|s| !s.is_empty()) .unwrap_or_else(|| "unknown".to_string()); // Build timestamp (UTC) let build_date = Command::new("date") .args(["-u", "+%Y-%m-%dT%H:%M:%SZ"]) .output() .ok() .and_then(|o| String::from_utf8(o.stdout).ok()) .map(|s| s.trim().to_string()) .filter(|s| !s.is_empty()) .unwrap_or_else(|| "unknown".to_string()); // Rust version let rust_version = Command::new("rustc") .arg("--version") .output() .ok() .and_then(|o| String::from_utf8(o.stdout).ok()) .map(|s| s.trim().to_string()) .filter(|s| !s.is_empty()) .unwrap_or_else(|| "unknown".to_string()); println!("cargo:rustc-env=GIT_COMMIT={git_commit}"); println!("cargo:rustc-env=BUILD_DATE={build_date}"); println!("cargo:rustc-env=RUST_VERSION={rust_version}"); // Re-run if git HEAD changes println!("cargo:rerun-if-changed=.git/HEAD"); println!("cargo:rerun-if-changed=.git/refs/heads"); }