Repo: motir-core (.github/actions/e2e-setup/action.yml). The THIRD attack on one flake, and the first that removes it rather than surviving it.
| MOTIR-1679 | removed the packages.microsoft.com apt sources — killed the broken-InRelease variant |
| MOTIR-2970 | added timeout 300s per attempt — turned a 6-hour job-budget hang into a ~17-minute clean failure |
Each made the flake survivable. Neither made it stop, because both keep treating apt as something to get through. Observed three times on 2026-08-19 on PR #2145 alone (runs 32269024982 ×2, 32269025316, 32276806034), each identical:
Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [144 B]
##[warning]playwright install-deps attempt N TIMED OUT after 300s; clearing the apt it orphaned
##[error]playwright install-deps failed after 3 attempts
The job dies in SETUP — no spec runs, no assertion is evaluated — and it costs 3 × 300 s per affected leg.
"the OS apt deps aren't cacheable, so we still run install-deps on a hit (fast) and the full
--with-depsdownload only on a miss."
That cache-hit step is defensive: Chromium's OS dependencies ship on the GitHub ubuntu-24.04 runner image. And it is the only thing in the E2E path that touches apt at all. So the fix is not another retry — it is to stop running apt when nothing needs installing.
install-deps entirely — apt is never touched on the happy path, and the class disappears rather than getting a fourth mitigation.::warning::. A browser that does not is still a hard failure — that distinction is what keeps a genuinely missing library fatal.--with-deps on a miss is the correct download and is not the failing case.⚠️ Do NOT raise the retry count or the timeout. That is the move already made twice; it lowers probability and leaves the class.
Running these jobs in mcr.microsoft.com/playwright:<version>-noble removes apt by construction and is the industry-standard answer. It is held in reserve because this repo has no container: jobs today, and moving there changes how the Postgres service action, the shared build artifact and the ~/.cache/ms-playwright cache are reached — a large blast radius on a path every PR depends on. Adopt it if the probe proves insufficient; the repo already mirrors images through mirror.gcr.io (.github/actions/postgres/action.yml), so the pull path is understood.
install-deps is NOT executed, shown from the job log.--with-deps.tests/ci-*-lane.test.ts-style guards covering this action are extended to the new arrangement, so the probe cannot be dropped silently later.motir-meta records the outcome so the next occurrence is measured against a fix rather than re-diagnosed..github/actions/e2e-setup/action.yml — the cache step (~line 82), its "aren't cacheable" comment, the install-deps retry loop (~line 191).github/actions/postgres/action.yml — the existing mirror.gcr.io pull-through practicemotir-meta memory motir-core-ci-e2e-flake-log — this flake's running record