Shard Electron E2E workflow under CI time cap#2070
Merged
Conversation
2f03073 to
2526665
Compare
2526665 to
17af0d4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR brings the Electron E2E workflow back under the CI wall-clock cap by sharding the existing Playwright suite across five GitHub-hosted Linux runners while preserving the current per-runner worker count. It also includes the startup/reliability fixes found during review so the sharded Linux jobs can reuse a single build artifact instead of doing five competing Electron builds.
The release-blocking problem was elapsed CI time. The referenced release run entered
Run E2E testsat2026-05-16T04:01:33Zand was still running past the 30-minute cap. Increasing Playwright workers on one runner is risky for this suite because each worker launches isolated Electron app instances. This PR adds horizontal CI parallelism instead.What Changed
CI workflow
build e2e appprerequisite job in.github/workflows/e2e.yml.node-gypsetup from the existing jobs, installs dependencies, runsnpx electron-vite build --mode e2e, and uploadsout/as the short-livede2e-build-outartifact.1/5(e2e 1-of-5)2/5(e2e 2-of-5)3/5(e2e 3-of-5)4/5(e2e 4-of-5)5/5(e2e 5-of-5)SKIP_BUILD=1, so Playwright global setup reuses the prebuilt app instead of launching five concurrentelectron-vitebuilds.workers: 4setting. The PR adds runner-level parallelism without increasing per-runner Electron concurrency.fail-fast: falseso one shard failure does not hide failures from the other shards.playwright-traces-3-of-5.xvfb-runwithORCA_E2E_FORWARD_APP_LOGS=1so Electron stdout/stderr is visible when the app launches but fails beforefirstWindow().E2E startup hardening
src/main/electron-updater-loader.tsand movedelectron-updaterbehind the packaged-update guards.registerAutoUpdaterHandlers()sosrc/main/updater-events.tsno longer importselectron-updaterat module load.0.0;electron-updatervalidatesapp.getVersion()while loading, before the prior dev-mode guard could return.ORCA_E2E_USER_DATA_DIRsignal. Ubuntu/Xvfb runners were hittingGPU process isn't usable; E2E coverage does not depend on GPU compositing.ORCA_E2E_FORCE_HEADFUL=1override after logs showed it was not the root fix and could expose extra Xvfb/GPU instability.E2E reliability fixes
tests/e2e/helpers/terminal-title-log.tsto observe transient terminal title changes from the renderer.Commit messagetextbox by accessible role/name instead of a brittle ambiguous selector.Stats & Usagethrough the visible Settings navigation item, matching the exposed UI path.Why This Approach
out/keeps setup deterministic and avoids five parallel builds competing for CPU/RAM.Validation
Local validation on the final commit:
pnpm exec oxlint src/main/updater.ts src/main/updater-events.ts src/main/electron-updater-loader.ts src/main/updater.test.ts src/main/updater.check-failure.test.ts src/main/updater.mac-install.test.ts src/main/startup/configure-process.ts src/main/startup/configure-process.test.ts tests/e2e/global-setup.ts tests/e2e/helpers/orca-app.tspnpm exec vitest run src/main/updater.test.ts src/main/updater.check-failure.test.ts src/main/updater.mac-install.test.ts src/main/startup/configure-process.test.tspassed: 58 tests.pnpm typechecknpx electron-vite build --mode e2egit diff --check.github/workflows/e2e.ymlparsed successfully as YAML.CI=1 SKIP_BUILD=1 ORCA_E2E_FORWARD_APP_LOGS=1 pnpm run test:e2e -- tests/e2e/usage-overview.spec.ts --retries=0passed: 1 Electron smoke test.Earlier local shard validation for the same 5-way split:
1/52/53/54/55/5Targeted affected-spec validation also passed: 5 tests passed in 16.0s.
CI Review Notes
verify, but each shard built Electron separately, which defeated the wall-clock goal.e2e-build-outand skipped local builds, but Electron startup timed out beforefirstWindow().electron-updatervalidating direct-launch version0.0, and Ubuntu/Xvfb GPU-process crashes.electron-updateronly after packaged-update guards and disabling GPU only for Linux E2E runs.Risk and Follow-Up Notes
e2e-build-outartifact between jobs.if-no-files-found: errormakes missing build output fail in the build job instead of surfacing later as confusing shard failures.