A newer CI run now cancels the one it supersedes. The concurrency block is set once for the whole workflow, grouped per PR or branch, with cancel-in-progress: true.
Why: there's one runner. A superseded run used to hold it, and the GPU, until it was cancelled by hand. That includes the duplicate run from opening a PR with the e2e:full label already on it, as on #125. Our earlier attempt put concurrency on the e2e job only and didn't cancel anything. Gitea documents the workflow-level form (since 1.26).
Unrelated labels: adding a label other than e2e:full (say discuss) starts a run whose jobs all skip. In the shared group, that run would cancel the real one, so it gets a group of its own.
Gitea's label events, found while testing: the workflow sees the action as label_updated, not labeled, and github.event.label is empty.
That meant the old job filter never matched, so every label change ran checks plus the smoke e2e.
Checks now accept both action spellings, and recognise an e2e:full event from the PR's labels.
The cost: changing another label on an e2e:full PR restarts its full run.
Checked live on this PR: details are in the comment below.
Pushes cancel superseded runs.
An unrelated label skips without cancelling anything.
Adding e2e:full starts a full run that supersedes the push run.
A newer CI run now cancels the one it supersedes. The `concurrency` block is set once for the whole workflow, grouped per PR or branch, with `cancel-in-progress: true`.
**Why:** there's one runner. A superseded run used to hold it, and the GPU, until it was cancelled by hand. That includes the duplicate run from opening a PR with the `e2e:full` label already on it, as on #125. Our earlier attempt put `concurrency` on the `e2e` job only and didn't cancel anything. Gitea documents the workflow-level form (since 1.26).
**Unrelated labels:** adding a label other than `e2e:full` (say `discuss`) starts a run whose jobs all skip. In the shared group, that run would cancel the real one, so it gets a group of its own.
**Gitea's label events, found while testing:** the workflow sees the action as `label_updated`, not `labeled`, and `github.event.label` is empty.
- That meant the old job filter never matched, so every label change ran checks plus the smoke e2e.
- Checks now accept both action spellings, and recognise an `e2e:full` event from the PR's labels.
- The cost: changing another label on an `e2e:full` PR restarts its full run.
**Checked live on this PR:** details are in the comment below.
- Pushes cancel superseded runs.
- An unrelated label skips without cancelling anything.
- Adding `e2e:full` starts a full run that supersedes the push run.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
Workflow-level concurrency, per PR or branch, with cancel-in-progress.
The earlier attempt (job-level, on the e2e job) didn't cancel anything;
Gitea documents the workflow-level form. A label other than e2e:full
starts a run whose jobs all skip, so it gets a group of its own and
can't cancel the real run.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
A push cancels the run it supersedes. The second push cancelled run 446 on its own, and later pushes did the same (447 → 452 → 457).
Gitea's label events use a different action name. The workflow sees label_updated, not labeled, and github.event.label is empty. A temporary job printed this: action=[label_updated] label=[]. Gitea maps the name to labeled only when deciding whether to trigger the workflow.
Consequence: the jobs' old if: github.event.action != 'labeled' never matched. Every label change has been running checks plus the smoke e2e.
My first group exception had the same blind spot: the discuss label run cancelled the real one (447 → 449).
Fixed. Checks accept both action spellings, and an e2e:full label event is recognised from the PR's labels.
Adding design ran in its own group (451), skipped checks and e2e, and left the push run (450) going.
Adding e2e:full cancelled the push run (452) and started a full run (453: 48 walk seeds). I cancelled 453 by hand before e2e reached the GPU.
Known cost: a label change on a PR that already has e2e:full restarts its full run. Removing three labels at once produced two such runs, which were cancelled within 2 s, before either used the runner.
The temporary job is removed in the last commit.
**Live results on this PR:**
1. **A push cancels the run it supersedes.** The second push cancelled run 446 on its own, and later pushes did the same (447 → 452 → 457).
2. **Gitea's label events use a different action name.** The workflow sees `label_updated`, not `labeled`, and `github.event.label` is empty. A temporary job printed this: `action=[label_updated] label=[]`. Gitea maps the name to `labeled` only when deciding whether to trigger the workflow.
- Consequence: the jobs' old `if: github.event.action != 'labeled'` never matched. **Every label change has been running checks plus the smoke e2e.**
- My first group exception had the same blind spot: the `discuss` label run cancelled the real one (447 → 449).
3. **Fixed.** Checks accept both action spellings, and an `e2e:full` label event is recognised from the PR's labels.
- Adding `design` ran in its own group (451), skipped checks and e2e, and left the push run (450) going.
- Adding `e2e:full` cancelled the push run (452) and started a full run (453: 48 walk seeds). I cancelled 453 by hand before e2e reached the GPU.
4. **Known cost:** a label change on a PR that already has `e2e:full` restarts its full run. Removing three labels at once produced two such runs, which were cancelled within 2 s, before either used the runner.
The temporary job is removed in the last commit.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A newer CI run now cancels the one it supersedes. The
concurrencyblock is set once for the whole workflow, grouped per PR or branch, withcancel-in-progress: true.Why: there's one runner. A superseded run used to hold it, and the GPU, until it was cancelled by hand. That includes the duplicate run from opening a PR with the
e2e:fulllabel already on it, as on #125. Our earlier attempt putconcurrencyon thee2ejob only and didn't cancel anything. Gitea documents the workflow-level form (since 1.26).Unrelated labels: adding a label other than
e2e:full(saydiscuss) starts a run whose jobs all skip. In the shared group, that run would cancel the real one, so it gets a group of its own.Gitea's label events, found while testing: the workflow sees the action as
label_updated, notlabeled, andgithub.event.labelis empty.e2e:fullevent from the PR's labels.e2e:fullPR restarts its full run.Checked live on this PR: details are in the comment below.
e2e:fullstarts a full run that supersedes the push run.🤖 Generated with Claude Code
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
Live results on this PR:
label_updated, notlabeled, andgithub.event.labelis empty. A temporary job printed this:action=[label_updated] label=[]. Gitea maps the name tolabeledonly when deciding whether to trigger the workflow.if: github.event.action != 'labeled'never matched. Every label change has been running checks plus the smoke e2e.discusslabel run cancelled the real one (447 → 449).e2e:fulllabel event is recognised from the PR's labels.designran in its own group (451), skipped checks and e2e, and left the push run (450) going.e2e:fullcancelled the push run (452) and started a full run (453: 48 walk seeds). I cancelled 453 by hand before e2e reached the GPU.e2e:fullrestarts its full run. Removing three labels at once produced two such runs, which were cancelled within 2 s, before either used the runner.The temporary job is removed in the last commit.