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) <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,22 @@
|
|||||||
fn main() {
|
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()
|
tauri_build::build()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ struct VersionResponse {
|
|||||||
#[derive(serde::Deserialize)]
|
#[derive(serde::Deserialize)]
|
||||||
struct DesktopLatest {
|
struct DesktopLatest {
|
||||||
version: String,
|
version: String,
|
||||||
|
channel: String,
|
||||||
|
commit: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Baut die Adresse eines API-Pfads aus der gespeicherten Server-Adresse.
|
/// 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 {
|
if let Some(server_url) = url_for_check {
|
||||||
let app_handle = app.handle().clone();
|
let app_handle = app.handle().clone();
|
||||||
let app_version = env!("CARGO_PKG_VERSION").to_string();
|
let app_version = env!("CARGO_PKG_VERSION").to_string();
|
||||||
|
let app_commit = env!("APP_COMMIT").to_string();
|
||||||
let update_item = update.clone();
|
let update_item = update.clone();
|
||||||
tauri::async_runtime::spawn(async move {
|
tauri::async_runtime::spawn(async move {
|
||||||
let url = api_url(&server_url, "/desktop/latest");
|
let url = api_url(&server_url, "/desktop/latest");
|
||||||
if let Ok(resp) = reqwest::get(&url).await {
|
if let Ok(resp) = reqwest::get(&url).await {
|
||||||
if let Ok(info) = resp.json::<DesktopLatest>().await {
|
if let Ok(info) = resp.json::<DesktopLatest>().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
|
let _ = app_handle
|
||||||
.notification()
|
.notification()
|
||||||
.builder()
|
.builder()
|
||||||
|
|||||||
Reference in New Issue
Block a user