Hardens CI against the self-hosted Windows runner stall (a docs-only PR — the changelog #107 — got stuck because the Windows job sat in "Waiting to run" behind an offline runner).
Two fixes
paths-ignore: ["**/*.md"] on push + pull_request — a pure-docs PR no longer triggers the test matrix, so it can't wedge behind the Windows runner. Mixed code+docs PRs still run everything.
timeout-minutes per job (lint 10 / test 15 / catalog 10) — a job that hangs mid-run fails instead of hanging forever.
Honest scope
timeout-minutes counts from when a runner picks up the job, so it does not rescue a job stuck "Waiting to run" because the Windows runner is offline; paths-ignore covers the docs case, and code PRs still need the runner up. If you'd rather Windows never block, I can add continue-on-error — say the word.
Caveat
If the repo has branch-protection required checks by name, a docs-only PR (now runs no jobs) could show pending and block; if so we switch to the always-runs-stub pattern. This PR edits ci.yml (not docs), so it runs the full matrix itself.
Hardens CI against the self-hosted **Windows runner** stall (a docs-only PR — the changelog #107 — got stuck because the Windows job sat in "Waiting to run" behind an offline runner).
## Two fixes
1. **`paths-ignore: ["**/*.md"]`** on `push` + `pull_request` — a pure-docs PR no longer triggers the test matrix, so it can't wedge behind the Windows runner. Mixed code+docs PRs still run everything.
2. **`timeout-minutes`** per job (lint 10 / test 15 / catalog 10) — a job that hangs *mid-run* fails instead of hanging forever.
## Honest scope
`timeout-minutes` counts from when a runner *picks up* the job, so it does not rescue a job stuck "Waiting to run" because the Windows runner is offline; `paths-ignore` covers the docs case, and code PRs still need the runner up. If you'd rather Windows never block, I can add `continue-on-error` — say the word.
## Caveat
If the repo has branch-protection *required* checks by name, a docs-only PR (now runs no jobs) could show pending and block; if so we switch to the always-runs-stub pattern. This PR edits `ci.yml` (not docs), so it runs the full matrix itself.
- paths-ignore '**/*.md' on push/pull_request so a CHANGELOG/README-only PR
doesn't spin up the (self-hosted, sometimes-offline) Windows test job.
- timeout-minutes on lint (10) / test (15) / catalog-signature (10) so a job
that hangs mid-run fails instead of hanging forever.
Note: timeout-minutes counts from job start, so it does not rescue a job stuck
'Waiting to run' when the Windows runner is offline — paths-ignore covers the
docs case; code PRs still need the runner up.
the_og
merged commit 675490e3c3 into main2026-08-13 12:53:23 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Hardens CI against the self-hosted Windows runner stall (a docs-only PR — the changelog #107 — got stuck because the Windows job sat in "Waiting to run" behind an offline runner).
Two fixes
paths-ignore: ["**/*.md"]onpush+pull_request— a pure-docs PR no longer triggers the test matrix, so it can't wedge behind the Windows runner. Mixed code+docs PRs still run everything.timeout-minutesper job (lint 10 / test 15 / catalog 10) — a job that hangs mid-run fails instead of hanging forever.Honest scope
timeout-minutescounts from when a runner picks up the job, so it does not rescue a job stuck "Waiting to run" because the Windows runner is offline;paths-ignorecovers the docs case, and code PRs still need the runner up. If you'd rather Windows never block, I can addcontinue-on-error— say the word.Caveat
If the repo has branch-protection required checks by name, a docs-only PR (now runs no jobs) could show pending and block; if so we switch to the always-runs-stub pattern. This PR edits
ci.yml(not docs), so it runs the full matrix itself.