From 40e3293d096a22118b34d1f9c3e1b6040a91c933 Mon Sep 17 00:00:00 2001 From: Hawkynt Date: Wed, 2 Sep 2026 15:46:09 +0200 Subject: [PATCH] * CI: give every job an explicit timeout-minutes Jobs without timeout-minutes inherit the GitHub default of 6 hours, so a wedged test or a hung screenshot capture occupies a runner for that long and queues everything behind it. Sizes come from the observed durations of successful runs, at roughly 2-2.5x each job's maximum with a floor of 15 minutes so a slow runner does not trip them. Jobs that delegate through `uses:` are left alone; a reusable-workflow call cannot carry timeout-minutes, the limit belongs on the jobs inside the called workflow. --- .github/workflows/_build.yml | 2 ++ .github/workflows/ci.yml | 1 + .github/workflows/generate.yml | 1 + .github/workflows/nightly.yml | 3 +++ .github/workflows/release.yml | 3 +++ 5 files changed, 10 insertions(+) diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml index 18965e2..9735942 100644 --- a/.github/workflows/_build.yml +++ b/.github/workflows/_build.yml @@ -45,6 +45,7 @@ env: jobs: build-exe: runs-on: ubuntu-latest + timeout-minutes: 15 outputs: cli-win-artifact: PhotoManager-CLI-win-x64-${{ inputs.version }} cli-linux-artifact: PhotoManager-CLI-linux-x64-${{ inputs.version }} @@ -138,6 +139,7 @@ jobs: pack-nuget: if: inputs.release-kind == 'release' runs-on: ubuntu-latest + timeout-minutes: 15 outputs: artifact-name: PhotoManagerCore-nupkg-${{ inputs.version }} steps: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afae9a9..5f705ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,7 @@ jobs: screenshots: name: README screenshots runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index 065c58d..5fe6269 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -27,6 +27,7 @@ jobs: screenshots: name: refresh README screenshots runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 8b89a5d..764e430 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -20,6 +20,7 @@ env: jobs: meta: runs-on: ubuntu-latest + timeout-minutes: 15 outputs: date: ${{ steps.m.outputs.date }} version: ${{ steps.m.outputs.version }} @@ -52,6 +53,7 @@ jobs: publish: needs: [meta, build] runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: @@ -98,6 +100,7 @@ jobs: prune: needs: publish runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0519261..f3e4205 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,6 +22,7 @@ jobs: version: needs: test runs-on: ubuntu-latest + timeout-minutes: 15 outputs: version: ${{ steps.v.outputs.version }} steps: @@ -46,6 +47,7 @@ jobs: # is a release in name only. Without this a rejected push still produced a green GitHub release. needs: [version, build, publish-nuget] runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 with: @@ -92,6 +94,7 @@ jobs: publish-nuget: needs: [version, build] runs-on: ubuntu-latest + timeout-minutes: 15 permissions: contents: read # Lets the job mint the short-lived OIDC token that nuget.org's Trusted Publishing exchanges