pub const BUILD_SHA: &str = env!("MEMSTEAD_BUILD_SHA");
pub fn full_version() -> &'static str {
static FULL: std::sync::OnceLock<String> = std::sync::OnceLock::new();
FULL.get_or_init(|| {
if BUILD_SHA.is_empty() {
crate::ENGINE_VERSION.to_string()
} else {
format!("{}+g{}", crate::ENGINE_VERSION, BUILD_SHA)
}
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn full_version_is_semver_with_optional_build_sha() {
let full = full_version();
if BUILD_SHA.is_empty() {
assert_eq!(full, crate::ENGINE_VERSION);
} else {
assert_eq!(
full,
format!("{}+g{}", crate::ENGINE_VERSION, BUILD_SHA).as_str()
);
}
let parsed: semver::Version = full.parse().expect("full build version parses as semver");
let bare: semver::Version = crate::ENGINE_VERSION.parse().unwrap();
assert_eq!(
(parsed.major, parsed.minor, parsed.patch),
(bare.major, bare.minor, bare.patch)
);
}
}