From 66559b141a2e5e2794022a1bea4373b477f1c552 Mon Sep 17 00:00:00 2001 From: ruv Date: Mon, 6 Jul 2026 21:30:40 -0400 Subject: [PATCH] ci: add timeout-minutes to every matrix job so a hung job can't block merges for 6h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CI matrix jobs had no `timeout-minutes`, so they inherit GitHub's 360-minute (6h) default. When a Windows `cargo test` ran slow/stuck, it left every open PR un-mergeable with no fail-fast signal — you couldn't tell a hung job from a slow one, and nothing would end it short of the 6h cap. Adds a generous per-job ceiling, set well above each job's observed duration so a legitimately-slow run never false-fails, while a genuinely-hung one fails fast enough to rerun: - rust: 90 (observed worst ~45min on Windows) - wasm: 45 - node / pack-install: 30 - bench: 20 Config-only; no gate is weakened (a timeout only bounds runtime). YAML validated (all 6 jobs parse). Co-Authored-By: claude-flow --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f7e5f03..51f2657f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,10 @@ jobs: rust: name: Rust / ${{ matrix.os }} runs-on: ${{ matrix.os }} + # No CI job should be able to hang for the 6h GitHub default — a slow/stuck Windows `cargo test` + # once blocked every open PR from merging. Generous ceiling (observed worst ~45min) that fails a + # genuinely-hung job fast enough to rerun, without false-failing a legitimately-slow run. + timeout-minutes: 90 strategy: fail-fast: false matrix: @@ -64,6 +68,7 @@ jobs: wasm: name: WASM / ${{ matrix.os }} runs-on: ${{ matrix.os }} + timeout-minutes: 45 strategy: fail-fast: false matrix: @@ -117,6 +122,7 @@ jobs: node: name: Node ${{ matrix.node }} / ${{ matrix.os }} runs-on: ${{ matrix.os }} + timeout-minutes: 30 needs: [wasm] strategy: fail-fast: false @@ -177,6 +183,7 @@ jobs: pack-install: name: pack+install / ${{ matrix.os }} runs-on: ${{ matrix.os }} + timeout-minutes: 30 needs: [node] strategy: fail-fast: false @@ -204,6 +211,7 @@ jobs: bench: name: Bench (smoke) runs-on: ubuntu-latest + timeout-minutes: 20 needs: [node] steps: - uses: actions/checkout@v4