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")