Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#163 Handle git dependency in build.rs #175

Open
wants to merge 1 commit into
base: dev
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 25 additions & 11 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,35 @@
use std::io;
use std::process::Command;

const GIT_HASH_ENV_VAR: &str = "GIT_SHA_SHORT";

fn main() {
//Build command to retrieve the short git commit hash
let git_process_output = Command::new("git")
match get_git_commit_hash() {
// If the git commit hash is retrieved successfully, set the environment variable
Ok(git_hash) => {
println!("cargo:rustc-env={}={}", GIT_HASH_ENV_VAR, git_hash);
}
// If there's an error retrieving the git commit hash, print a note and set the environment variable to "unknown"
Err(e) => {
eprintln!("Note: Failed to get git commit hash: {}", e);
println!("cargo:rustc-env={}={}", GIT_HASH_ENV_VAR, "unknown");

Check warning on line 15 in build.rs

View workflow job for this annotation

GitHub Actions / build_and_test (ubuntu-20.04)

literal with an empty format string

Check warning on line 15 in build.rs

View workflow job for this annotation

GitHub Actions / build_and_test (ubuntu-20.04)

literal with an empty format string
}
}
}

fn get_git_commit_hash() -> Result<String, io::Error> {
// Build the command to retrieve the short git commit hash
let output = Command::new("git")
.arg("rev-parse")
.arg("--short")
.arg("HEAD")
.output()
.expect("Failed to retrieve short git commit hash");

//Parse the raw output into a string, we still need to remove the newline character
let git_hash_raw =
String::from_utf8(git_process_output.stdout).expect("Failed to convert git hash to string");
//Remove the newline character from the short git commit hash
let git_hash = git_hash_raw.trim_end_matches('\n');
.output()?;

println!("cargo:rustc-env={}={}", GIT_HASH_ENV_VAR, git_hash);
if output.status.success() {
// Parse the raw output into a string and trim the newline character
Ok(String::from_utf8_lossy(&output.stdout).trim().to_string())
} else {
// Return an error if the command failed
Err(io::Error::new(io::ErrorKind::Other, "Git command failed"))
}
}
Loading