diff --git a/apps/web/src/app/releases/latest.json/route.ts b/apps/web/src/app/releases/latest.json/route.ts index 52217cd..56bc7e0 100644 --- a/apps/web/src/app/releases/latest.json/route.ts +++ b/apps/web/src/app/releases/latest.json/route.ts @@ -28,7 +28,7 @@ export const dynamic = "force-dynamic"; * this in sync with the workspace version in `Cargo.toml` on each release so a * freshly built CLI reports "already latest" rather than a phantom upgrade. */ -const FALLBACK_VERSION = "0.2.28"; +const FALLBACK_VERSION = "0.2.29"; const FALLBACK_MIN_REQUIRED = "0.0.1"; type Channel = "stable" | "beta" | "nightly"; diff --git a/node/crates/c0mpute-cli/src/main.rs b/node/crates/c0mpute-cli/src/main.rs index e2cf615..45ad290 100644 --- a/node/crates/c0mpute-cli/src/main.rs +++ b/node/crates/c0mpute-cli/src/main.rs @@ -2865,7 +2865,7 @@ mod infernet_tests { Command::new("sh") .args([ "-c", - "sleep 600", + "sleep 600; :", &format!("/x/{tag}/@infernetprotocol/cli/index.js"), "start", "--foreground", @@ -2874,8 +2874,20 @@ mod infernet_tests { .spawn() .unwrap() }; + // `; :` keeps sh from exec-ing sleep, which would replace the cmdline being matched. let mut keep = fake("keep"); let mut stale = fake("stale"); + for child in [&keep, &stale] { + let path = format!("/proc/{}/cmdline", child.id()); + let ready = (0..100).any(|_| { + let ok = std::fs::read(&path).is_ok_and(|c| is_infernet_daemon_cmdline(&c)); + if !ok { + std::thread::sleep(std::time::Duration::from_millis(20)); + } + ok + }); + assert!(ready, "fake daemon never showed the infernet cmdline"); + } std::fs::write(dir.join("infernet/daemon.pid"), keep.id().to_string()).unwrap(); // SAFETY: the only test that reads XDG_CONFIG_HOME. unsafe { std::env::set_var("XDG_CONFIG_HOME", &dir) };