influxdb/influxdb3_process/build.rs

44 lines
1.7 KiB
Rust

// Include the GIT_HASH, in `GIT_HASH` environment variable at build
// time, panic'ing if it can not be found
//
// https://stackoverflow.com/questions/43753491/include-git-commit-hash-as-string-into-rust-program
use std::process::Command;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("cargo:rerun-if-env-changed=GIT_HASH");
// Populate env!(GIT_HASH) with the current git commit
println!("cargo:rustc-env=GIT_HASH={}", get_git_hash());
// Populate env!(GIT_HASH_SHORT) with the current git commit
println!("cargo:rustc-env=GIT_HASH_SHORT={}", get_git_hash_short());
Ok(())
}
fn get_git_hash() -> String {
let git_hash = {
let output = Command::new("git")
// We used `git describe`, but when you tag a build the commit hash goes missing when
// using describe. So, switching it to use `rev-parse` which is consistent with the
// `get_git_hash_short` below as well.
//
// And we already have cargo version appearing as a separate string so using `git
// describe` looks redundant on tagged release builds
.args(["rev-parse", "HEAD"])
.output()
.expect("failed to execute git rev-parse to read the current git hash");
String::from_utf8(output.stdout).expect("non-utf8 found in git hash")
};
assert!(!git_hash.is_empty(), "attempting to embed empty git hash");
git_hash
}
fn get_git_hash_short() -> String {
let output = Command::new("git")
.args(["rev-parse", "--short", "HEAD"])
.output()
.expect("failed to execute git rev-parse to read the current git hash");
String::from_utf8(output.stdout).expect("non-utf8 found in git hash")
}