Forgejo・Gitea のチェックが合格したらマージ:断られた・マージされない
マージの API(POST /api/v1/repos/持ち主/リポジトリ名/pulls/番号/merge)に merge_when_checks_succeed: true を付けると、チェックが合格したらマージするようサーバーに頼めます。予約できると、サーバーは本文の無い 201 で答えます。以下はすべて両方の今のソース(routers/api/v1/repo/pull.go・services/pull/check.go・services/automerge/automerge.go・models/pull/automerge.go)を 2026年10月24日に読んで確かめたものです。ふつうのマージの答えは Forgejo・Gitea がマージを断った理由へ。
予約で飛ばす確認と、それでも断る答え
- 飛ばすもの:ブランチの保護の確認です。必須の承認、必須のステータスチェック、変更の依頼、ベースより遅れたブランチなど。予約したマージは、これらを待ちます。
- それでも 405(ふつうのマージと同じ):
User not allowed to merge PR、Work in progress PRs cannot be merged、Please try again later(競合しているか、push の後でサーバーがまだ確かめている)、署名付きのコミットの要求、リポジトリが許していないマージの方法、マージ済みのプルリクエスト。閉じたものは 404 です。 - 409
pull request is already scheduled to auto merge when checks succeed [pull_id: …](和訳:チェックが合格したらマージする予約がすでにあります):予約はプルリクエストごとに1つです。pull_idはサーバーの中の ID で、プルリクエストの番号ではありません。Web のページのボタンは前の予約を置き換えますが、API は前の予約を残して新しい方を断ります。 messageが空の 500:プルリクエストが、まだ開いている課題やプルリクエストに依存しています。マージの確認はis blocked by an open dependencyというエラーで終わり、API はこれを内部エラーとして返します。文は管理者にしか見せません。ふつうのマージも、ほかの確認が通った後は同じ答えです。
待つものが残っていなくても、サーバーは予約します。
予約したマージがいつ行われるか
- 裏で、先頭のコミットの必須のステータスチェックが合格し、続いて承認を含むふつうのマージの確認が、予約した人について通ったときです。予約した人がもうマージできなければ、マージされません。
- Gitea は予約した直後に確かめるので、もう通っているプルリクエストはすぐにマージされます。
- Forgejo は予約のときには確かめません。確かめるのは、先頭のコミットに成功のステータスが届いたとき、だれかが承認したときかレビューが却下されたとき、push の後にプルリクエストを確かめ終えたときです。最後の確認が終わった後に入れた予約は、次のどれかまで待ちます。
- 予約はコミットを覚えません。どちらのサーバーも
head_commit_idを読まずに受け付け(付けて送っても確かめません)、あとでそのときのブランチをマージします。予約の後に push されたコミットも、そのチェックが合格すればマージされます。push で予約は取り消されません。新しいコミットを入れたくないなら、先に予約を取り消します。 - そのマージ自体が失敗したとき(git が見つけた競合や、push を断るフックなど)は、どちらのサーバーもログに書くだけで、プルリクエストには何も出ません(両方のソースに、わかっている穴として書かれています)。Forgejo は試す前に予約を消しているので、予約はなくなります。Gitea は残し、次の確認でまた試します。
取り消すとき
DELETE /api/v1/repos/持ち主/リポジトリ名/pulls/番号/merge は、予約を取り消せば 204、予約が無ければ 404、あなたが予約した人ではなく、自分でもマージできないときは 403 user has no permission to cancel the scheduled auto merge(和訳:予約したマージを取り消す権限がありません)です。
直し方
- 405:文が言うもの(作業中の印・競合)を直してから、もう一度予約する。
- 予約済みの 409:マージの方法や文を変えるなら、
DELETEで取り消してから予約し直す。 - 文の無い 500:プルリクエストの依存先を見て、開いているものを閉じるか、依存を外す。
- 予約したのにマージされない:必須のチェックが合格しているか、承認がそろっているかを見る。Forgejo なら、チェックを走らせ直すか承認し直すと確かめ直します。それでもマージされなければ、サーバーの管理者にログを見てもらうか、手でマージする。
IntelliJ IDEA で Forgejo・Gitea のプルリクを見るなら
Lesstep の Pull Request Inbox for Forgejo and Gitea は、JetBrains IDE(2024.1 以降)のプラグインです。マージの前にマージの条件を見せ、画面に出ていた先頭のコミットをマージします。チェックがまだ動いている間は、マージのダイアログで「チェックが合格したらマージ」を選べ、サーバーが 201 で答えたら、チェックが合格したらマージされると言います。1.0.17 からは、サーバーが予約を断ったとき(405)に、予約が待つ承認やチェックの失敗を挙げず、作業中や競合でないこと、そのブランチにマージできる人であることが要ると言います。予約がもうあるとき(409)は前の予約が残ると言い、文の無い 500 には、開いている依存先で止まっていると言います。1.0.18 からは、予約の前にプルリクエストを開いてからブランチが動いていないかを確かめ、動いていれば予約せずにそう言います。マージのダイアログと予約の後の知らせで、チェックが合格するまでに push されたコミットもマージされること、プルリクエストのページで予約を取り消せば止まることを言います。読むのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Forgejo・Gitea・Codeberg はそれぞれの持ち主の名前、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Forgejo プロジェクト・Codeberg e.V.・Gitea プロジェクト・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:Forgejo・Gitea のマージの断り(405・409) · Forgejo・Gitea の必須のチェック(不足・skipped・パターン) · Forgejo・Gitea のブランチの更新の断り(403・409・422) · Forgejo・Gitea のレビューの断り(422) · 404「The target couldn't be found.」と「not found」 · 「token does not have at least one of required scope(s)」 · Forgejo・Gitea の検索の断り(400・422) · Forgejo・Gitea のプルリクの変更ファイル(50件ずつ・changed_files) · JetBrains の IDE で Forgejo・Gitea のプルリクを扱う · English