From fc74a812b31718a596e91af73e5a080bcaf7d4ce Mon Sep 17 00:00:00 2001 From: Peter Sprygada Date: Sun, 16 Aug 2026 09:41:28 -0400 Subject: [PATCH] ci: cap every CI job with timeout-minutes Lint hung for 6 hours on PR 411 (apt-get stalling against a flaky mirror) until GitHub's default 360-minute job timeout finally killed it, and because test-e2e needs lint, it sat SKIPPED the whole time too. No job here previously set an explicit cap, so any future hang anywhere blocks a PR for hours before anyone notices instead of failing fast. Caps are generous relative to observed run times (Build ~2m, Unit Tests ~1.5m, Unit Tests (root) ~1m, Lint ~3m, E2E ~5m): 15 minutes for lint/build/unit jobs, 25 for e2e. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/ci.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0aed497..fd03752 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,6 +27,11 @@ jobs: lint: name: Lint runs-on: ubuntu-latest + # Without an explicit cap, a hung step (e.g. apt-get stalling against a + # flaky mirror -- observed hanging the whole job against GitHub's + # default 360-minute job timeout) blocks the PR for hours instead of + # failing fast; every job below gets the same treatment. + timeout-minutes: 15 steps: - uses: actions/checkout@v7 @@ -50,6 +55,7 @@ jobs: test-unit: name: Unit Tests runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v7 @@ -97,6 +103,7 @@ jobs: test-unit-root: name: Unit Tests (root) runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v7 @@ -153,6 +160,7 @@ jobs: build: name: Build runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v7 @@ -185,6 +193,7 @@ jobs: name: E2E Tests runs-on: ubuntu-latest needs: [lint, test-unit, test-unit-root, build] + timeout-minutes: 25 steps: - uses: actions/checkout@v7