gitui/build.rs
Bernhard M. Wiedemann f56844501e
Allow to override build date with SOURCE_DATE_EPOCH (#2202)
to make builds reproducible.
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.

This patch was done while working on reproducible builds for openSUSE.

---------

Co-authored-by: extrawurst <mail@rusticorn.com>
2024-05-16 17:17:58 +02:00

45 lines
1019 B
Rust

use chrono::TimeZone;
fn get_git_hash() -> String {
use std::process::Command;
let commit = Command::new("git")
.arg("rev-parse")
.arg("--short")
.arg("--verify")
.arg("HEAD")
.output();
if let Ok(commit_output) = commit {
let commit_string =
String::from_utf8_lossy(&commit_output.stdout);
return commit_string.lines().next().unwrap_or("").into();
}
panic!("Can not get git commit: {}", commit.unwrap_err());
}
fn main() {
let now = match std::env::var("SOURCE_DATE_EPOCH") {
Ok(val) => chrono::Local
.timestamp_opt(val.parse::<i64>().unwrap(), 0)
.unwrap(),
Err(_) => chrono::Local::now(),
};
let build_date = now.date_naive();
let build_name = if std::env::var("GITUI_RELEASE").is_ok() {
format!(
"{} {} ({})",
env!("CARGO_PKG_VERSION"),
build_date,
get_git_hash()
)
} else {
format!("nightly {} ({})", build_date, get_git_hash())
};
println!("cargo:warning=buildname '{}'", build_name);
println!("cargo:rustc-env=GITUI_BUILD_NAME={}", build_name);
}