Add comprehensive build identification to agent
- Add git hash (short and full), branch, commit date
- Add build timestamp and dirty/clean state
- Add build profile (debug/release) and target triple
- New `version-info` command shows all build details
- `--version` now shows version-hash format (e.g., 0.1.0-4614df04)
- Startup logs now include version hash and build info
Example output:
GuruConnect v0.1.0
Git: 4614df04 (clean)
Branch: main
Commit: 2025-12-30 06:30:28 -0700
Built: 2025-12-30 15:25:20 UTC
Profile: release
Target: x86_64-pc-windows-msvc
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,66 @@ pub mod proto {
|
||||
include!(concat!(env!("OUT_DIR"), "/guruconnect.rs"));
|
||||
}
|
||||
|
||||
/// Build information embedded at compile time
|
||||
pub mod build_info {
|
||||
/// Cargo package version (from Cargo.toml)
|
||||
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
/// Git commit hash (short, 8 chars)
|
||||
pub const GIT_HASH: &str = env!("GIT_HASH");
|
||||
|
||||
/// Git commit hash (full)
|
||||
pub const GIT_HASH_FULL: &str = env!("GIT_HASH_FULL");
|
||||
|
||||
/// Git branch name
|
||||
pub const GIT_BRANCH: &str = env!("GIT_BRANCH");
|
||||
|
||||
/// Git dirty state ("clean" or "dirty")
|
||||
pub const GIT_DIRTY: &str = env!("GIT_DIRTY");
|
||||
|
||||
/// Git commit date
|
||||
pub const GIT_COMMIT_DATE: &str = env!("GIT_COMMIT_DATE");
|
||||
|
||||
/// Build timestamp (UTC)
|
||||
pub const BUILD_TIMESTAMP: &str = env!("BUILD_TIMESTAMP");
|
||||
|
||||
/// Build profile (debug/release)
|
||||
pub const BUILD_PROFILE: &str = env!("BUILD_PROFILE");
|
||||
|
||||
/// Target triple (e.g., x86_64-pc-windows-msvc)
|
||||
pub const BUILD_TARGET: &str = env!("BUILD_TARGET");
|
||||
|
||||
/// Short version string for display (version + git hash)
|
||||
pub fn short_version() -> String {
|
||||
if GIT_DIRTY == "dirty" {
|
||||
format!("{}-{}-dirty", VERSION, GIT_HASH)
|
||||
} else {
|
||||
format!("{}-{}", VERSION, GIT_HASH)
|
||||
}
|
||||
}
|
||||
|
||||
/// Full version string with all details
|
||||
pub fn full_version() -> String {
|
||||
format!(
|
||||
"GuruConnect v{}\n\
|
||||
Git: {} ({})\n\
|
||||
Branch: {}\n\
|
||||
Commit: {}\n\
|
||||
Built: {}\n\
|
||||
Profile: {}\n\
|
||||
Target: {}",
|
||||
VERSION,
|
||||
GIT_HASH,
|
||||
GIT_DIRTY,
|
||||
GIT_BRANCH,
|
||||
GIT_COMMIT_DATE,
|
||||
BUILD_TIMESTAMP,
|
||||
BUILD_PROFILE,
|
||||
BUILD_TARGET
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
use anyhow::Result;
|
||||
use clap::{Parser, Subcommand};
|
||||
use tracing::{info, error, warn, Level};
|
||||
@@ -46,7 +106,7 @@ use windows::Win32::UI::WindowsAndMessaging::{ShowWindow, SW_SHOW};
|
||||
/// GuruConnect Remote Desktop
|
||||
#[derive(Parser)]
|
||||
#[command(name = "guruconnect")]
|
||||
#[command(version, about = "Remote desktop agent and viewer")]
|
||||
#[command(version = concat!(env!("CARGO_PKG_VERSION"), "-", env!("GIT_HASH")), about = "Remote desktop agent and viewer")]
|
||||
struct Cli {
|
||||
#[command(subcommand)]
|
||||
command: Option<Commands>,
|
||||
@@ -102,6 +162,10 @@ enum Commands {
|
||||
/// The guruconnect:// URL to handle
|
||||
url: String,
|
||||
},
|
||||
|
||||
/// Show detailed version and build information
|
||||
#[command(name = "version-info")]
|
||||
VersionInfo,
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
@@ -115,7 +179,8 @@ fn main() -> Result<()> {
|
||||
.with_thread_ids(true)
|
||||
.init();
|
||||
|
||||
info!("GuruConnect v{}", env!("CARGO_PKG_VERSION"));
|
||||
info!("GuruConnect {} ({})", build_info::short_version(), build_info::BUILD_TARGET);
|
||||
info!("Built: {} | Commit: {}", build_info::BUILD_TIMESTAMP, build_info::GIT_COMMIT_DATE);
|
||||
|
||||
match cli.command {
|
||||
Some(Commands::Agent { code }) => {
|
||||
@@ -133,6 +198,13 @@ fn main() -> Result<()> {
|
||||
Some(Commands::Launch { url }) => {
|
||||
run_launch(&url)
|
||||
}
|
||||
Some(Commands::VersionInfo) => {
|
||||
// Show detailed version info (allocate console on Windows for visibility)
|
||||
#[cfg(windows)]
|
||||
show_debug_console();
|
||||
println!("{}", build_info::full_version());
|
||||
Ok(())
|
||||
}
|
||||
None => {
|
||||
// Legacy mode: if a support code was provided, run as agent
|
||||
if let Some(code) = cli.support_code {
|
||||
|
||||
Reference in New Issue
Block a user