Conversation
|
The failing
The last eight Two ways out, whichever you prefer: add |
|
Correction to my previous comment: the fix already exists, so there is nothing to open separately.
That is why every I am deliberately not duplicating the install step here — it would conflict with #1. This check goes green once #1 merges. For the record, four scripts depend on a developer toolbelt the |
be6395a to
33bd964
Compare
GitHub's default job cap is six hours. The publish job in reusable-deploy.yml ran 81.6 minutes against a 1.24-minute median before configure-aws-credentials failed (run 34052068554); publish-root has a milder 11-minute instance. Values are 2.5x p95 or 1.2x the observed maximum, whichever is larger, rounded up to five minutes with a ten-minute floor.
Seven ports write a redirect to /reference/<slug>/ at <port>/<version>/api/. py is excluded because that path is real gp-sphinx output, the oracle check-style-parity.mjs measures against. But when upstream's checkout is missing the Sphinx build is skipped and nothing is written there at all, while the port index still links to it: 58 broken links to /en/py/latest/api/ on every runner, since ~/work/python/libtmux never exists in CI. Fall back to the same redirect when the reference is not built. With the checkout present the Sphinx output still wins, so the oracle is untouched.
33bd964 to
8833d2b
Compare
Three commits: a timeout on every job, plus the two CI fixes this branch needs to be able to prove itself.
Bound every job with a timeout
GitHub's default job cap is six hours. Nothing here bounds a job that stops making progress, and one already has:
reusable-deploy.yml'spublishran 81.6 minutes and then failed inRun aws-actions/configure-aws-credentials@v6(run 34052068554), against a 1.24-minute median across its other September runs.publish-rootshows a milder 11-minute instance against a 0.4-minute median.This does not make CI faster and is not meant to.
timeout-minutesis inert until a job overruns; measured across this series, job execution time is unchanged. What improves is time-to-signal on the pathological path: a hungpublishnow fails in ten minutes instead of eighty-one, and the six-hour ceiling stops being reachable at all.Values are derived per job rather than chosen —
2.5x p95or1.2xthe observed maximum, whichever is larger, rounded up to five minutes with a ten-minute floor. Observations above five times the median are dropped as hangs, unless three or more sibling jobs in the same run are also slow, which is a cold cache rather than a hang.deploy-shell.ymllocalesdeploy-shell.ymlbuilddeploy-shell.ymlpublish-rootpr-preview-cleanup.ymlcleanupreusable-deploy.ymlpublishtest.ymltestcleanupnever fired in August or September, so its fifteen minutes is a default rather than a measurement — worth a second look.Getting this branch to a state where it can prove itself
test.ymlhas never passed onmain— all fourteen runs failed. It is broken in three independent ways, and this branch fixes the first two by cherry-picking the exact commits fromtrim-docs-wording(#1), so whichever lands first the other merges without conflict.ba976d3ande04d323(from4be0786and99e30e8) install the audit tools. Four scripts shell out to a developer toolbelt theubuntu-latestimage does not ship:scripts/check-palette.mjs,scripts/check-xrefs.mjsandscripts/normalise-parity.mjscallrg, andscripts/gen-mcp-tools.mjscallsfd. Without them the job died withspawnSync rg ENOENTbefore reaching anything this branch touches.5cf2f77(from0f9d218) makes the example-sources negative test build its own fixture checkouts in a temp directory and point the generator at them throughLIBTMUX_DOCS_CHECKOUT_<PORT>. Previously it depended on sibling port clones existing on the machine, so on a runner the generator found nothing, the staleness check passed vacuously, and the negative test correctly reported that the gate could not fail. Verified locally: all three cases now pass.The third failure is not fixed here and should not be. The link check reports one broken target,
/en/py/latest/api/, linked 58 times fromen/py/index.html. That route comes from the site rewrite on #1, which touches 33 files undersite/src/includingreference/[...slug].astro. Fixing it here would mean absorbing most of a 63-commit branch into a CI-bounds change.So this pull request still shows
testred. That is pre-existing onmain, it is two layers better than it was, and it goes green when #1 merges. What is deliberately not carried over is #1's switch frompnpm testtopnpm test:publication— on that branchtest:publicationis the same./scripts/test-all.shthis branch already runs, so the rename would change nothing here while conflicting with #1.Unchanged on purpose
Concurrency is already correct in this repository.
deploy-shell.ymlandpr-preview-cleanup.ymlusequeue: max, which serialises deploys rather than killing them mid-publish, and that is the right choice for a deploy.The credential hang itself is also untouched. A timeout caps the bleeding at ten minutes; it does not explain why the OIDC exchange hangs rather than failing fast. The failing run was a same-repo pull request, so a token was available to it — which points at the trust policy rather than at a missing token.