CI infra flake, 7 legs in one day across 3 PRs: MOTIR-2970 bounded `install-deps` but left the apt dependency — the durable fix is to stop using apt
Repo · motir-core (the pin is still refused on this tenant — see MOTIR-3078 / MOTIR-3086).
This is the re-shape card for MOTIR-2970's family, not a new defect. That card is done and its fix works exactly as designed. The class recurred anyway, seven times in one day.
What happens
##[warning]playwright install-deps attempt 1 TIMED OUT after 300s; clearing the apt it orphaned, retrying in 15s
##[warning]playwright install-deps attempt 2 TIMED OUT after 300s…
##[warning]playwright install-deps attempt 3 TIMED OUT after 300s…
##[error]playwright install-deps failed after 3 attempts
Step list, every time:
failure Run ./.github/actions/e2e-setup
skipped Run E2E (<leg>)
Zero tests execute. The leg burns ~17m40s (3 × 300 s + setup) and reports red on a diff it never touched.
Today's count — 2026-08-19
| PR | legs |
|---|---|
| #2151 | bulk-2, bulk-5, collab-at-scale |
| #2155 | board-at-scale |
| #2156 | a11y-2, bulk-4, collab-at-scale |
Seven, across three unrelated PRs, in one afternoon. Earlier occurrences on #2154, #2148, and on main itself, where it blocked the Fly deploy.
Why the two shipped mitigations cannot close it
Both are already in the repo and must not be proposed again:
- MOTIR-1679 removed the
packages.microsoft.comapt source. - MOTIR-2970 wrapped each attempt in
timeout 300s --kill-after=30s, turning a 6-hour job-budget wedge into a 15-minute failure.
Together they bounded the blast radius; neither removed the dependency on apt. What wedges now is the Ubuntu archive inside the apt-get update that playwright install-deps shells out to, and no retry count fixes an unavailable mirror. A third retry, a longer timeout or a different mirror list are all the same move again.
The options — this needs a decision, not a patch
Both change how every PR's E2E legs run, which is why this is a card and not a drive-by.
- (a) Run the legs in
mcr.microsoft.com/playwright:v<ver>-noble. The browser dependencies ship in the image, soinstall-depsis not called at all and there is no apt step to wedge. Costs: the container image must track the Playwright version pinned inpackage.json(a drift guard is cheap and this repo likes them), and anything the legs currently get from the runner image has to be checked against the container. - (b) Skip
install-depson a browser-cache hit. Smaller change, keeps the runner image, and removes the apt call on the common path only — a cache miss still wedges. Cheaper to land, does not close the class.
(a) closes it; (b) narrows it. Recommend (a), with the version pin asserted rather than commented.
Acceptance criteria
- No E2E leg invokes
playwright install-depson the common path — asserted by a guard over.github/, not by reading the workflow once. - The Playwright version the legs run under is pinned to
package.json's and a mismatch fails the build. - One full CI run green with the new lane, and the per-leg wall-clock recorded on this card before/after (the current legs are 5–18 min; a container start should not make that worse).
docs/(or the workflow's own header) states which mitigation is in force, so the next person does not re-propose MOTIR-1679's or MOTIR-2970's.
Context refs
.github/actions/e2e-setup/action.yml— the retry loop MOTIR-2970 added..github/workflows/ci.yml— the E2E matrix and itsruns-on.- MOTIR-2970 (the timeout), MOTIR-1679 (the apt source) — the two fixes this supersedes rather than repeats.