注: pull request のマージ キュー機能は現在、パブリック ベータ版であり、変更される可能性があります。
マージ キューについて
マージ キューを使用すると、必要なすべてのブランチ保護チェックに合格することを保証しつつ、pull request がビジー状態のターゲット ブランチにマージされる速度を上げることができます。
pull request が必要なすべてのブランチ保護チェックに合格すると、リポジトリへの書き込みアクセス権を持つユーザーは、その pull request をマージ キューに追加できます。
マージ キューでは、GitHub Actions を使用できます。 詳しくは、「GitHub Actionsのドキュメント」を参照してください。
pull request 変更の有効性を検証する特別なプレフィックスを付け、一時的なブランチがマージキューによって作成されます。 次に、pull request の変更は、base_branch
の最新バージョンとキューでそれに先行する変更と共に、merge_group
にグループ化されます。 GitHub では、base_branch
のブランチに必須のチェックで合格すると、これらの変更がすべてマージし、base_branch
が作られます。
マージ方法について詳しくは、「プルリクエストのマージについて」をご覧ください。
注:
- マージキューは、ブランチ名パターンにワイルドカード文字 (
*
) を使用するブランチ保護ルールで有効にできません。 - マージ キューは、マージを続ける前に、必要なチェックが報告されるまで待機します。 マージ キューが必要な場合は、マージ グループ イベントをトリガーして報告するように、CI の構成を更新する必要があります。
pull request をターゲット ブランチの最新バージョンとグループ化し、キュー内でその前に変更した後、必要な状態チェックが失敗した場合、またはベース ブランチと競合した場合、GitHub によって pull request がキューから削除されます。 pull request タイムラインには、その pull request がキューから削除された理由が表示されます。
GitHub Actions を使ってマージ グループのチェックをトリガーする
merge_group
イベントを使って、pull request がマージ キューに追加されたときに GitHub Actions ワークフローをトリガーできます。 これは pull_request
イベントや push
イベントとは異なるイベントであることに注意してください。
注: リポジトリで GitHub Actions を使ってリポジトリ内の pull request に対して必要なチェックを実行する場合は、追加のトリガーとしてmerge_group
イベントを含めるようにワークフローを更新する必要があります。 それ以外の場合、マージ キューに pull request を追加しても、ステータス チェックがトリガーされません。 必要な状態チェックが報告されないため、マージは失敗します。
ターゲット ブランチの保護で必要なチェックを報告するワークフローは、次のようになります。
on:
pull_request:
merge_group:
詳しくは、「ワークフローをトリガーするイベント」を参照してください。
他の CI プロバイダーを使ってマージ グループのチェックをトリガーする
他の CI プロバイダーを使う場合、特別なプレフィックス gh-readonly-queue/{base_branch}
で始まるブランチが作成されたときに実行するように CI 構成を更新する必要がある場合があります。
マージキューの管理
リポジトリ管理者は、ベースブランチの保護ルールで「マージキューを必須にする」ブランチ保護設定を有効にし、マージを必須にできます。 詳しくは、「ブランチ保護ルールを管理する」を参照してください。
"マージ キュー必須" を有効にすると、次の設定にもアクセスできます。
-
マージ方法: キューに登録済みの pull request をマージするときに使う方法 (マージ、リベース、スカッシュ) を選びます。
-
ビルドのコンカレンシー: ビルドする pull request の最大数 (1 から 100) を選びます。 この設定を行うと、CI チェックを同時に実行できる、キューに登録済みの pull request の数が制限されます。
-
マージの制限: 1 つのグループ内でマージする pull request の最小数と最大数 (1 から 100) とタイムアウトを選びます。その後、追加エントリの待機の停止と、pull request の最小数より少ない数でのマージがキューによって行われます。
-
不合格以外の pull request のみをマージする: この設定を行うと、マージされる pull request のグループがマージ キューによってどのように形成されるかが決まります。
選んだ場合、必須の CI チェックに合格した pull request のみをグループに追加できます。 これは、すべてのコミットが良好な状態の履歴を維持したい場合や、さまざまな pull request に対してさまざまなチェックのセットを実行する場合に便利です。
選んでいない場合、不合格だった必須のチェックが含まれている pull request をグループに追加できますが、これは、グループ内の最後の pull request が必須のチェックを合格している場合に限ります。 グループ内の最後の pull request が必須のチェックに合格している場合は、そのチェックがマージ グループ内の変更の組み合わせで合格だったことを意味します。 断続的にテストが不合格になるものの、偽陰性によってキューがそのままの状態にならないようにしたい場合は、このチェックボックスをオフのままにしておくのがよいでしょう。
-
状態チェックのタイムアウト: チェックが不合格だったと想定される前にキューで必要な CI からの応答待機時間を選びます。