cf7410b46a
The daemon outlives the GUI, so after an update an OLD daemon can keep serving the socket and the new GUI just connects to it (stale code — e.g. the missing TERM fix). Both binaries are now stamped with the git build id (build.rs): the daemon reports it in `health.build`, and on connect the bridge compares it to the GUI's own SPACESH_BUILD; on mismatch it shuts the daemon down and lets ensure_daemon respawn the bundled (matching) one. No-op for unstamped dev builds or daemons too old to report a build. Build id is shown in Settings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
984 B
Rust
29 lines
984 B
Rust
use std::process::Command;
|
|
|
|
// Stamp the GUI with the same git build id as the bundled daemon so the bridge
|
|
// can detect and restart a stale running daemon. Matches crates/spaceshd/build.rs.
|
|
fn main() {
|
|
println!("cargo:rustc-env=SPACESH_BUILD={}", git_build());
|
|
println!("cargo:rerun-if-changed=../../.git/HEAD");
|
|
println!("cargo:rerun-if-changed=../../.git/index");
|
|
tauri_build::build()
|
|
}
|
|
|
|
fn git_build() -> String {
|
|
let sha = Command::new("git")
|
|
.args(["rev-parse", "--short=12", "HEAD"])
|
|
.output()
|
|
.ok()
|
|
.filter(|o| o.status.success())
|
|
.map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string())
|
|
.filter(|s| !s.is_empty());
|
|
let Some(sha) = sha else { return "dev".into() };
|
|
let dirty = Command::new("git")
|
|
.args(["status", "--porcelain"])
|
|
.output()
|
|
.ok()
|
|
.map(|o| !o.stdout.is_empty())
|
|
.unwrap_or(false);
|
|
if dirty { format!("{sha}-dirty") } else { sha }
|
|
}
|