use std::process::Command;
fn main() {
let sha = git_short_sha().unwrap_or_else(|| "unknown".to_string());
println!("cargo:rustc-env=WK_GIT_SHA={sha}");
println!("cargo:rerun-if-changed=.git/HEAD");
println!("cargo:rerun-if-changed=.git/packed-refs");
println!("cargo:rerun-if-env-changed=WK_GIT_SHA_OVERRIDE");
}
fn git_short_sha() -> Option<String> {
if let Ok(forced) = std::env::var("WK_GIT_SHA_OVERRIDE") {
if !forced.trim().is_empty() {
return Some(forced.trim().to_string());
}
}
let out = Command::new("git")
.args(["rev-parse", "--short=8", "HEAD"])
.output()
.ok()?;
if !out.status.success() {
return None;
}
let s = String::from_utf8(out.stdout).ok()?;
let trimmed = s.trim();
if trimmed.is_empty() {
None
} else {
Some(trimmed.to_string())
}
}