ci(e2e): converge the matrix e2e job on the e2e-preview manual-boot pattern (definitive boot-race fix) #218

Closed
opened 2026-07-03 15:21:38 +00:00 by JMR-dev · 0 comments
JMR-dev commented 2026-07-03 15:21:38 +00:00 (Migrated from github.com)

Source: API-29 E2E flake investigation — definitive fix (follow-up to the quick-unblock retry ticket).

The matrix e2e job (.github/workflows/ci.yml:193-202) delegates emulator boot to reactivecircus/android-emulator-runner, whose post-boot adb shell input keyevent 82 is un-guarded and fatal — it races system_server on snapshot resume (full diagnosis: run 28667366203). The e2e-preview (API 37) job is immune because it boots manually and guards adb shell input keyevent 82 || true (ci.yml:300-303) with a boot-retry loop.

Definitive fix: converge the matrix e2e job on the e2e-preview manual-boot pattern — a bounded adb wait-for-device + sys.boot_completed loop with boot retry, keyevent 82 || true, and a readiness gate (e.g. pm path android succeeds / init.svc.bootanim = stopped) before any adb shell input / disable-animations call. Removes the fatal keyevent entirely and unifies both E2E jobs on one proven boot path. Lets the retry from the quick-unblock ticket be removed.

**Source:** API-29 E2E flake investigation — definitive fix (follow-up to the quick-unblock retry ticket). The matrix `e2e` job (`.github/workflows/ci.yml:193-202`) delegates emulator boot to `reactivecircus/android-emulator-runner`, whose post-boot `adb shell input keyevent 82` is un-guarded and fatal — it races `system_server` on snapshot resume (full diagnosis: run 28667366203). The `e2e-preview` (API 37) job is immune because it boots manually and guards `adb shell input keyevent 82 || true` (`ci.yml:300-303`) with a boot-retry loop. **Definitive fix:** converge the matrix `e2e` job on the `e2e-preview` manual-boot pattern — a bounded `adb wait-for-device` + `sys.boot_completed` loop with boot retry, `keyevent 82 || true`, and a readiness gate (e.g. `pm path android` succeeds / `init.svc.bootanim = stopped`) before any `adb shell input` / `disable-animations` call. Removes the fatal keyevent entirely and unifies both E2E jobs on one proven boot path. Lets the retry from the quick-unblock ticket be removed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JMR-dev/LibreMail#218