diff --git a/crates/cli/build.rs b/crates/cli/build.rs new file mode 100644 index 0000000..ba1c245 --- /dev/null +++ b/crates/cli/build.rs @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +// Copyright 2024-2025 wire Contributors + +fn main() { + if let Some(change_id) = get_change_id() { + println!("cargo:rustc-env=GIT_COMMIT_ID={change_id}"); + } +} + +fn get_change_id() -> Option { + let change = std::env::var("WIRE_CHANGE_ID").unwrap_or_else(|_| "dirty".to_string()); + + if change.trim().is_empty() { + return None; + } + + Some(change.trim().to_string()) +} diff --git a/crates/cli/default.nix b/crates/cli/default.nix index eab7b05..eb4f90b 100644 --- a/crates/cli/default.nix +++ b/crates/cli/default.nix @@ -1,4 +1,9 @@ -{ getSystem, inputs, ... }: +{ + getSystem, + inputs, + self, + ... +}: { perSystem = { @@ -22,6 +27,14 @@ ${lib.getExe' self'.packages.wire-unwrapped-dev "wire"} apply --roff $out ''; + + changeId = + if self ? dirtyRev && self.dirtyRev != null then + self.dirtyRev + else if self ? rev && self.rev != null then + self.rev + else + "unknown"; in { packages = { @@ -33,6 +46,7 @@ cargoExtraArgs = "-p wire"; doCheck = true; CARGO_PROFILE = "dev"; + WIRE_CHANGE_ID = changeId; nativeBuildInputs = [ pkgs.sqlx-cli ]; @@ -78,6 +92,7 @@ pname = "wire"; CARGO_PROFILE = "profiling"; cargoExtraArgs = "-p wire"; + WIRE_CHANGE_ID = changeId; }; wire = pkgs.symlinkJoin { diff --git a/crates/cli/src/cli.rs b/crates/cli/src/cli.rs index f6407bb..86f6630 100644 --- a/crates/cli/src/cli.rs +++ b/crates/cli/src/cli.rs @@ -33,7 +33,12 @@ use std::{ name = "wire", bin_name = "wire", about = "a tool to deploy nixos systems", - version = format!("{}, supports hives within {}", crate_version!(), *SCHEMA_VERSION_SEMVER) + version = format!( + "{}{}, supports hives within {}", + crate_version!(), + option_env!("GIT_COMMIT_ID").map_or(String::new(), |id| format!("+{}", id)), + *SCHEMA_VERSION_SEMVER + ) )] pub struct Cli { #[command(subcommand)]