Goal
GitHub Actions workflow that packages the Electron app and verifies it launches without crashing.
Workflow file
.github/workflows/electron-smoke-test.yml
Trigger
on:
push:
branches: [master]
paths: [packages/electron/**]
pull_request:
branches: [master]
paths: [packages/electron/**]
Steps
npm ci (root — installs workspaces)
cd web && npm ci (web frontend deps)
cd packages/electron/desktop && npm ci (desktop frontend deps)
npm run build (builds web + tsc)
cd packages/electron/desktop && npx vite build (desktop UI)
cd packages/electron && npm run build (esbuild bundle)
cd packages/electron && node electron/prepare-pack.mjs (copy root resources)
cd packages/electron && npx electron-builder --config electron-builder.yml --linux --dir --publish never
- Launch with xvfb-run + Playwright `_electron.launch()`, assert window opens, close cleanly
Test file
packages/electron/__tests__/launch-smoke.test.ts (inside electron package, tracked by git)
Hard constraints — violations = auto-reject
- Branch is
master, NOT main
- Package manager is npm — no pnpm/yarn
- Do NOT modify
.gitignore or electron-builder.yml
- Do NOT bump electron version (keep
^35.7.5)
- Do NOT add dependencies to root
package.json — Playwright deps go in packages/electron/package.json only
- TypeScript: no
any
- ESM project — use
import.meta.dirname not __dirname
- Runner:
ubuntu-latest
- Install Playwright deps:
npx playwright install --with-deps
- The test ONLY verifies: app launches → window appears → clean exit. No feature testing.
Reference
- electron-builder config:
packages/electron/electron-builder.yml
productName: "Codex Proxy" → Linux unpacked binary is at packages/electron/release/linux-unpacked/codex-proxy
- Existing 40+ tests in
packages/electron/__tests__/ use vitest
- Build scripts:
electron/build.mjs, electron/prepare-pack.mjs
Goal
GitHub Actions workflow that packages the Electron app and verifies it launches without crashing.
Workflow file
.github/workflows/electron-smoke-test.ymlTrigger
Steps
npm ci(root — installs workspaces)cd web && npm ci(web frontend deps)cd packages/electron/desktop && npm ci(desktop frontend deps)npm run build(builds web + tsc)cd packages/electron/desktop && npx vite build(desktop UI)cd packages/electron && npm run build(esbuild bundle)cd packages/electron && node electron/prepare-pack.mjs(copy root resources)cd packages/electron && npx electron-builder --config electron-builder.yml --linux --dir --publish neverTest file
packages/electron/__tests__/launch-smoke.test.ts(inside electron package, tracked by git)Hard constraints — violations = auto-reject
master, NOTmain.gitignoreorelectron-builder.yml^35.7.5)package.json— Playwright deps go inpackages/electron/package.jsononlyanyimport.meta.dirnamenot__dirnameubuntu-latestnpx playwright install --with-depsReference
packages/electron/electron-builder.ymlproductName: "Codex Proxy"→ Linux unpacked binary is atpackages/electron/release/linux-unpacked/codex-proxypackages/electron/__tests__/use vitestelectron/build.mjs,electron/prepare-pack.mjs