ci: bound every job, so a hang fails instead of idling - #14
Conversation
None of the four jobs had a `timeout-minutes`, so each inherited GitHub's six-hour default. That is what a test blocking on `accept()` with no deadline cost the Windows leg — six hours per run, and the only reason it went unnoticed for a day is that every run on `main` was cancelled by the next push before it could finish. Twenty minutes is not a budget; these legs take one to two minutes. It is a tripwire, set about ten times longer than anything here has ever needed. On all four rather than the one that broke. `installer` and `installer-windows` both stand up local servers in `test-install.sh` and `test-install.ps1` and could wedge exactly the same way, and a job that suddenly needs twenty minutes has something wrong with it worth hearing about whichever it is. The comment explaining this lives once, on `build`, where it happened.
20cea03 to
5f17b86
Compare
|
Rebased onto #13 and retargeted there, because this would otherwise have gone red for a reason worth explaining. It was branched from Now it sits on top of #13, so the hanging test is gone from the branch ( Order that matters, and it is not only about this PR: #13 has to land before required status checks are switched on. |
Carries the path-parameter encoding fix (#15) that's been sitting on this branch since it was cut, along with the CI timeout fix (#14), the private-repo doc de-linking (#16) and update-check version validation (#18) — none of which had reached main. See CHANGELOG.md for what 0.2.1 actually changes user-facing behavior.
Follow-up to #13, which fixes the test that hung. This stops the next hang costing six hours.
Why
None of the four jobs had a
timeout-minutes, so each inherited GitHub's six-hour default. That's what a test blocking onaccept()with no deadline cost the Windows leg — and the only reason it went unnoticed for a day is that every run onmainduring the 0.2.0 merges was cancelled by the next push before it could finish.Twenty minutes isn't a budget. These legs take one to two minutes; it's a tripwire set about ten times longer than anything here has ever needed.
On all four, not just Windows
installerandinstaller-windowsboth stand up local servers intest-install.shandtest-install.ps1, so they can wedge exactly the same way. And a Unix leg that suddenly needs twenty minutes has something wrong with it worth hearing about too.The reasoning lives once, on
build, where it actually happened.Related, and not fixable in a file
While checking whether this would have helped sooner, I found that neither repo requires any status check. Both are covered only by org-level rulesets —
Public Repo - Default Ruleshere,All Repo CodeOwner Reviewon the private side — and neither has arequired_status_checksrule.So it isn't that Windows specifically slipped through: nothing gates a merge on CI at all. The
pull_requestrule requires a review; nothing requires it to be green. That's why #5 merged with Windows unfinished.I tried to add a repo-level ruleset and got a 404 — I have
maintain, notadmin. It also can't be fixed by editing the org ruleset, which is shared across every public repo in the org. @mattpodwysocki has the exactgh apicall; it wants someone with admin on this repo.A timeout without required checks still lets a red leg merge, and required checks without a timeout means a hang blocks the queue for six hours. The pair is what actually closes it.