diff --git a/build.rs b/build.rs index 14dee886970856676fd361ff1ce2da0a7780246f..c7c026fdad5c2468f61b9a3ca667b8f8a7b3459a 100644 --- a/build.rs +++ b/build.rs @@ -46,6 +46,8 @@ fn main() { println!("[{}:{}] {var}={value}", file!(), line!()); } + set_git_describe_env_var(); + generate_export_stubs(&out_dir); build_tarantool(jobserver, build_root); build_http(jobserver, build_root); @@ -58,6 +60,17 @@ fn main() { rerun_if_webui_changed(); } +fn set_git_describe_env_var() { + if std::env::var("GIT_DESCRIBE").is_ok() { + return; + } + + let output = Command::new("git").arg("describe").output().unwrap(); + assert!(output.status.success()); + let git_describe = String::from_utf8(output.stdout).unwrap(); + println!("cargo:rustc-env=GIT_DESCRIBE={git_describe}"); +} + fn generate_export_stubs(out_dir: &str) { let mut symbols = HashSet::with_capacity(1024); let exports = std::fs::read_to_string("tarantool-sys/extra/exports").unwrap(); diff --git a/src/cli/args.rs b/src/cli/args.rs index b24101beadf1c436ada25c9f08c9f080ad8bca15..eb05656381bcb23aa0d3549653c018daeb0d1141 100644 --- a/src/cli/args.rs +++ b/src/cli/args.rs @@ -12,7 +12,7 @@ use tarantool::log::SayLevel; use tarantool::tlua; #[derive(Debug, Parser)] -#[clap(name = "picodata", version = "23.12.0")] +#[clap(name = "picodata", version = env!("GIT_DESCRIBE"))] pub enum Picodata { Run(Box<Run>), Tarantool(Tarantool), diff --git a/src/luamod.rs b/src/luamod.rs index f8c577654cbbd2ce3c3885f0291211d11ae735bf..c725d3dd8e1b699b26e79408bdeb1c11f5d81d4e 100644 --- a/src/luamod.rs +++ b/src/luamod.rs @@ -67,7 +67,7 @@ pub(crate) fn setup(args: &args::Run) { "}, { const _: () = assert!(str_eq(env!("CARGO_PKG_VERSION"), "23.12.0")); - "23.12.0" + env!("GIT_DESCRIBE") }, ); diff --git a/test/int/test_http_server.py b/test/int/test_http_server.py index e83a7705c1386a95ee14844ed9a1f20ccd05433e..b28424d16133a0f475ec7797b904a5cd5ceca67b 100644 --- a/test/int/test_http_server.py +++ b/test/int/test_http_server.py @@ -64,11 +64,13 @@ def test_webui(instance: Instance): with urlopen(f"http://{http_listen}/api/v1/cluster") as response: assert response.headers.get("content-type") == "application/json" - assert json.load(response) == { + response = json.load(response) + version = response.pop("currentInstaceVersion") + assert response == { "capacityUsage": 100, "replicasetsCount": 1, "instancesCurrentGradeOffline": 0, - "currentInstaceVersion": "23.12.0", "memory": {"usable": 33554432, "used": 33554432}, "instancesCurrentGradeOnline": 1, } + assert version.startswith("23.12.0")