diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6535198..861e025 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -3,7 +3,11 @@ "allow": [ "Bash(find:*)", "Bash(cargo build:*)", - "Bash(diesel migration generate:*)" + "Bash(diesel migration generate:*)", + "Bash(cargo clean:*)", + "Bash(git describe:*)", + "Bash(git add:*)", + "Bash(git commit:*)" ], "deny": [] } diff --git a/kordophoned/build.rs b/kordophoned/build.rs index ec36f2c..09dc74c 100644 --- a/kordophoned/build.rs +++ b/kordophoned/build.rs @@ -1,6 +1,7 @@ const KORDOPHONE_XML: &str = "include/net.buzzert.kordophonecd.Server.xml"; fn main() { + // Generate D-Bus code let out_dir = std::env::var("OUT_DIR").unwrap(); let out_path = std::path::Path::new(&out_dir).join("kordophone-server.rs"); @@ -19,4 +20,36 @@ fn main() { std::fs::write(out_path, output).expect("Error writing server dbus code"); println!("cargo:rerun-if-changed={}", KORDOPHONE_XML); + + // Create hybrid version: use Cargo.toml version as base, augment with git info + let cargo_version = env!("CARGO_PKG_VERSION"); + + let final_version = if let Ok(output) = std::process::Command::new("git") + .args(&["describe", "--tags", "--always", "--dirty"]) + .output() + { + let git_desc = String::from_utf8_lossy(&output.stdout).trim().to_string(); + + // Check if we're on a clean tag that matches the cargo version + if git_desc == format!("v{}", cargo_version) || git_desc == cargo_version { + // Clean release build - just use cargo version + cargo_version.to_string() + } else { + // Development build - append git info + if git_desc.contains("-dirty") { + format!("{}-dev-{}", cargo_version, git_desc) + } else if git_desc.starts_with("v") && git_desc.contains(&format!("v{}", cargo_version)) { + // We're N commits ahead of the tag + format!("{}-dev-{}", cargo_version, git_desc.strip_prefix("v").unwrap_or(&git_desc)) + } else { + // Fallback: just append the git description + format!("{}-dev-{}", cargo_version, git_desc) + } + } + } else { + // Git not available - just use cargo version + cargo_version.to_string() + }; + + println!("cargo:rustc-env=GIT_VERSION={}", final_version); } diff --git a/kordophoned/src/daemon/mod.rs b/kordophoned/src/daemon/mod.rs index 5f0daf3..b84a4af 100644 --- a/kordophoned/src/daemon/mod.rs +++ b/kordophoned/src/daemon/mod.rs @@ -116,7 +116,7 @@ impl Daemon { let database = Arc::new(Mutex::new(database_impl)); Ok(Self { - version: "0.1.0".to_string(), + version: env!("GIT_VERSION").to_string(), database, event_receiver, event_sender,