What is wrong
.github/workflows/ci.yml declares timeout-minutes: 20 for a job that now finishes in about 35
seconds. A ceiling 30-odd times the real runtime is not a guard — it will not catch a regression
that takes the job from 35 seconds to five minutes, which is exactly the kind of regression this
repo has already had twice.
Why it is 20, and why that reason is gone
I raised it myself in #77, and the justification was accurate at the time: the job was being killed
at the old timeout-minutes: 10 while bunx playwright install-deps chromium crawled through an
apt fetch (measured: 150 kB/s, one attempt failing outright with exit 100, one run cancelled at
10m17s). 20 was chosen to fit a full failed-then-retried apt cycle.
That cause no longer exists. The same PR removed the apt path entirely — the install now pulls the
browser from Playwright's CDN over HTTPS using the repo-pinned playwright-core CLI. Post-merge
timings on run 34584382386:
install chromium 7s
verify chromium launches <1s
test 13s
build 1s
whole job ~35s
So the ceiling is now sized for a code path that was deleted.
What to do
Bring timeout-minutes down to something that still tolerates a cold CDN fetch and a slow 2-vCPU
runner, but would actually fire on a real regression. Pick the number from measurement, not from
comfort, and say in the PR body what you measured and what headroom you left.
Two things to keep in mind rather than optimise away:
- The install step retries up to 3 times with 20s/40s backoff and a 300s per-attempt
timeout, so
the worst legitimate case is meaningfully longer than the happy path. The ceiling must fit that
worst case or a transient CDN hiccup becomes a red build.
- A cold cache is slower than a warm one. The happy-path 35s is with the Playwright cache hitting.
Acceptance criteria
Notes
Small and low-risk, but it restores a guard that currently detects nothing. Found while repairing
this repo's CI in #77.
What is wrong
.github/workflows/ci.ymldeclarestimeout-minutes: 20for a job that now finishes in about 35seconds. A ceiling 30-odd times the real runtime is not a guard — it will not catch a regression
that takes the job from 35 seconds to five minutes, which is exactly the kind of regression this
repo has already had twice.
Why it is 20, and why that reason is gone
I raised it myself in #77, and the justification was accurate at the time: the job was being killed
at the old
timeout-minutes: 10whilebunx playwright install-deps chromiumcrawled through anapt fetch (measured: 150 kB/s, one attempt failing outright with
exit 100, one run cancelled at10m17s). 20 was chosen to fit a full failed-then-retried apt cycle.
That cause no longer exists. The same PR removed the apt path entirely — the install now pulls the
browser from Playwright's CDN over HTTPS using the repo-pinned
playwright-coreCLI. Post-mergetimings on run 34584382386:
So the ceiling is now sized for a code path that was deleted.
What to do
Bring
timeout-minutesdown to something that still tolerates a cold CDN fetch and a slow 2-vCPUrunner, but would actually fire on a real regression. Pick the number from measurement, not from
comfort, and say in the PR body what you measured and what headroom you left.
Two things to keep in mind rather than optimise away:
timeout, sothe worst legitimate case is meaningfully longer than the happy path. The ceiling must fit that
worst case or a transient CDN hiccup becomes a red build.
Acceptance criteria
timeout-minutesis reduced, and the PR body states the measured job duration and the headroomthe new value leaves over the worst legitimate case (3 retries at the 300s per-attempt cap)
timeoutininstall chromiumare left alone; thisissue is about the ceiling only
Notes
Small and low-risk, but it restores a guard that currently detects nothing. Found while repairing
this repo's CI in #77.