Files
orca/config/scripts/client-hosted-browser-package-coverage.test.mjs
T
Brennan Benson 6bef6d2727 fix(ci): stop the Linux Electron probe step from starving its own probes (#17071)
* fix(ci): stop the Linux Electron probe step from starving its own probes

The package job's "Test Linux Electron lifecycle boundary" step ran five
Electron probe files under Vitest's default file parallelism, so four full
Electron stacks competed for a 4-vCPU runner. Each probe carries its own
in-process deadline (20s for WebRTC, 25s for H3), and every observed failure
was one of those deadlines expiring: exit code 2, "no result", with every
sibling file in the same run slower than its own green maximum.

Run the step with --no-file-parallelism so each probe owns the runner, and
stop each probe nesting a private `xvfb-run --auto-servernum` X server inside
the step's own xvfb-run: reuse an inherited DISPLAY, and only own one when
there is none (shards, local dev), which leaves those lanes unchanged.

Also set each Docker-SSH E2E step's Playwright output aside before the next
step starts, because Playwright empties test-results/ on every run and only
the last lane's traces survived to the artifact.

* fix(ci): route the persisted-worker probe through the same display resolver
2026-08-29 01:38:17 -07:00

53 lines
2.2 KiB
JavaScript

import { readFileSync } from 'node:fs'
import { join, resolve } from 'node:path'
import { describe, expect, it } from 'vitest'
import { parse } from 'yaml'
const projectDir = resolve(import.meta.dirname, '../..')
describe('client-hosted browser package coverage', () => {
it('bundles the WSL browser-network relay with its version stamp', () => {
const relayBuild = readFileSync(join(projectDir, 'config/scripts/build-relay.mjs'), 'utf8')
expect(relayBuild).toContain("outfile: join(outDir, 'wsl-browser-network-relay.js')")
expect(relayBuild).toContain("join(outDir, '.browser-network-version')")
})
it('runs client-hosted Electron lifecycle coverage on native package hosts', () => {
const prWorkflow = readFileSync(join(projectDir, '.github/workflows/pr.yml'), 'utf8')
const parsedWorkflow = parse(prWorkflow)
const linuxStep = parsedWorkflow.jobs.package.steps.find(
(step) => step.name === 'Test Linux Electron lifecycle boundary'
)
const windowsStep = parsedWorkflow.jobs.package_windows.steps.find(
(step) => step.name === 'Test Windows-specific boundaries'
)
const required = [
'browser-client-page-renderer-lifecycle',
'browser-route-webrtc-egress',
'browser-route-tcp-egress',
'browser-route-h3-egress',
'browser-route-dns-prefetch'
].map((name) => `src/main/browser/${name}.electron.test.ts`)
expect(linuxStep.run).toContain('xvfb-run --auto-servernum')
for (const file of required) {
expect(linuxStep.run).toContain(file)
expect(windowsStep.run).toContain(file)
}
})
// Why pinned: each of those files launches a full Electron stack twice under its own in-process
// deadline. Letting the runner interleave four of them starved the probes past those deadlines,
// which is the only way this step has ever failed.
it('gives each Linux Electron probe the runner to itself', () => {
const parsedWorkflow = parse(readFileSync(join(projectDir, '.github/workflows/pr.yml'), 'utf8'))
const linuxStep = parsedWorkflow.jobs.package.steps.find(
(step) => step.name === 'Test Linux Electron lifecycle boundary'
)
expect(linuxStep.run).toContain('--no-file-parallelism')
})
})