From 6da908edd0cbc1d6eb185f9d3a9ff21713e053ef Mon Sep 17 00:00:00 2001 From: Coracle Bot <329+coracle-bot@noreply.coracle.social> Date: Mon, 7 Sep 2026 19:42:39 +0000 Subject: [PATCH] Give the desktop smoke test the Electron runtime CI never installed (#426) --- .gitea/workflows/ci.yml | 3 +++ README.md | 5 ++++- e2e/desktop/smoke.spec.ts | 3 ++- electron/package.json | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 5ef6fde2..d3d5de42 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -94,11 +94,14 @@ jobs: with: node-version-file: .nvmrc + # playwright's chromium set covers everything but GTK, which chromium + # only needs headed and electron always links against. - name: Install dependencies run: | corepack enable && pnpm i --frozen-lockfile npm ci --prefix electron pnpm exec playwright install-deps chromium + apt-get install -y libgtk-3-0t64 - name: Build desktop run: pnpm run build:desktop diff --git a/README.md b/README.md index 74ff91f4..11a40f05 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,10 @@ or iOS. `dev:desktop` opens those built assets; rerun `build:desktop` after fron changes. Live reload is deferred to the desktop configuration work. Run `pnpm run test:desktop` after building to check the Linux desktop window. On a -headless Linux runner, use `xvfb-run -a pnpm run test:desktop`. The separate smoke +headless Linux runner, use `xvfb-run -a pnpm run test:desktop`; Electron links +against GTK, which Playwright's chromium dependencies do not cover, so such a box +also needs `libgtk-3-0t64`. The test drops Chromium's sandbox when it runs as +root, because Chromium refuses to start that way. The separate smoke suite does not start a web dev server or test installers. Windows and macOS desktop behavior is not verified by the Linux test. CI builds and runs this suite under Xvfb in a separate desktop job. diff --git a/e2e/desktop/smoke.spec.ts b/e2e/desktop/smoke.spec.ts index 75139012..cd657feb 100644 --- a/e2e/desktop/smoke.spec.ts +++ b/e2e/desktop/smoke.spec.ts @@ -13,7 +13,8 @@ test("the desktop baseline renders, navigates, and keeps external pages outside" ) const app = await _electron.launch({ executablePath, - chromiumSandbox: true, + // Chromium refuses to start as root with its sandbox on, which is what a CI container is. + chromiumSandbox: process.getuid?.() !== 0, args: [resolve("electron")], env: {...process.env, XDG_CONFIG_HOME: profile}, }) diff --git a/electron/package.json b/electron/package.json index f961a197..788db736 100644 --- a/electron/package.json +++ b/electron/package.json @@ -6,6 +6,7 @@ "main": "build/main.js", "scripts": { "build": "tsc", + "postinstall": "install-electron", "start": "electron ." }, "devDependencies": {