use std::process::Command;
fn main() {
println!("cargo:rerun-if-changed=build.rs");
rerun_on_git_head();
let sha = git(&["rev-parse", "--short", "HEAD"]).unwrap_or_else(|| "unknown".to_string());
let date = git(&["log", "-1", "--format=%cd", "--date=short"])
.unwrap_or_else(|| "unknown".to_string());
println!("cargo:rustc-env=BB_BUILD_SHA={sha}");
println!("cargo:rustc-env=BB_BUILD_DATE={date}");
for (src, dst) in [
("BB_OAUTH_CLIENT_ID", "BB_EMBED_OAUTH_CLIENT_ID"),
("BB_OAUTH_CLIENT_SECRET", "BB_EMBED_OAUTH_CLIENT_SECRET"),
] {
println!("cargo:rerun-if-env-changed={src}");
if let Ok(v) = std::env::var(src) {
if !v.is_empty() {
println!("cargo:rustc-env={dst}={v}");
}
}
}
}
fn rerun_on_git_head() {
if let Some(path) = git(&["rev-parse", "--git-path", "HEAD"]) {
println!("cargo:rerun-if-changed={path}");
}
if let Some(path) = git(&["rev-parse", "--git-path", "packed-refs"]) {
println!("cargo:rerun-if-changed={path}");
}
if let Some(reference) = git(&["symbolic-ref", "-q", "HEAD"]) {
if let Some(path) = git(&["rev-parse", "--git-path", &reference]) {
println!("cargo:rerun-if-changed={path}");
}
}
}
fn git(args: &[&str]) -> Option<String> {
let out = Command::new("git").args(args).output().ok()?;
if !out.status.success() {
return None;
}
let s = String::from_utf8_lossy(&out.stdout).trim().to_string();
if s.is_empty() {
None
} else {
Some(s)
}
}