From ae77d1370e4f5608dc0ddf475b0ae1d4652c1ce9 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Mon, 27 Apr 2026 02:48:25 -0300 Subject: [PATCH] fix(electron): pre-create userData dir for Windows + stream logs in CI Windows smoke test exits code=0 because requestSingleInstanceLock() fails silently when the APPDATA/ directory doesn't exist. Pre-create the directory so the lock file can be written. Also enables ELECTRON_SMOKE_STREAM_LOGS=1 in CI for better debugging. --- .github/workflows/electron-release.yml | 2 ++ scripts/smoke-electron-packaged.mjs | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/.github/workflows/electron-release.yml b/.github/workflows/electron-release.yml index 3f50ca5489..a1d3f8179c 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/electron-release.yml @@ -137,12 +137,14 @@ jobs: if: matrix.platform != 'linux' env: ELECTRON_SMOKE_TIMEOUT_MS: 60000 + ELECTRON_SMOKE_STREAM_LOGS: "1" run: npm run electron:smoke:packaged - name: Smoke packaged Electron app (Linux) if: matrix.platform == 'linux' env: ELECTRON_SMOKE_TIMEOUT_MS: 60000 + ELECTRON_SMOKE_STREAM_LOGS: "1" run: xvfb-run -a npm run electron:smoke:packaged - name: Collect installers diff --git a/scripts/smoke-electron-packaged.mjs b/scripts/smoke-electron-packaged.mjs index ac03909e04..f7baa136c7 100644 --- a/scripts/smoke-electron-packaged.mjs +++ b/scripts/smoke-electron-packaged.mjs @@ -367,6 +367,15 @@ async function ensureSmokeEnvDirs(smokeEnv, dataDir) { ), ]; + // On Windows, Electron derives its userData from APPDATA/. + // requestSingleInstanceLock() runs synchronously at module load and + // fails silently if the directory doesn't exist yet — causing exit(0). + if (platform() === "win32" && smokeEnv.APPDATA) { + for (const subdir of ["omniroute-desktop", "OmniRoute", "omniroute"]) { + dirs.push(join(smokeEnv.APPDATA, subdir)); + } + } + await Promise.all(dirs.map((dir) => mkdir(dir, { recursive: true }))); }