From 88d5f777bb5ef6a38b6b2f42c8abf7aa84f54bb7 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 11 Nov 2026 21:12:06 +0000 Subject: [PATCH] ci: one queue for all of CI, nothing cancelled (#140) Every workflow shared the concurrency group qemu. A group keeps one running and one waiting run, and a run that joins cancels the one waiting: Build runs 245 and 247 were cancelled at 0 s by PR 164's Acceptance runs. Captain Bob, 2026-11-11: "It should be global"; the runner has capacity 1. So the concurrency block is removed from all six workflows (a comment in each says why): with one runner at capacity 1 every job waits its turn in Gitea's queue and none is cancelled, and a runner-image rebuild still blocks the rest. CLAUDE.md's CI section corrected; FABRIC-3 XLVIII.19. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm --- .claude/CLAUDE.md | 7 +++++-- .gitea/workflows/acceptance.yml | 8 ++++---- .gitea/workflows/build.yml | 7 ++++--- .gitea/workflows/nightly-docs.yml | 7 ++++--- .gitea/workflows/nightly.yml | 8 ++++---- .gitea/workflows/release.yml | 8 ++++---- .gitea/workflows/runner-image.yml | 7 ++++--- docs/fabric/FABRIC-3.md | 18 ++++++++++++++++++ 8 files changed, 47 insertions(+), 23 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 868fd2e2..95be1ee8 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -358,8 +358,11 @@ present in `logs/`: **Corrected 2026-11-10** — this file previously named stale job IDs (`build-amd64-iso`, `build-aarch64-iso`, `build-riscv64-img`) and said "No QEMU boot step in CI." -Six workflows in `.gitea/workflows/`; all share a single `qemu` concurrency group -(`cancel-in-progress: false`) so at most one run executes at a time: +Six workflows in `.gitea/workflows/`. **One job at a time across all of CI, and none cancelled** +(corrected 2026-11-11, #140 -- Captain Bob: "It should be global"): there is no concurrency group; +the one runner (`starshipos-vps`) has capacity 1, so every job of every workflow waits its turn in +Gitea's queue. The shared `qemu` group this file described kept only one waiting run, and each run +that joined cancelled it: - **`acceptance.yml`** — PR gate into `master`: 3 QEMU boots (amd64/aarch64/riscv64) + PC stick loaded high + `make -C v4 test-32`, all via `scripts/nightly.sh`; branch protection requires this check to pass before the merge button unlocks. diff --git a/.gitea/workflows/acceptance.yml b/.gitea/workflows/acceptance.yml index dcbaf7a7..8ace6863 100644 --- a/.gitea/workflows/acceptance.yml +++ b/.gitea/workflows/acceptance.yml @@ -17,10 +17,10 @@ on: types: [opened, synchronize, reopened] workflow_dispatch: -concurrency: - group: qemu # every workflow shares this one group: one run at a time, - # a runner-image rebuild included (Captain Bob, 2026-11-07) - cancel-in-progress: false +# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner +# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue +# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared +# concurrency group kept only one waiting run, and each run that joined cancelled it. jobs: acceptance: diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 8e0747ca..3cdb4db4 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -13,9 +13,10 @@ on: # the server the wikis share (Captain Bob, 2026-11-07) workflow_dispatch: -concurrency: - group: qemu # every workflow shares this one group (Captain Bob, 2026-11-07: a - cancel-in-progress: false # runner-image rebuild blocks other jobs, always): one run at a time +# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner +# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue +# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared +# concurrency group kept only one waiting run, and each run that joined cancelled it. jobs: image: diff --git a/.gitea/workflows/nightly-docs.yml b/.gitea/workflows/nightly-docs.yml index ff62b68b..09882ace 100644 --- a/.gitea/workflows/nightly-docs.yml +++ b/.gitea/workflows/nightly-docs.yml @@ -14,9 +14,10 @@ on: - cron: '0 4 * * *' # 04:00 UTC, after the images (nightly.yml, 03:00) workflow_dispatch: -concurrency: - group: qemu # every workflow shares this one group (Captain Bob, 2026-11-07: a - cancel-in-progress: false # runner-image rebuild blocks other jobs, always): one run at a time +# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner +# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue +# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared +# concurrency group kept only one waiting run, and each run that joined cancelled it. jobs: docs: diff --git a/.gitea/workflows/nightly.yml b/.gitea/workflows/nightly.yml index 8c958766..5d04132a 100644 --- a/.gitea/workflows/nightly.yml +++ b/.gitea/workflows/nightly.yml @@ -20,10 +20,10 @@ on: - cron: '0 3 * * *' # 03:00 UTC; the documents are at 04:00 (nightly-docs.yml) workflow_dispatch: -concurrency: - group: qemu # every workflow shares this one group: one run at a time, - # a runner-image rebuild included (Captain Bob, 2026-11-07) - cancel-in-progress: false +# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner +# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue +# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared +# concurrency group kept only one waiting run, and each run that joined cancelled it. jobs: nightly: diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 04e5509a..463fa551 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -18,10 +18,10 @@ on: push: tags: ['v*'] -concurrency: - group: qemu # every workflow shares this one group: one run at a time, - # a runner-image rebuild included (Captain Bob, 2026-11-07) - cancel-in-progress: false +# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner +# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue +# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared +# concurrency group kept only one waiting run, and each run that joined cancelled it. jobs: release: diff --git a/.gitea/workflows/runner-image.yml b/.gitea/workflows/runner-image.yml index 485eaee2..53e59bbc 100644 --- a/.gitea/workflows/runner-image.yml +++ b/.gitea/workflows/runner-image.yml @@ -17,9 +17,10 @@ on: paths: ['ci/runner-image/**', 'Makefile'] workflow_dispatch: -concurrency: - group: qemu # every workflow shares this one group (Captain Bob, 2026-11-07: a - cancel-in-progress: false # runner-image rebuild blocks other jobs, always): one run at a time +# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner +# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue +# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared +# concurrency group kept only one waiting run, and each run that joined cancelled it. jobs: image: diff --git a/docs/fabric/FABRIC-3.md b/docs/fabric/FABRIC-3.md index 0017047b..df1b9a56 100644 --- a/docs/fabric/FABRIC-3.md +++ b/docs/fabric/FABRIC-3.md @@ -6547,3 +6547,21 @@ and memorize frequently so we can pick up where we left off"). release was a pre-release; now it is not. The tag stays on `93828e0e`, its 13 assets unchanged; moving a tag was not an option (tags are sacred), and today's work ships as alpha.5. +### 19. #140: one queue for all of CI, nothing cancelled (2026-11-11) + +- **Found again:** Build runs 245 and 247 (the board images and the v4 tests) were cancelled at 0 s on + two pushes to PR 164's branch: the push queued Build in the shared `qemu` group, the PR's + Acceptance run joined seconds later, and a group keeps one running and **one waiting** run -- the + joining run cancelled the waiting one. The v4 tests were run by hand instead (79 programs, 0 + failures; `logs/20261111-193825/v4-test`). +- **Ruled** (Captain Bob): "It should be global" -- one queue for all of CI. The runner + (`starshipos-vps`) has capacity 1 (Captain Bob: "capacity is 1"). +- **Built:** the `concurrency:` block is gone from all six workflows, each with a comment saying why; + `.claude/CLAUDE.md`'s CI section corrected. With one runner at capacity 1, every job of every + workflow waits in Gitea's queue and none is cancelled; a runner-image rebuild still blocks the rest + (2026-11-07). What changes: the runner takes **jobs**, not runs, so another workflow's job may run + between two of Build's -- never beside one; one QEMU at a time holds. +- **Left to Captain Bob:** the offline duplicate runner registration (id 1, also `starshipos-vps`) -- + removed, it can never take a job if it comes back. #140's "Done when" is met by this entry and the + workflows' comments once it reaches `master`. +