ci(e2e): run the web, iOS, and Android e2e suites on GitHub Actions
Merged
KA
1d ago+144+144+012345678901234567890123456789-1-1-0123456789
.github/workflows/e2e.ymlruns the suite on every pull request and push tomain, one job per target:
| Job | Runner | Build | Device |
|---|---|---|---|
web | ubuntu-latest | none, the target starts Metro | Chromium |
ios | macos-26 | expo run:ios --configuration Release --device generic --no-bundler | iPhone 17 Pro on iOS-26-5 |
android | ubuntu-latest (KVM) | expo prebuild + gradlew :app:assembleRelease | API 36 emulator, pixel_7 |
ios/andandroid/are generated, so each mobile job prebuilds them. Release builds bundle their JS, so they don't depend on Metro.- The iOS runtime is pinned to 26.5, the version the replay cache was recorded on. The runner image already has a simulator named
iPhone 17 Proon its default runtime, so the job passes its own simulator's UDID to theiostarget:
engine: mobile({ platform: 'ios', device: process.env.E2E_IOS_DEVICE || 'iPhone 17 Pro' }),
- Mobile jobs run with
--workers 1(one device each). Each job uploads.e2e/even when tests fail. - Reads one secret:
AI_GATEWAY_API_KEY.
Verified
Ran it locally: no - CI-only change; the workflow runs on this PR.