github / github/gh-stack

Mid-stack PRs miss stack-aware `pull_request` triggers: PRs are created before the stack object exists

Đang mở
#425 0 bình luận 5 reaction 0 người được giao Xem trên GitHub
bug topic: ci
Ngôn ngữ chính
Go
Star
1.5k
Fork
70
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
7

Mô tả

### 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](https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/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

1. In a repo with the stacks preview enabled, add a workflow with:

```yaml
on:
pull_request:
branches: [ "main" ]
```

2. Create a 4-branch stack and `gh stack submit`.
3. 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}/merge` all exist and point at current commits, and all four PRs report `mergeable: true`.
- **#379** — that concerns `paths` filters being selected from the topmost PR. This is `branches` filters 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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu từ luồng `gh stack submit` và tái hiện stack gồm bốn nhánh với workflow `pull_request` được lọc cho `main`. Theo dõi thời điểm các PR thành viên được tạo, thời điểm stack được đăng ký và cách quan sát hành vi kích hoạt workflow thông qua các check suite. Hoàn tất khi mọi PR thành viên đều nhận được lần chạy workflow như mong đợi, bao gồm cả các PR ở giữa stack được tạo trước khi stack được đăng ký.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
github, go
Lĩnh vực
api, cli
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.