Forgejo・Gitea がレビューを断った理由
API でプルリクをレビューするとき(POST /api/v1/repos/持ち主/リポジトリ名/pulls/番号/reviews で、event は APPROVED・REQUEST_CHANGES・COMMENT のどれか)、Forgejo と Gitea は 422 で断り、JSON の message に理由を書きます。以下はすべて両方のソース(routers/api/v1/repo/pull_review.go の CreatePullReview と、services/pull/review.go の SubmitReview)を 2026年10月24日に読んで確かめたものです。文言が変わった Gitea の版も見ています。
422:答えの意味
approve your own pull is not allowed・reject your own pull is not allowed(和訳:自分のプルリクの承認/変更の依頼はできません):このプルリクを開いたのはあなたです。どちらのサーバーも、作成者には承認も変更の依頼(reject)もさせません。コメントはできます。review event REQUEST_CHANGES requires a body(和訳:変更の依頼には本文が要ります):変更の依頼にはbodyに文が要ります。行へのコメントだけでは足りません。- 中身の無いコメント:
bodyが空で、行へのコメントも無いCOMMENTです。Forgejo と 1.27 までの Gitea はreview event COMMENT requires a body or a comment、Gitea 28 以降はreview requires a body or a comment(和訳:どちらも、本文かコメントが要ります)と言います。 can't submit review for a closed or merged PR(和訳:閉じた、またはマージ済みのプルリクにはレビューを出せません):Gitea 1.22 以降は、閉じたかマージ済みのプルリクへの承認と変更の依頼を断ります。コメントは受け付けます。Forgejo のソースにはこの確認がありません。- 下書きのレビューを出すとき(
POST …/reviews/ID):only a pending review can be submitted(和訳:出せるのは下書きのレビューだけです)は、そのレビューがもう出されているという意味です。review stay pending(和訳:レビューが下書きのままです)は、要求のeventがAPPROVED・REQUEST_CHANGES・COMMENTのどれでもなかったという意味です。
レビューは、リポジトリのコードを読める人なら誰でも出せます。公開のリポジトリなら、サインインしたどのアカウントでもです。読むだけのトークンは 403 で断られ、答えには token does not have at least one of required scope(s) と書いてあります。足す権限の見つけ方へ。無いプルリクの番号は 404 です。無いのか・非公開か・名前が変わったかへ。
通ったのに数に入らない
通った承認がブランチの Required approvals(必要な承認の数)に数えられるのは、次のすべてに当てはまるときだけです:
- 公式の承認であること。ブランチの保護のルールで Restrict approvals to allowlisted users or teams(承認を許可リストのユーザーかチームに限る。Forgejo では「whitelisted」)が入っていれば、そのリストのユーザーとチームの承認だけが数に入ります。入っていなければ、コードに書き込めるアカウントの承認だけです。
- 取り消されていないこと。Dismiss stale approvals(古くなった承認を取り消す)が入っていると、プルリクの変更の中身を変える push で承認が取り消されます。リポジトリの管理者もレビューを取り消せます。
- 古くないこと(ルールで Ignore stale approvals(古い承認を数えない)が入っているとき)。前のコミットに対して出され、その後に変更の中身が変わったレビューは「古い」になります。
数に入るのは、一人ひとりの最後の承認か変更の依頼です。
いまどうなっているか
curl -H "Authorization: token your-token" https://codeberg.org/api/v1/repos/OWNER/REPO/pulls/42/reviews
レビューにはそれぞれ、state(APPROVED・REQUEST_CHANGES・COMMENT、下書きは PENDING)・commit_id・official(公式か)・stale(古いか)・dismissed(取り消されたか)があります。対象のブランチ(GET /api/v1/repos/OWNER/REPO/branches/main)には protected と required_approvals があります。codeberg.org はあなたのサーバーの住所に置き換えてください。
直し方
- 自分のプルリク:ほかの人にレビューを頼む。コメントはできます。
- requires a body:何を変えてほしいかを書いて、変更の依頼をもう一度出す。
- 閉じたかマージ済み(Gitea):代わりにコメントを残す。判断がまだ要るなら、先にプルリクを開き直す。
- 数に入らない:コードに書き込める人か、許可リストに入っている人に頼む。新しいコミットが来たら、それを見てもう一度承認する。
IntelliJ IDEA で Forgejo・Gitea のプルリクを見るなら
Lesstep の Pull Request Inbox for Forgejo and Gitea は、JetBrains IDE(2024.1 以降)のプラグインです。承認と変更の依頼は、画面に出ていた先頭のコミットに対して出します。その後にブランチが動いていたら、何も送らずに読み直すように言います。変更の依頼では、どちらのサーバーも文を求めるので、先に何を変えてほしいかを尋ねます。サーバーがレビューを断ったときは、「approve your own pull is not allowed」のようにサーバーの文を見せます。読むだけのトークンなら、トークンを作るときの権限を伝えます。マージの条件では、公式の承認をブランチが求める数と比べ、レビュアーの一覧では前のコミットに対するレビューに印を付けます。読むのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
このページは Forgejo プロジェクト・Codeberg e.V.・Gitea プロジェクト・JetBrains のいずれとも提携しておらず、推奨・承認も受けていません。Forgejo・Gitea・Codeberg はそれぞれの持ち主の名前、IntelliJ IDEA は JetBrains s.r.o. の商標です。
ほかに:Forgejo・Gitea のマージの断り(405・409) · 「token does not have at least one of required scope(s)」 · 401「token is required」と知らないトークン · 404「The target couldn't be found.」と「not found」 · Forgejo・Gitea のブランチの更新の断り(403・409・422) · Forgejo・Gitea のプルリクが作れない(409・422・403) · Forgejo・Gitea のコメントの断り(403・422・400) · Forgejo・Gitea の検索の断り(400・422) · Forgejo・Gitea のプルリクの変更ファイル(50件ずつ・changed_files) · JetBrains の IDE で Forgejo・Gitea のプルリクを扱う · English