From bfd2690a8535ffb2dd24131b363343f3b73702b1 Mon Sep 17 00:00:00 2001 From: AminDhouib Date: Tue, 15 Sep 2026 20:24:47 -0400 Subject: [PATCH] ci: add per-job timeout-minutes to the CI workflow Every job in this repository could previously run until the GitHub 6 h ceiling. A hung job therefore held a runner slot for hours. Each job now carries an explicit timeout-minutes. Rule: the budget is 3 x the job's observed p90 duration, rounded up to the nearest 5 minutes. Where 72 h of run history contains no completed sample for a job, the class default for that job's class is used instead. Every job below falls in the second case. .github/workflows/ci.yml roundtrip 30 class default (other), unobserved cross-job 30 class default (other), unobserved unit 20 class default (unit-test), unobserved The roundtrip matrix runs on three operating systems; the timeout is per matrix leg, not per workflow, so 30 minutes bounds each leg. No concurrency change: ci.yml already declares a workflow-level concurrency group with cancel-in-progress. Job names, job count and workflow triggers are unchanged. --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4d94417..ad32e1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,7 @@ jobs: roundtrip: name: roundtrip (${{ matrix.os }}) runs-on: ${{ matrix.os }} + timeout-minutes: 30 strategy: fail-fast: false # GitHub-hosted only. This repository is public, and the org's only @@ -144,6 +145,7 @@ jobs: # fetch artifacts uploaded by *other* jobs on *other* operating systems, # which does not depend on where this job itself runs. runs-on: ubuntu-latest + timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Download every single-* artifact from all OSes @@ -163,6 +165,7 @@ jobs: # Pure-python, mocks subprocess: no network, no mc, no OIDC, no runner pool. name: unit tests runs-on: ubuntu-latest + timeout-minutes: 20 steps: - uses: actions/checkout@v4 - name: Run unit tests