fn main() { #[cfg(feature = "constants")] set_commit_env(); } #[cfg(feature = "constants")] /// This sets the git `COMMIT` environment variable. fn set_commit_env() { const PATH: &str = "../.git/refs/heads/"; println!("cargo:rerun-if-changed={PATH}"); // FIXME: This could also be `std::fs::read({PATH}/{branch})` // so the machine building doesn't need `git`, although: // 1. Having `git` as a build dependency is probably ok // 2. It causes issues on PRs that aren't the `main` branch let output = std::process::Command::new("git") .arg("rev-parse") .arg("HEAD") .output() .unwrap(); let commit = std::str::from_utf8(&output.stdout) .unwrap() .trim() .to_lowercase(); // Commit hash should always be 40 bytes long. assert_eq!(commit.as_bytes().len(), 40); println!("cargo:rustc-env=COMMIT={commit}"); }