Skip to content

ci(meet): run parallel e2e tests#194

Merged
BreadGenie merged 14 commits into
frappe:developfrom
BreadGenie:ci-e2e
Jul 11, 2026
Merged

ci(meet): run parallel e2e tests#194
BreadGenie merged 14 commits into
frappe:developfrom
BreadGenie:ci-e2e

Conversation

@BreadGenie

Copy link
Copy Markdown
Member

No description provided.

Fake canvas streams driven only by rAF often emit live tracks with no
encoded frames on GitHub runners, so remote video stays at readyState 0.
Push frames with setInterval/requestFrame, create a stream per capture
call, and relax decode assertions enough to stay reliable under load.
@greptile-apps

greptile-apps Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 5/5

Safe to merge — changes are scoped entirely to E2E test infrastructure with no production code touched.

All changes improve test isolation and reliability. The media fixture correctly defines stream via canvas.captureStream(12) before the for loop iterates stream.getVideoTracks(), and the interval cleanup via the ended event is sound. No production paths are affected.

No files require special attention.

Reviews (11): Last reviewed commit: "ci(meet): drop prepare job; keep sharded..." | Re-trigger Greptile

Comment thread suite/meet/e2e/helpers/media.ts
videoWidth/Height can come from track metadata before any frame is
decoded, so do not count dimensions alone as playback success.
Create a meeting per test so rooms no longer couple workers, join host
and guest in parallel where safe, and match CI SFU capacity to
Playwright workers=2 to cut serial WebRTC wall time.
Two Playwright workers caused MariaDB deadlocks on concurrent meeting
create, 500s, and WebRTC/media starvation. Keep one CI worker, retry
deadlocked creates, and retain per-test isolation for later sharding.
Split Playwright with --shard=N/3 so each job runs a smaller serial
slice on a fresh ubuntu runner. Keeps workers=1 per shard to avoid
DB deadlocks while reducing accumulated media load per machine.
Replace index-based --shard with weight-balanced Playwright projects so
light UI, media, and e2ee workloads do not clump. Prefer
MediaStreamTrackGenerator + VideoFrame for synthetic camera/screen so
headless Linux can encode frames; keep captureStream as fallback.
Add a prepare job that runs yarn build and SFU tsc once, then has each
shard restore those artifacts and only run bench build --app suite so
matrix jobs skip the expensive rebuild.
Stop overriding getUserMedia with canvas streams that stay live without
decoded frames on CI. Use Chrome's built-in fake capture for camera/mic
and only stub getDisplayMedia. Enable E2EE after peers already have
video so encryption does not leave the host as an undecodeable avatar.
Vite resolves benchRoot three levels above frontend/ and requires
sites/common_site_config.json. The prepare job builds outside a real
bench, so provide a minimal stub before yarn build.
bench get-app still ran yarn install and vite via esbuild --run-build-command
on every shard despite prepare artifacts. Pass --skip-assets so shards only
restore prepared frontend and run bench build --app suite to link.
Drop hardcoded project testMatch allow-lists. Matrix jobs run
--shard=N/3 so any new file under specs/ is included automatically.
Simplify the display-media stub and video asserts, drop deadlock-create
retries and extra Chrome flags, while retaining prepare artifacts,
--shard=N/3, fake camera device, and concurrent Promise.all joins.
Each shard installs and builds suite/SFU itself again. Prepare artifacts
did not save enough time to justify the extra wiring.
@BreadGenie BreadGenie changed the title ci(meet): stabilize video e2e ci(meet): run parallel e2e tests Jul 11, 2026
@BreadGenie BreadGenie merged commit dcb25dd into frappe:develop Jul 11, 2026
8 checks passed
@BreadGenie BreadGenie deleted the ci-e2e branch July 11, 2026 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant