use std::process::Command;
fn main() {
let version = get_version();
println!("cargo:rustc-env=VEXY_JSON_VERSION={version}");
println!("cargo:rerun-if-changed=.git/HEAD");
println!("cargo:rerun-if-changed=.git/refs/tags");
}
fn get_version() -> String {
if let Ok(output) = Command::new("git")
.args(["describe", "--exact-match", "--tags"])
.output()
{
if output.status.success() {
let tag = String::from_utf8_lossy(&output.stdout).trim().to_string();
return tag.strip_prefix('v').unwrap_or(&tag).to_string();
}
}
if let Ok(output) = Command::new("git")
.args(["describe", "--tags", "--always"])
.output()
{
if output.status.success() {
let tag = String::from_utf8_lossy(&output.stdout).trim().to_string();
if tag.starts_with('v') || tag.chars().next().is_some_and(|c| c.is_numeric()) {
let version = tag.strip_prefix('v').unwrap_or(&tag);
if version.contains('-') {
let parts: Vec<&str> = version.split('-').collect();
if parts.len() > 1 {
return format!("{}-dev", parts[0]);
}
}
return version.to_string();
}
}
}
env!("CARGO_PKG_VERSION").to_string()
}