From 65e7bd4fffec61b997500631f16a168155885264 Mon Sep 17 00:00:00 2001 From: wiiiii123 Date: Wed, 6 May 2026 23:46:13 +0700 Subject: [PATCH] fix(recording): prefer staged windows capture helper --- electron/ipc/paths/binaries.test.ts | 75 +++++++++++++++++++++++++++++ electron/ipc/paths/binaries.ts | 10 ++-- 2 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 electron/ipc/paths/binaries.test.ts diff --git a/electron/ipc/paths/binaries.test.ts b/electron/ipc/paths/binaries.test.ts new file mode 100644 index 00000000..5b89d957 --- /dev/null +++ b/electron/ipc/paths/binaries.test.ts @@ -0,0 +1,75 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Windows native helper path resolution", () => { + let tempRoot: string; + let appPath: string; + + beforeEach(async () => { + tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "recordly-helper-paths-")); + appPath = path.join(tempRoot, "App"); + await fs.mkdir(appPath, { recursive: true }); + + vi.resetModules(); + vi.doMock("electron", () => ({ + app: { + isPackaged: false, + getAppPath: () => appPath, + }, + })); + }); + + afterEach(async () => { + vi.resetModules(); + vi.doUnmock("electron"); + await fs.rm(tempRoot, { recursive: true, force: true }); + }); + + it("prefers the branch-staged helper over a stale local CMake build in dev", async () => { + const buildOutputPath = path.join( + appPath, + "electron", + "native", + "wgc-capture", + "build", + "Release", + "wgc-capture.exe", + ); + const prebundledPath = path.join( + appPath, + "electron", + "native", + "bin", + process.arch === "arm64" ? "win32-arm64" : "win32-x64", + "wgc-capture.exe", + ); + await fs.mkdir(path.dirname(buildOutputPath), { recursive: true }); + await fs.mkdir(path.dirname(prebundledPath), { recursive: true }); + await fs.writeFile(buildOutputPath, "old-local-build"); + await fs.writeFile(prebundledPath, "branch-staged-helper"); + + const { getWindowsCaptureExePath } = await import("./binaries"); + + expect(getWindowsCaptureExePath()).toBe(prebundledPath); + }); + + it("falls back to the local CMake build when no staged helper exists", async () => { + const buildOutputPath = path.join( + appPath, + "electron", + "native", + "wgc-capture", + "build", + "Release", + "wgc-capture.exe", + ); + await fs.mkdir(path.dirname(buildOutputPath), { recursive: true }); + await fs.writeFile(buildOutputPath, "local-build"); + + const { getWindowsCaptureExePath } = await import("./binaries"); + + expect(getWindowsCaptureExePath()).toBe(buildOutputPath); + }); +}); diff --git a/electron/ipc/paths/binaries.ts b/electron/ipc/paths/binaries.ts index 45a944fa..739f7df8 100644 --- a/electron/ipc/paths/binaries.ts +++ b/electron/ipc/paths/binaries.ts @@ -67,14 +67,16 @@ export function resolvePreferredWindowsNativeHelperPath( return prebundledPath; } - if (existsSync(buildOutputPath)) { - return buildOutputPath; - } - + // Source checkouts should run the helper staged in the branch instead of a + // stale local CMake build left over from an earlier test run. if (existsSync(prebundledPath)) { return prebundledPath; } + if (existsSync(buildOutputPath)) { + return buildOutputPath; + } + return buildOutputPath; }