use std::fs;
use vergen::EmitBuilder;
fn main() -> Result<(), Box<dyn std::error::Error>> {
EmitBuilder::builder()
.all_build()
.all_cargo()
.all_git()
.emit()?;
let build_num_file = "../.build_number";
let mut build_num: u32 = fs::read_to_string(build_num_file)
.unwrap_or_else(|_| "0".to_string())
.trim()
.parse()
.unwrap_or(0);
if should_bump_build_number() {
build_num += 1;
fs::write(build_num_file, build_num.to_string())?;
}
println!("cargo:rustc-env=BINGLE_BUILD_NUMBER={}", build_num);
println!("cargo:rerun-if-changed=src");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=Cargo.toml");
println!("cargo:rerun-if-changed=.git/HEAD");
Ok(())
}
fn should_bump_build_number() -> bool {
let get_output = |args: &[&str]| {
std::process::Command::new("git")
.args(args)
.output()
.ok()
.and_then(|o| String::from_utf8(o.stdout).ok())
.map(|s| s.trim().to_string())
};
if get_output(&["rev-parse", "--abbrev-ref", "HEAD"]).as_deref() != Some("master") {
return false;
}
if let Some(toplevel_path) = get_output(&["rev-parse", "--show-toplevel"]) {
let path = std::path::Path::new(&toplevel_path);
if path.file_name().and_then(|s| s.to_str()) != Some("master") {
return false;
}
if !path.join(".git").exists() {
return false;
}
} else {
return false;
}
true
}