History

only install CLI if bundled version is newer

Rhys Sullivan committed 7 months ago

Commit 384c54b1 parent d55c42f1 file · +33 −0Browse files

Unified · Split

apps/desktop/src/main.ts+33−0
@@ -32,16 +32,49 @@ const CLI_BIN_PATH = join(CLI_BIN_DIR, process.platform === "win32" ? "executor. · 31 unmodified lines
32// CLI install — copy sidecar to ~/.executor/bin and patch shell PATH32// CLI install — copy sidecar to ~/.executor/bin and patch shell PATH
33// ---------------------------------------------------------------------------33// ---------------------------------------------------------------------------
34 34
35const getInstalledCliVersion = (): string | null => {
36 if (!existsSync(CLI_BIN_PATH)) return null;
37 try {
38 const { execFileSync } = require("node:child_process") as typeof import("node:child_process");
39 return execFileSync(CLI_BIN_PATH, ["--version"], {
40 timeout: 5000,
41 encoding: "utf-8",
42 }).trim();
43 } catch {
44 return null;
45 }
46};
47
35const installCli = (): void => {48const installCli = (): void => {
36 if (isDev) return;49 if (isDev) return;
37 50
38 const sidecar = join(process.resourcesPath, binaryName);51 const sidecar = join(process.resourcesPath, binaryName);
39 if (!existsSync(sidecar)) return;52 if (!existsSync(sidecar)) return;
40 53
54 // Check if installed version is already same or newer
55 const appVersion = app.getVersion();
56 const installedVersion = getInstalledCliVersion();
57 if (installedVersion) {
58 const parse = (v: string) => v.replace(/^v/, "").split(/[.-]/).map((s) => {
59 const n = parseInt(s, 10);
60 return isNaN(n) ? 0 : n;
61 });
62 const installed = parse(installedVersion);
63 const bundled = parse(appVersion);
64 const len = Math.max(installed.length, bundled.length);
65 let cmp = 0;
66 for (let i = 0; i < len && cmp === 0; i++) {
67 cmp = (installed[i] ?? 0) - (bundled[i] ?? 0);
68 }
69 if (cmp >= 0) return; // Already up to date or newer
70 }
71
41 // Copy binary72 // Copy binary
42 mkdirSync(CLI_BIN_DIR, { recursive: true });73 mkdirSync(CLI_BIN_DIR, { recursive: true });
43 copyFileSync(sidecar, CLI_BIN_PATH);74 copyFileSync(sidecar, CLI_BIN_PATH);
44 try { chmodSync(CLI_BIN_PATH, 0o755); } catch {}75 try { chmodSync(CLI_BIN_PATH, 0o755); } catch {}
76 console.log(`Installed executor CLI ${appVersion} to ${CLI_BIN_PATH}` +
77 (installedVersion ? ` (was ${installedVersion})` : ""));
45 78
46 // Copy WASM if present79 // Copy WASM if present
47 const wasm = join(process.resourcesPath, "emscripten-module.wasm");80 const wasm = join(process.resourcesPath, "emscripten-module.wasm");