Mid-stack PRs miss stack-aware `pull_request` triggers: PRs are created before the stack object exists
还没有人认领这个 Issue。
评估
调研方向
从 gh stack submit 流程开始,使用针对 main 进行过滤的 pull_request 工作流重现四分支 stack。跟踪成员 PR 何时创建、stack 何时注册,以及如何通过 check suites 观察工作流触发行为。完成标准是每个成员 PR 都收到预期的工作流运行,包括在 stack 注册之前创建的 stack 中间 PR。
由索引模型根据 Issue 内容生成。
描述
What happened
On gh stack submit, PRs are created a few seconds before the stack object itself exists. pull_request workflows with a branches: filter are evaluated against each PR's literal base at open time, so mid-stack PRs are filtered out and never dispatched. They are not re-evaluated once the stack is registered, so they permanently show no checks.
This contradicts the documented behaviour in Optimizing CI for stacked pull requests: "A workflow configured to run on pull_request events targeting main runs for every pull request in the stack."
Reproduction
-
In a repo with the stacks preview enabled, add a workflow with:
on: pull_request: branches: [ "main" ] -
Create a 4-branch stack and
gh stack submit. -
Observe CI runs only on the bottom PR and the topmost PR. The middle PRs get a check suite with zero runs.
Observed timeline
Stack of 4 (PRs #10–#13, stack #14, stack.base.ref = main, size: 4):
| Time (UTC) | Event | Workflow dispatched |
|---|---|---|
| 13:24:13 | PR #10 opened (7 → main) |
yes — literal base is already main |
| 13:24:17 | PR #11 opened (8 → 7) |
no — check suite 85146388656, latest_check_runs_count: 0 |
| 13:24:21 | PR #12 opened (9 → 8) |
no — check suite 85146406327, latest_check_runs_count: 0 |
| 13:24:24 | PR #13 opened (10 → 9) |
no — first check suite, 0 runs |
| 13:24:26 | stack #14 created (GET /repos/{owner}/{repo}/stacks/14 → created_at) |
|
| 13:24:31 | second check suite on PR #13's head | yes — this is the run that appears |
The bottom PR runs because its base is literally main, independent of any stack awareness. The top PR runs because its dispatch landed after stack registration at 13:24:26 and got a second check suite. PRs #11 and #12 had their opened events fully processed before the stack existed, were rejected by the branches: [main] filter, and nothing re-dispatched them afterwards.
Reproduced identically on an earlier stack of 3 in the same repo: bottom PR ran, middle skipped, top ran.
Expected behavior
Every PR in the stack is evaluated against stack.base.ref, as documented — either by creating the stack before its PRs, or by re-evaluating pull_request workflow triggers for all member PRs once the stack is registered.
Actual behavior
Only PRs whose trigger evaluation happens after stack registration get stack-aware treatment. Mid-stack PRs are silently left with no checks, which is indistinguishable from "queued" and blocks merge on repos with required checks.
Not a duplicate of
- #319 — merge refs are healthy here:
refs/pull/{10,11,12,13}/mergeall exist and point at current commits, and all four PRs reportmergeable: true. - #379 — that concerns
pathsfilters being selected from the topmost PR. This isbranchesfilters and a registration-ordering race; the affected PRs get a check suite with zero runs rather than a workflow selected from the wrong PR.
Workaround
Remove the branches: filter from the pull_request trigger so CI runs regardless of base.
- 主要语言
- Go
- 星标
- 1.5k
- 派生
- 73
- 平均合并
- 1 天 8 小时
- 30 天内合并 PR
- 7
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
github/gh-stack 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 85/100
-
难度 1/5 1 小时以内 新手友好度 92/100
-
feature request topic: cli - general
难度 2/5 1-3 小时 新手友好度 68/100
-
feature request topic: auto-merge
难度 2/5 1-3 小时 新手友好度 68/100
-
bug topic: docs
难度 1/5 1 小时以内 新手友好度 68/100
相似的 Issue
-
textual definition
难度 1/5 1 小时以内 新手友好度 90/100
geneontology/go-ontology#32653 ·
-
难度 1/5 1 小时以内 新手友好度 75/100
-
needs design
难度 2/5 1-3 小时 新手友好度 75/100
-
Priority/High ready-for-agent Severity/Major Type/Bug
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 70/100