From 7fb2ad266e7765ba4bfe41dbb94bcb3a00d0c25a Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Wed, 29 Jul 2026 01:07:00 +0200 Subject: [PATCH] =?UTF-8?q?ci:=20a=20newer=20push=20supersedes=20the=20que?= =?UTF-8?q?ued=20run=20=E2=80=94=20concurrency=20groups=20everywhere?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every push-triggered workflow now declares concurrency: { group: workflow+ref, cancel-in-progress: true } A busy push cadence on main was stacking ~10 queued runs per commit — the fleet was 110 runs behind tonight — while only the newest commit's canary matters. Now each new push cancels the superseded queued/running run of the same workflow. Release tags are unaffected: every tag is its own ref, so tag runs never cancel each other. Gitea honors this for push triggers (PR triggers don't cancel yet: gitea#35933). Co-Authored-By: Claude Fable 5 --- .gitea/workflows/android-screenshots.yml | 8 ++++++++ .gitea/workflows/android.yml | 8 ++++++++ .gitea/workflows/apple.yml | 8 ++++++++ .gitea/workflows/arch.yml | 8 ++++++++ .gitea/workflows/audit.yml | 8 ++++++++ .gitea/workflows/ci.yml | 8 ++++++++ .gitea/workflows/deb.yml | 8 ++++++++ .gitea/workflows/decky.yml | 8 ++++++++ .gitea/workflows/docker.yml | 8 ++++++++ .gitea/workflows/flatpak.yml | 8 ++++++++ .gitea/workflows/linux-client-screenshots.yml | 8 ++++++++ .gitea/workflows/plugin-kit-publish.yml | 8 ++++++++ .gitea/workflows/release.yml | 8 ++++++++ .gitea/workflows/rpm.yml | 8 ++++++++ .gitea/workflows/sbom.yml | 8 ++++++++ .gitea/workflows/sdk-publish.yml | 8 ++++++++ .gitea/workflows/web-screenshots.yml | 8 ++++++++ .gitea/workflows/windows-drivers.yml | 8 ++++++++ .gitea/workflows/windows-host.yml | 8 ++++++++ .gitea/workflows/windows-msix.yml | 8 ++++++++ .gitea/workflows/windows.yml | 8 ++++++++ 21 files changed, 168 insertions(+) diff --git a/.gitea/workflows/android-screenshots.yml b/.gitea/workflows/android-screenshots.yml index 4df40dc1..eb6caffe 100644 --- a/.gitea/workflows/android-screenshots.yml +++ b/.gitea/workflows/android-screenshots.yml @@ -4,6 +4,14 @@ # `screenshots` job, gated to STABLE RELEASE tags only. Standalone + best-effort: a failure here # reds nothing else. PNGs land as a 30-day artifact; not committed or published. name: android-screenshots +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/android.yml b/.gitea/workflows/android.yml index 8a1f50fe..5e4bba23 100644 --- a/.gitea/workflows/android.yml +++ b/.gitea/workflows/android.yml @@ -8,6 +8,14 @@ # ci/rust-ci.Dockerfile. Emulator instrumentation tests are deferred until a KVM-capable runner # exists (they self-skip otherwise, like apple.yml's RemoteFirstLightTests). name: android +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/apple.yml b/.gitea/workflows/apple.yml index b1878bb7..89a500f8 100644 --- a/.gitea/workflows/apple.yml +++ b/.gitea/workflows/apple.yml @@ -8,6 +8,14 @@ # them to the run as a single zip artifact (`punktfunk-appstore-screenshots`). It is isolated # from the build/test job and best-effort, so a capture gap never reds the core signal. name: apple +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/arch.yml b/.gitea/workflows/arch.yml index 5a5d635e..01cd8cd3 100644 --- a/.gitea/workflows/arch.yml +++ b/.gitea/workflows/arch.yml @@ -14,6 +14,14 @@ # NOTE: this token + the registry-held private key are the trust root — a token holder can # publish a validly-signed package (the signature attests "via the registry", not "built by CI"). name: arch +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/audit.yml b/.gitea/workflows/audit.yml index b19398b7..a7477233 100644 --- a/.gitea/workflows/audit.yml +++ b/.gitea/workflows/audit.yml @@ -19,6 +19,14 @@ # change, and on demand. # To silence a known-unfixable Rust advisory, add it to `.cargo/audit.toml` ([advisories] ignore=[…]). name: audit +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: schedule: diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 4fafe9d7..564c0825 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -3,6 +3,14 @@ # PipeWire, GL/GBM, libcuda link stub, pinned-channel rustup) so the workspace links the # same libs as the dev boxes. Apple client CI lives in apple.yml (macOS runner). name: ci +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/deb.yml b/.gitea/workflows/deb.yml index 44456a6c..078b4e07 100644 --- a/.gitea/workflows/deb.yml +++ b/.gitea/workflows/deb.yml @@ -23,6 +23,14 @@ # # REGISTRY_TOKEN: repo Actions secret, a PAT with write:package scope (shared with docker.yml). name: deb +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/decky.yml b/.gitea/workflows/decky.yml index 658c1ca5..fa7e0073 100644 --- a/.gitea/workflows/decky.yml +++ b/.gitea/workflows/decky.yml @@ -20,6 +20,14 @@ # # REGISTRY_TOKEN: repo Actions secret, a PAT with write:package scope (shared with deb/rpm/docker). name: decky +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 58524137..e58b7d98 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -13,6 +13,14 @@ # the same push, ci.yml builds against the PREVIOUS image. All three were seeded manually # on 2026-06-12. name: docker +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/flatpak.yml b/.gitea/workflows/flatpak.yml index 58378b8d..50257803 100644 --- a/.gitea/workflows/flatpak.yml +++ b/.gitea/workflows/flatpak.yml @@ -19,6 +19,14 @@ # # REGISTRY_TOKEN: repo Actions secret, a PAT with write:package scope (shared with deb/rpm/docker). name: flatpak +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/linux-client-screenshots.yml b/.gitea/workflows/linux-client-screenshots.yml index 700926c0..0ed1e177 100644 --- a/.gitea/workflows/linux-client-screenshots.yml +++ b/.gitea/workflows/linux-client-screenshots.yml @@ -5,6 +5,14 @@ # Standalone + best-effort: a failure here reds nothing else. PNGs land as a 30-day # artifact; they are not committed or published. name: linux-client-screenshots +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/plugin-kit-publish.yml b/.gitea/workflows/plugin-kit-publish.yml index 0e0e7271..d06f8b45 100644 --- a/.gitea/workflows/plugin-kit-publish.yml +++ b/.gitea/workflows/plugin-kit-publish.yml @@ -9,6 +9,14 @@ # # Auth: REGISTRY_TOKEN — the same repo Actions secret sdk-publish.yml uses. name: plugin-kit-publish +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index f4c4cce8..4f90ca76 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -56,6 +56,14 @@ # picks the first non-beta /Applications/Xcode*.app and only falls back to a beta with a # loud warning. name: release +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/rpm.yml b/.gitea/workflows/rpm.yml index 20f7fd14..424be65f 100644 --- a/.gitea/workflows/rpm.yml +++ b/.gitea/workflows/rpm.yml @@ -9,6 +9,14 @@ # # REGISTRY_TOKEN: repo Actions secret, a PAT with write:package scope (shared with docker.yml). name: rpm +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/sbom.yml b/.gitea/workflows/sbom.yml index 07ace739..3e2dabac 100644 --- a/.gitea/workflows/sbom.yml +++ b/.gitea/workflows/sbom.yml @@ -11,6 +11,14 @@ # both Rust workspaces + the JS trees + Swift Package.resolved) merged with # compliance/sbom/manual-components.cdx.json (vendored C/C++, bundled DLLs, VB-CABLE, gamescope). name: sbom +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/sdk-publish.yml b/.gitea/workflows/sdk-publish.yml index 9aaa5b9d..25300f73 100644 --- a/.gitea/workflows/sdk-publish.yml +++ b/.gitea/workflows/sdk-publish.yml @@ -7,6 +7,14 @@ # Auth: REGISTRY_TOKEN — the same repo Actions secret docker.yml uses (a Gitea PAT with # write:package scope). No new secret needed. name: sdk-publish +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/web-screenshots.yml b/.gitea/workflows/web-screenshots.yml index d9f10ff7..57f29873 100644 --- a/.gitea/workflows/web-screenshots.yml +++ b/.gitea/workflows/web-screenshots.yml @@ -6,6 +6,14 @@ # host packaging). Best-effort: a standalone workflow, so a failure here reds # nothing else. PNGs land as a 30-day artifact; they are not committed or published. name: web-screenshots +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/windows-drivers.yml b/.gitea/workflows/windows-drivers.yml index eb9ed7a7..ca74f3c2 100644 --- a/.gitea/workflows/windows-drivers.yml +++ b/.gitea/workflows/windows-drivers.yml @@ -11,6 +11,14 @@ # shell: pwsh deliberately (PowerShell 5.1's Out-File -Encoding utf8 prepends a BOM that corrupts the # first GITHUB_ENV line — see windows.yml). name: windows-drivers +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: workflow_dispatch: diff --git a/.gitea/workflows/windows-host.yml b/.gitea/workflows/windows-host.yml index 4b509ed1..f5f12b53 100644 --- a/.gitea/workflows/windows-host.yml +++ b/.gitea/workflows/windows-host.yml @@ -38,6 +38,14 @@ # lgpl-shared (not gpl-shared) keeps those bundled DLLs LGPL (we never use the GPL-only x264/x265). # CI never launches the exe, so no GPU is needed here — this is build + Windows clippy coverage only. name: windows-host +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/windows-msix.yml b/.gitea/workflows/windows-msix.yml index 6e70e5da..5368c1ab 100644 --- a/.gitea/workflows/windows-msix.yml +++ b/.gitea/workflows/windows-msix.yml @@ -27,6 +27,14 @@ # next to the .msix (users import it to Trusted People before install). Drop in a real cert later # with no workflow change — just add the secrets (+ pass -Publisher if its subject differs). name: windows-msix +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: diff --git a/.gitea/workflows/windows.yml b/.gitea/workflows/windows.yml index 00e059e0..9039a34f 100644 --- a/.gitea/workflows/windows.yml +++ b/.gitea/workflows/windows.yml @@ -38,6 +38,14 @@ # CARGO_WORKSPACE_DIR var silently never gets set -> reactor build.rs panics). pwsh writes no BOM. # The runner's daemon wrapper puts C:\Program Files\PowerShell\7 on PATH so the job finds pwsh. name: windows +# One pending run per workflow+ref: a newer push supersedes the queued/running one and cancels +# it (a canary only needs the latest commit; each release tag is its own ref so tag runs never +# cancel each other). Keeps a busy push cadence from piling ~10 queued runs per commit onto the +# runner fleet. Gitea honors this for push triggers (PR triggers: see gitea#35933). +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: