ci(meet): run parallel e2e tests#194
Merged
Merged
Conversation
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.
Contributor
Confidence Score: 5/5Safe 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 No files require special attention. Reviews (11): Last reviewed commit: "ci(meet): drop prepare job; keep sharded..." | Re-trigger Greptile |
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.
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.
No description provided.