GitHub:スタックのプルリクごとにチェックが走る
スタックの中のプルリクは、どれも main のようなスタックの土台に向いているとして評価されます。main に向いた pull_request のイベントで動くワークフローは、一番下だけでなくスタックのすべてのプルリクで走るので、大きなスタックほど CI の使用量が増えます(GitHub の スタックのプルリクの CI を絞る・2026年10月27日に確認)。
main <- PR1 <- PR2 <- PR3 on: pull_request, branches: [main] PR1・PR2・PR3 のどれでも走る 必須のステータスチェック スタックの土台に対して評価 github.event.pull_request.stack スタックの中のときだけある
すべてのプルリクで走る理由
- 土台が基準:GitHub Actions のワークフローは、スタックの各プルリクがスタックの土台に向いているとして動きます。そのため、ワークフローを変えなくてもスタック全体でチェックが走ります(GitHub の スタックのプルリク)。
- ルールも同じ:必須のレビュー・必須のステータスチェック・コードオーナー・コードスキャンのワークフローは、すぐ下のブランチではなくスタックの土台に対して評価されます(GitHub の ブランチの保護と必須のチェック)。土台は一番下のプルリクのマージ先のブランチで、既定はリポジトリの既定のブランチですが、リリースのブランチなどどのブランチにもできます。
- マージには下も要る:PR3 をマージするには、PR1 と PR2 もチェックを通っている必要があります(スタックのプルリクがマージできない)。
必要な所だけジョブを走らせる
- スタックの項目:ワークフローの式で github.event.pull_request.stack から number(リポジトリの中のスタックの番号)・size(スタックのプルリクの数)・position(1 が一番下)・base.ref(スタック全体が向くブランチ)・base.sha が読めます。プルリクがスタックの中にあるときだけある項目なので、先に null でないかを確かめます(GitHub の スタックの情報を読む)。
- まだマージされていない一番下:github.event.pull_request.stack.base.ref が github.event.pull_request.base.ref と等しいプルリクで、スタックの土台に直接向いている物です。一番下がマージされると、次のプルリクがスタックの土台に向くようリベースされ、次の実行からはそれがまだマージされていない一番下になります。
- 一番上:stack.position が stack.size と等しいプルリクで、変更をすべて含みます。stack.position == 1 で、もともとの一番下を選べます(GitHub の CI の使用量を減らす)。
if: github.event.pull_request.stack != null && github.event.pull_request.stack.position == github.event.pull_request.stack.size
そのジョブが必須のチェックのとき
- 条件で飛ばしたジョブ:条件で飛ばしたジョブは Success と報告されるので、マージを止めません(GitHub の 飛ばされた必須のチェックの扱い)。
- ワークフローごと飛んだ:パスやブランチの絞り込み、コミットメッセージで飛んだワークフローのチェックは Pending のまま残り、マージを止めます。GitHub は、飛ぶことのあるワークフローを必須にしないよう勧めています([skip ci] でチェックが動かない)。
- 失敗したジョブの後のジョブ:失敗したジョブに頼るジョブは飛ばされ、マージを止めないことがあります。GitHub は、そうした必須のチェックに needs と always() を使うよう勧めています。
どうするか
- 実行が多すぎる:軽いチェックはすべてのプルリクで走らせ、重いジョブはスタックの項目で、まだマージされていない一番下か一番上だけに絞ります。
- 思っていない実行があった:ワークフローの絞り込みを、プルリクのすぐ下のブランチではなく、スタックの土台と比べます。
- リベースの後:リベースが要るときはマージの欄に Rebase stack が出ます。スタックのリベースは署名つきのコミットを作り、差分が変わらなければ承認は残ります(GitHub の リベース)。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。GitHub がプルリクの先頭のコミットに報告したチェックを、実行へのリンクつきで差分の隣に並べます。スタックの中のプルリクでは、マージの確認欄にスタックの一部であることを出してスタックの土台のルールを読み、マージはその下の開いているプルリクと一緒に行います。チェックの再実行やワークフローの変更はしません。受信箱・差分・会話は無料、承認・コメント・解決・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English