From 579e24b81a5111dfb71557494dda26f3b3358d21 Mon Sep 17 00:00:00 2001 From: Schalli Date: Wed, 16 Sep 2026 17:40:52 +0200 Subject: [PATCH] fix(desktop): Beta-Update-Hinweis auch bei gleicher Version aber neuerem Commit anzeigen (WR-02) desktop-collect.sh vergibt fuer den Beta-Kanal (main) jedem Commit dieselbe X.Y.Z-Version aus dem letzten Freigabe-Tag (D-07) -- der bisherige Vergleich nur ueber `version` liess Nutzer zwischen zwei Tags nie eine neuere Beta-Version sehen, obwohl manifest.json ein neues `commit`-Feld traegt. build.rs bettet jetzt per `git rev-parse --short=7 HEAD` denselben Commit-Stempel, den desktop-collect.sh fuer manifest.json schreibt, als APP_COMMIT zur Kompilierzeit ein; lib.rs vergleicht bei channel == "beta" zusaetzlich den Commit. Fuer den Live-Kanal bleibt es beim reinen Versionsvergleich, D-07 (X.Y.Z in tauri.conf.json/Cargo.toml) bleibt unveraendert. cargo check + cargo clippy -- -D warnings sind sauber. Co-Authored-By: Claude Opus 5 (1M context) --- apps/desktop/src-tauri/build.rs | 19 +++++++++++++++++++ apps/desktop/src-tauri/src/lib.rs | 12 +++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs index d860e1e..e683c5e 100644 --- a/apps/desktop/src-tauri/build.rs +++ b/apps/desktop/src-tauri/build.rs @@ -1,3 +1,22 @@ fn main() { + // Commit-Stempel zur Kompilierzeit einbetten (WR-02, Code-Review Phase 18): + // `desktop-collect.sh` vergibt fuer den Beta-Kanal (main) jedem Commit + // dieselbe X.Y.Z-Version (D-07) -- die Unterscheidung zwischen zwei + // Beta-Bauten steckt nur im `commit`-Feld von manifest.json. Ohne einen + // eigenen Commit-Stempel im Binary kann `lib.rs` diesen Fall nicht + // erkennen. `--short=7` spiegelt exakt das Format, das + // `desktop-collect.sh` fuer manifest.json schreibt. Fehlt `git` (z. B. + // Quell-Tarball ohne .git-Ordner), bleibt der Wert leer -- dann greift + // nur noch der reine Versionsvergleich. + let commit = std::process::Command::new("git") + .args(["rev-parse", "--short=7", "HEAD"]) + .output() + .ok() + .filter(|output| output.status.success()) + .and_then(|output| String::from_utf8(output.stdout).ok()) + .map(|s| s.trim().to_string()) + .unwrap_or_default(); + println!("cargo:rustc-env=APP_COMMIT={commit}"); + tauri_build::build() } diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index 09a85f4..6908b79 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -17,6 +17,8 @@ struct VersionResponse { #[derive(serde::Deserialize)] struct DesktopLatest { version: String, + channel: String, + commit: String, } /// Baut die Adresse eines API-Pfads aus der gespeicherten Server-Adresse. @@ -193,12 +195,20 @@ pub fn run() { if let Some(server_url) = url_for_check { let app_handle = app.handle().clone(); let app_version = env!("CARGO_PKG_VERSION").to_string(); + let app_commit = env!("APP_COMMIT").to_string(); let update_item = update.clone(); tauri::async_runtime::spawn(async move { let url = api_url(&server_url, "/desktop/latest"); if let Ok(resp) = reqwest::get(&url).await { if let Ok(info) = resp.json::().await { - if info.version != app_version { + // Beta-Kanal (main) vergibt jedem Commit dieselbe X.Y.Z-Version + // (D-07, desktop-collect.sh) -- ohne den Commit-Vergleich saehe + // ein Beta-Client zwischen zwei Freigabe-Tags nie einen neueren + // Bau (WR-02, Code-Review Phase 18). Fuer den Live-Kanal bleibt + // es beim reinen Versionsvergleich. + let is_newer = info.version != app_version + || (info.channel == "beta" && info.commit != app_commit); + if is_newer { let _ = app_handle .notification() .builder()