From 8e5c9d2b8e8657c9b2a7ddce75bfe6b5c9f9a857 Mon Sep 17 00:00:00 2001 From: smb Date: Sat, 5 Sep 2026 22:48:15 +0200 Subject: [PATCH 1/2] ci: bound how long a wedged job can run No job in the CI workflow declares timeout-minutes, so each one inherits GitHub's default of 360 minutes. That default is harmless while jobs finish, and expensive the moment one does not: issue #39 records the UI test job wedging with no output and no crash, and a wedged job in this configuration holds a runner for six hours before anything stops it. Each job now carries a limit with generous headroom over its observed duration - lint 18s under 10 minutes, the test matrix 32s to 1m17 under 15, swscale 2m37 under 20, and Windows 4m16 under 30. The values differ per job rather than being one shared number, because the spread between them is a factor of fourteen and a single limit would be either useless for lint or too tight for Windows. This does not fix #39. A hang still costs a rerun; it now costs minutes of runner time instead of a working day, and the failure arrives while the change that triggered it is still in front of someone. release.yml is deliberately left alone. Its packaging jobs compile a frozen bundle and build a media stack from source, and a limit guessed rather than measured would abort a real release. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a2499c3..bd6503b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,7 @@ permissions: jobs: lint: runs-on: ubuntu-22.04 + timeout-minutes: 10 env: QT_QPA_PLATFORM: offscreen steps: @@ -30,6 +31,7 @@ jobs: # status check referring to it silently stops being satisfied. name: test (${{ matrix.name }}) runs-on: ubuntu-22.04 + timeout-minutes: 15 env: QT_QPA_PLATFORM: offscreen strategy: @@ -63,6 +65,7 @@ jobs: swscale: runs-on: ubuntu-22.04 + timeout-minutes: 20 env: QT_QPA_PLATFORM: offscreen steps: @@ -85,6 +88,7 @@ jobs: # handling) are replaced by fakes in the suite above, so defects in them # reached users while every Linux job stayed green. runs-on: windows-2022 + timeout-minutes: 30 env: QT_QPA_PLATFORM: offscreen steps: From 4b1b00445ca3b5e22e502e2cd81e64553bb4a3e3 Mon Sep 17 00:00:00 2001 From: smb Date: Sat, 5 Sep 2026 23:02:11 +0200 Subject: [PATCH 2/2] ci: raise the limits to clear the slowest run on record The first values came from a single run and were too tight. Measured against every retained CI run instead - 151 runs, 946 jobs - the lint job once took 9.9 minutes against a limit of 10. That run is worth recording, because it is not what it looks like. Its dependency step, uv sync --locked --all-groups, took 9.6 minutes while every other job in the same run synced in 0.1 minutes, so the cache was warm and this was a one-off stall fetching packages. Across 946 sync steps the median is 4 seconds and exactly one exceeded two minutes. A genuinely cold cache does not appear in the window at all: the repository builds daily, so the cache never reaches its eviction age. The limits now allow the slowest run on record plus a ten-minute stall on the dependency step, which is the largest interruption this repository has actually observed: lint 20, the test matrix 20, swscale 25, Windows 30. Windows is unchanged; its 5.8 minute maximum is test execution rather than setup, and it had the headroom already. This still cuts a wedged job from six hours to twenty minutes. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd6503b..5f8cfbd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ permissions: jobs: lint: runs-on: ubuntu-22.04 - timeout-minutes: 10 + timeout-minutes: 20 env: QT_QPA_PLATFORM: offscreen steps: @@ -31,7 +31,7 @@ jobs: # status check referring to it silently stops being satisfied. name: test (${{ matrix.name }}) runs-on: ubuntu-22.04 - timeout-minutes: 15 + timeout-minutes: 20 env: QT_QPA_PLATFORM: offscreen strategy: @@ -65,7 +65,7 @@ jobs: swscale: runs-on: ubuntu-22.04 - timeout-minutes: 20 + timeout-minutes: 25 env: QT_QPA_PLATFORM: offscreen steps: