diff --git a/src/bin/dosh-client.rs b/src/bin/dosh-client.rs index d0678ee..646d6af 100644 --- a/src/bin/dosh-client.rs +++ b/src/bin/dosh-client.rs @@ -925,6 +925,13 @@ async fn run_doctor_for_host( &check.server_version } ); + if server_version_mismatch(&check.server_version) { + println!( + "[warn] version mismatch: client={} server={}", + env!("CARGO_PKG_VERSION"), + check.server_version + ); + } println!("[ok] known host: trusted"); println!("[ok] native auth: authorized as {}", check.requested_user); println!( @@ -942,6 +949,10 @@ async fn run_doctor_for_host( } } +fn server_version_mismatch(server_version: &str) -> bool { + !server_version.is_empty() && server_version != env!("CARGO_PKG_VERSION") +} + fn ensure_tui_safe_status_overlay(bytes: &[u8]) -> Result<()> { anyhow::ensure!( bytes.starts_with(b"\x1b7"), @@ -5101,9 +5112,9 @@ mod tests { parse_escape_key, parse_local_forward, parse_remote_forward, parse_ssh_config, queue_pending_user_input, raw_contains_host_table, recv_response_until, render_status_clear, render_status_overlay, requested_env, resolved_startup_command, - rewrite_forward_command, selected_predict_mode, selected_udp_host, ssh_destination_host, - ssh_username, ssh_with_user, startup_command, status_ssh_target, toml_bare_key_or_quoted, - update_check_requested, valid_forward_host, + rewrite_forward_command, selected_predict_mode, selected_udp_host, server_version_mismatch, + ssh_destination_host, ssh_username, ssh_with_user, startup_command, status_ssh_target, + toml_bare_key_or_quoted, update_check_requested, valid_forward_host, }; use dosh::config::{ClientConfig, CommandExtension, HostConfig}; use dosh::native::EnvVar; @@ -5792,6 +5803,13 @@ mod tests { assert!(RESTART_STATUS_SCRIPT.contains("dosh-server")); } + #[test] + fn doctor_detects_server_version_mismatch() { + assert!(!server_version_mismatch("")); + assert!(!server_version_mismatch(env!("CARGO_PKG_VERSION"))); + assert!(server_version_mismatch("0.0.0-old")); + } + #[test] fn release_download_url_uses_latest_release_asset() { assert_eq!(