Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .github/workflows/ci-electron.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Electron CI

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: |
package-lock.json
web/package-lock.json
native/package-lock.json

- name: Install dependencies
run: npm ci

- name: Install web dependencies
working-directory: web
run: npm ci

- name: Build web
working-directory: web
run: npm run build

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache Rust build
uses: actions/cache@v4
with:
path: native/target
key: native-${{ runner.os }}-x64-${{ hashFiles('native/Cargo.lock') }}
restore-keys: native-${{ runner.os }}-x64-

- name: Install native addon dependencies
working-directory: native
run: npm ci

- name: Build native addon
working-directory: native
run: npm run build

- name: Build TypeScript root
run: npx tsc

- name: Bundle Electron
working-directory: packages/electron
run: node electron/build.mjs

- name: Pack Electron (Linux)
working-directory: packages/electron
run: npm run pack:linux
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Setup Playwright Chrome
run: npx playwright install --with-deps chromium

- name: Run Electron Launch Smoke Test
run: xvfb-run -a npm run test -- packages/electron/__tests__/launch-smoke.test.ts
env:
RUN_E2E_SMOKE: '1'
73 changes: 69 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions packages/electron/__tests__/launch-smoke.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { test, expect, describe } from 'vitest';
import { _electron as electron } from 'playwright';
import { join } from 'path';

describe.runIf(process.env.CI || process.env.RUN_E2E_SMOKE)('Electron App Launch Smoke Test', () => {
test('Launches and main window opens', async () => {
const executablePath = join(__dirname, '..');
const electronApp = await electron.launch({
args: ['--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage', executablePath],
env: {
...process.env,
ELECTRON_ENABLE_LOGGING: '1',
}
});

electronApp.process().stdout?.on('data', (d) => console.log(`stdout: ${d.toString()}`));
electronApp.process().stderr?.on('data', (d) => console.error(`stderr: ${d.toString()}`));

const window = await electronApp.firstWindow();
expect(window).toBeTruthy();

const title = await window.title();
expect(title).toBe('Codex Proxy Developer Dashboard');

await electronApp.close();
}, 60000);
});
5 changes: 4 additions & 1 deletion packages/electron/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"main": "dist-electron/main.cjs",
"author": "codex-proxy",
"scripts": {
"test": "vitest run",
"build": "node electron/build.mjs",
"dev": "cd ../.. && npm run build && cd packages/electron && npm run build && electron .",
"prepack": "node electron/prepare-pack.mjs",
Expand All @@ -19,8 +20,10 @@
"electron-updater": "^6.3.0"
},
"devDependencies": {
"@playwright/test": "^1.59.1",
"electron": "^35.7.5",
"electron-builder": "^26.0.0",
"esbuild": "^0.25.12"
"esbuild": "^0.25.12",
"playwright": "^1.59.1"
}
}
Loading