Bitbucket のマージチェック:どれがマージを止めているか
マージチェックは、ブランチがプルリクエストのマージの前に求める条件です。承認の数、通ったビルド、残っていないタスクなど。満たしていないチェックが警告だけで済むか、本当にマージを止めるかは、リポジトリがどこにあるかで変わります。Bitbucket Cloud では Premium ともう1つの設定があるときだけ止め、Bitbucket Data Center では有効なチェックがマージを拒否します。マージできないときは、まずどのチェックが満たされていないかを見ます。答えは、そのチェックの数え方の細かい所にあることが多いです。
Bitbucket Cloud
Atlassian のページ Suggest or require checks before a merge(英語)から:
- チェック:Minimum number of approvals(承認の最低数)・Minimum number of approvals from default reviewers(既定のレビュアーからの承認の最低数)・No changes are requested(変更の依頼がない)・No unresolved pull request tasks(未解決のタスクがない)・Minimum number of successful builds for the last commit with no failed builds and no in progress builds(最後のコミットで成功したビルドの最低数、失敗と実行中のビルドはなし)・Maximum number of commits behind destination branch(マージ先から遅れてよいコミット数の上限)。
- 警告か、止めるか:Premium でなければ、Bitbucket は未解決のマージチェックを警告するだけで、プルリクエストはマージできます。止めるには、ワークスペースが Premium で、ブランチに Prevent a merge with unresolved merge checks の設定が要ります。
- 場所:リポジトリの Settings → Branch restrictions(Workflow の下)。マージチェックは、マージ先のブランチのブランチ制限の一部です。
- 承認:作成者は自分のプルリクエストを承認できますが、その承認は最低数に数えません。Premium の Reset approvals when the source branch is modified は push の後に承認を全部外し、Keep approvals if there is no change to the diff in the pull request は差分が変わらなければ承認を残します。
Bitbucket Data Center
Atlassian のページ Checks for merging pull requests(英語・Data Center 10.5)から:
- 組み込みのチェック:All reviewers approve(全レビュアーの承認)・Minimum approvals(承認の最低数)・Minimum successful builds(成功したビルドの最低数)・No 'changes requested' status(変更の依頼がない)・No incomplete tasks(終わっていないタスクがない)。ほかに Code Insights のチェック(レポート・その結果・ある重大度の注釈)と Required builds(保護したブランチで、名前を決めたビルド)。
- 場所:プロジェクトのリポジトリ全部には Project settings → Merge checks(プロジェクトの管理者は、リポジトリ側で変えられないようにもできます)。1つのリポジトリには Repository settings → Merge checks。Code Insights と Required builds はそれぞれの設定ページです。
- 止め方:有効なチェックはマージを拒否します。REST API の
GET …/pull-requests/{id}/merge(「Test if pull request can be merged」)は、conflicted・outcomeとvetoesの一覧で答え、それぞれにsummaryMessageとdetailedMessageがあります。足りないものを、チェック自身の言葉で書いたものです。
何を見るか
- 承認:作成者以外のレビュアーの承認を数えます。Bitbucket Cloud の Premium で push のたびに承認を外す設定なら、承認の後の push で外れています。
- ビルド:Bitbucket Cloud のチェックは、ソース ブランチの最後のコミットにあるビルドの状態を全部見ます。同じビルドの後の実行が通っていても、失敗が1つ残っていれば満たしません。Atlassian の記事 Merge check fails when commit build statuses are created via Bitbucket Cloud API(英語)は、実行ごとに同じ
keyを付けて、新しい状態で古いものを上書きするように書いています。 - タスクと変更の依頼:開いたままのタスクや、レビュアーの「変更の依頼」は、解決するか取り下げるまでチェックを満たしません。
- 遅れているコミット:マージ先のブランチをソース ブランチへマージするか、リベースして push します。
- 競合はマージチェックではありませんが、やはりマージを止めます。リポジトリを手元に取り、マージかリベースで解決して push します(マージの衝突の解消)。
IntelliJ IDEA でマージチェックを
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Bitbucket Cloud と、ベータ版として Bitbucket Data Center 8.9 以降に対応します。プルリクエストごとに、マージチェックを言葉で出します。「承認 2 件中 1 件」、成功したビルド、残っているタスク、マージ先から遅れているコミット、名前つきのカスタム チェック、競合、そのうちどれがマージを止めているか。Data Center では、サーバー自身の言葉で拒否の理由を出します。レビューの受け箱・差分・議論・マージチェックは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Bitbucket と Atlassian は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:プルリクのビルドと Required builds · プルリクのタスクと既定のタスク · コメントの解決 ·「変更を依頼」と Needs work · Bitbucket の自動マージ · Bitbucket のマージ方法 · modify a pull request based on out-of-date information(Data Center) · pre-receive hook declined · Bitbucket のマージキュー · IntelliJ IDEA で使える Bitbucket のプルリクエストのプラグインの比較 · English