Inject GIT_VERSION even later

This commit is contained in:
Alex Auvolat 2022-09-07 18:30:15 +02:00
parent 06df301de5
commit f310fce34b
No known key found for this signature in database
GPG Key ID: 0E496D15096376BE
3 changed files with 28 additions and 18 deletions

View File

@ -124,7 +124,15 @@ let
*/ */
(pkgs.rustBuilder.rustLib.makeOverride { (pkgs.rustBuilder.rustLib.makeOverride {
name = "garage"; name = "garage";
overrideAttrs = drv: { overrideAttrs = drv:
(if git_version != null then {
/* [3] */ preConfigure = ''
${drv.preConfigure or ""}
export GIT_VERSION="${git_version}"
'';
} else {})
//
{
/* [1] */ setBuildEnv = (buildEnv drv); /* [1] */ setBuildEnv = (buildEnv drv);
/* [2] */ hardeningDisable = [ "pie" ]; /* [2] */ hardeningDisable = [ "pie" ];
}; };
@ -161,15 +169,7 @@ let
(pkgs.rustBuilder.rustLib.makeOverride { (pkgs.rustBuilder.rustLib.makeOverride {
name = "garage_model"; name = "garage_model";
overrideAttrs = drv: overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
(if git_version != null then {
/* [3] */ preConfigure = ''
${drv.preConfigure or ""}
export GIT_VERSION="${git_version}"
'';
} else {})
//
{ /* [1] */ setBuildEnv = (buildEnv drv); };
}) })
(pkgs.rustBuilder.rustLib.makeOverride { (pkgs.rustBuilder.rustLib.makeOverride {

View File

@ -77,7 +77,7 @@ async fn main() {
std::process::abort(); std::process::abort();
})); }));
// Parse opt // Initialize version and features info
let features = &[ let features = &[
#[cfg(feature = "k2v")] #[cfg(feature = "k2v")]
"k2v", "k2v",
@ -98,12 +98,17 @@ async fn main() {
#[cfg(feature = "system-libs")] #[cfg(feature = "system-libs")]
"system-libs", "system-libs",
][..]; ][..];
if let Some(git_version) = option_env!("GIT_VERSION") {
garage_model::version::init_version(git_version);
}
garage_model::version::init_features(features);
// Parse arguments
let version = format!( let version = format!(
"{} [features: {}]", "{} [features: {}]",
garage_model::version::garage_version(), garage_model::version::garage_version(),
features.join(", ") features.join(", ")
); );
garage_model::version::init_features(features);
let opt = Opt::from_clap(&Opt::clap().version(version.as_str()).get_matches()); let opt = Opt::from_clap(&Opt::clap().version(version.as_str()).get_matches());
let res = match opt.cmd { let res = match opt.cmd {

View File

@ -1,23 +1,28 @@
use std::sync::Arc; use std::sync::Arc;
use arc_swap::ArcSwapOption; use arc_swap::{ArcSwap, ArcSwapOption};
lazy_static::lazy_static! { lazy_static::lazy_static! {
static ref VERSION: ArcSwap<&'static str> = ArcSwap::new(Arc::new(git_version::git_version!(
prefix = "git:",
cargo_prefix = "cargo:",
fallback = "unknown"
)));
static ref FEATURES: ArcSwapOption<&'static [&'static str]> = ArcSwapOption::new(None); static ref FEATURES: ArcSwapOption<&'static [&'static str]> = ArcSwapOption::new(None);
} }
pub fn garage_version() -> &'static str { pub fn garage_version() -> &'static str {
option_env!("GIT_VERSION").unwrap_or(git_version::git_version!( &VERSION.load()
prefix = "git:",
cargo_prefix = "cargo:",
fallback = "unknown"
))
} }
pub fn garage_features() -> Option<&'static [&'static str]> { pub fn garage_features() -> Option<&'static [&'static str]> {
FEATURES.load().as_ref().map(|f| &f[..]) FEATURES.load().as_ref().map(|f| &f[..])
} }
pub fn init_version(version: &'static str) {
VERSION.store(Arc::new(version));
}
pub fn init_features(features: &'static [&'static str]) { pub fn init_features(features: &'static [&'static str]) {
FEATURES.store(Some(Arc::new(features))); FEATURES.store(Some(Arc::new(features)));
} }