diff --git a/Dockerfile b/Dockerfile index 07d2313..f8924b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,8 +38,10 @@ WORKDIR /usr/src/banner # Copy dependency files for better layer caching COPY ./Cargo.toml ./Cargo.lock* ./ -# Copy .git directory for build.rs to access Git information -COPY ./.git ./.git +# Copy .git directory for build.rs to access Git information (if available) +# This will copy .git (and .gitignore) if it exists, but won't fail if it doesn't +# While normally a COPY requires at least one file, .gitignore should still be available, so this wildcard should always work +COPY ./.git* ./ # Copy build.rs early so it can run during the first build COPY ./build.rs ./ diff --git a/build.rs b/build.rs index 5e521b8..acb4ce7 100644 --- a/build.rs +++ b/build.rs @@ -1,19 +1,21 @@ use std::process::Command; fn main() { - // Get the current Git commit hash - let output = Command::new("git").args(["rev-parse", "HEAD"]).output(); - - let git_hash = match output { - Ok(output) => { - if output.status.success() { - String::from_utf8_lossy(&output.stdout).trim().to_string() - } else { - "unknown".to_string() + // Try to get Git commit hash from Railway environment variable first + let git_hash = std::env::var("RAILWAY_GIT_COMMIT_SHA").unwrap_or_else(|_| { + // Fallback to git command if not on Railway + let output = Command::new("git").args(["rev-parse", "HEAD"]).output(); + match output { + Ok(output) => { + if output.status.success() { + String::from_utf8_lossy(&output.stdout).trim().to_string() + } else { + "unknown".to_string() + } } + Err(_) => "unknown".to_string(), } - Err(_) => "unknown".to_string(), - }; + }); // Get the short hash (first 7 characters) let short_hash = if git_hash != "unknown" && git_hash.len() >= 7 { @@ -26,7 +28,9 @@ fn main() { println!("cargo:rustc-env=GIT_COMMIT_HASH={}", git_hash); println!("cargo:rustc-env=GIT_COMMIT_SHORT={}", short_hash); - // Rebuild if the Git commit changes - println!("cargo:rerun-if-changed=.git/HEAD"); - println!("cargo:rerun-if-changed=.git/refs/heads"); + // Rebuild if the Git commit changes (only works when .git directory is available) + if std::path::Path::new(".git/HEAD").exists() { + println!("cargo:rerun-if-changed=.git/HEAD"); + println!("cargo:rerun-if-changed=.git/refs/heads"); + } }