ci: concurrency group is keyed on the branch name, so same-named fork branches can cancel each other's CI
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- github-actions, yaml
- Domain
- ci-cd
Research direction
Read ci.yml and compare its concurrency group with label_prs.yml, which already keys runs by pull request number. Check the same pattern in codeql.yml, miri.yml, and pr_title_check.yml, then inspect dev/ci/check-ci-config.py for the relevant CI configuration test. Done means each pull request gets a distinct group while the existing fallbacks still work, with the check covering two same-named fork branches.
Written by the indexing model from the issue text.
Description
Describe the bug
ci.yml cancels in-flight runs per concurrency group, and the group for a pull request is built from github.head_ref, which is the branch name alone, with no repository or PR number:
concurrency:
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}-${{ github.event.action == 'labeled' && github.event.label.name || github.event_name }}
cancel-in-progress: true
github.repository here is apache/datafusion-comet for every pull request, so two open pull requests from different forks whose branches share a name land in the same group. A push to one cancels the other's in-flight run, and the cancelled pull request shows a cancelled Required Checks until someone re-runs it.
Nearly every pull request comes from a fork (194 of the 198 open ones on 2026-10-28), and contributors often use a generic branch name such as main, patch-1 or fix, so a collision does not need unusual bad luck.
codeql.yml, miri.yml and pr_title_check.yml build their group the same way. label_prs.yml already keys on github.event.pull_request.number, which is the shape to copy.
To Reproduce
Not reproduced on a real pull request. I found no cancelled run caused by this in the roughly 1,500 most recent pull requests. The nearest case is two pull requests from different forks that both used the branch fix/park-native-scan-loop and were open together for about five minutes on 2026-09-25 (#6092 and #6219), with no run in flight on the first when the second started. The behaviour follows from how the group is built, and the GitHub documentation for concurrency is explicit that a new run in a group cancels the one in progress.
To reproduce: open two pull requests from different forks with the same branch name, push to both within a run's duration, and watch the first run end cancelled.
Expected behavior
A push to one pull request cancels only that pull request's earlier run.
Additional context
Keying on the pull request number fixes it for pull request events, with the existing fallbacks for the others:
group: ${{ github.repository }}-${{ github.event.pull_request.number || github.sha }}-${{ github.workflow }}-...
ci_label.yml calls ci.yml, and the pull_request context is the same in the called workflow, so label runs keep a stable key too. arrow-rs made the same change in apache/arrow-rs#11788, with a test that two pull requests with the same branch name get different groups. dev/ci/check-ci-config.py is the place to pin it.
- Dominant language
- Scala
- Stars
- 1.3k
- Forks
- 398
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 329
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/datafusion-comet
-
area:ci enhancement priority:low requires-triage
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
apache/datafusion-comet#7319 · 1 comment ·
Maintainers usually reply within 1 day
-
requires-triage
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
apache/datafusion-comet#7240 ·
Maintainers usually reply within 1 day
-
bug priority:low
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
apache/datafusion-comet#7176 ·
Maintainers usually reply within 1 day
-
docs: update Scala comments that reference the removed iceberg-writes.md pagePossibly taken A pull request linked to this issue is open or already merged. Openenhancement
Difficulty 1/5 1-3 hours Newbie friendliness 83/100
apache/datafusion-comet#7101 ·
Maintainers usually reply within 1 day
-
requires-triage
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
apache/datafusion-comet#7001 ·
Maintainers usually reply within 1 day
All issues in apache/datafusion-comet
Similar issues
-
area:build priority:P2 status:backlog
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
KD5UJC-XYZ/scarab#648 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
lichess-org/lila#22324 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 78/100
canton-network/splice#8142 ·
Maintainers usually reply within 1 day
-
Users who join a new meeting at the same moment: one sometimes gets "Ops, something went wrong" because bbb-web drops their registration (race on `Meeting.userCustomData`)Possibly taken @antobinary claimed this 1 day ago. Openmodule: core
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
bigbluebutton/bigbluebutton#26318 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
Maintainers usually reply within 1 day