The frontend suite's 5s default timeout is a release blocker, not a safety net #151
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Severity: MEDIUM — it has now failed a release
Filed after the fact, because the fix is already in (
fddc0ba) and the references invite.config.tsand the changelog needed somewhere real to point.What happened
Two different tests have timed out at vitest's 5000ms default on a contended CI runner and passed on a re-run of the same commit:
PhotoBrowserPage.test.tsx:460— the virtualizer windowing test. CI run 73. Fixed in #147 with a per-test timeout.ReviewWorkspacePage.test.tsx:243— "names the reviewer who got there first and what they decided". CI run 85.Neither test is slow. Both runs reported more time inside
teststhan the whole run took in wall clock — run 73:tests 121.07sagainst88.93s; run 85:tests 46.37sagainst31.87s. That is a runner sharing its cores with something else, not a test doing more work than it should.Why it is worth more than its size
publishgates on the frontend job (needs: [backend, frontend, e2e]). So a timing flake on a tag push means no image is built — and because the run fails rather than the publish step, the symptom is a version tag that exists with nothing behind it in the registry.That is exactly what happened to v0.3.3: tagged, frontend flaked,
publishnever ran, and the deployment's pin pointed at an image that did not exist. The tag had to be moved onto the fix.What was done, and the judgement that was wrong
#147 considered three options and put "raise
testTimeoutglobally" last, arguing it was the least targeted and would slow the feedback on a genuinely hung test. That reasoning is sound in isolation and did not survive contact with a second instance: the per-test timeout fixed one test and not the cause, and the cause then cost a release.testTimeoutis now 20s globally (frontend/vite.config.ts). The trade is small and the asymmetry is the point:#147's per-test timeout is deliberately left in place. It carries the explanation of why that particular fixture is six hundred photographs, which is worth keeping whatever the global default is.
If this recurs anyway
A 20s budget on a runner that stalls for longer is still a flake, just a rarer one. The next lever is not a bigger number — it is finding out why the runner is contended, since the same host builds the images and runs the backend and e2e suites, and a tag push starts all of them plus a Docker build. Worth looking at
forgejo-runner-ansiblein iac-repo before raising this again.References
frontend/vite.config.ts— the setting and its reasoning