正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

マージリクエスト承認API

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

このAPIを使用して、マージリクエスト承認を管理します。

すべてのエンドポイントで認証が必要です。

マージリクエストを承認する

指定されたマージリクエストを承認します。現在認証済みユーザーは、承認が可能な承認者である必要があります。

shaパラメータは、マージリクエストの現在のバージョンを承認していることを保証します。定義されている場合、値はマージリクエストのHEADコミットSHAと一致する必要があります。不一致があると、409 Conflict応答が返されます。これは、マージリクエストの承認の動作と一致します。

POST /projects/:id/merge_requests/:merge_request_iid/approve

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approval_password文字列いいえ現在のユーザーのパスワード。プロジェクトの設定で、Require user re-authentication to approve(承認するにはユーザーの再認証を要求する)が有効になっている場合は、必須です。グループまたはGitLab Self-ManagedインスタンスがSAML認証を強制するように設定されている場合、常に失敗します。
merge_request_iid整数はいマージリクエストのIID。
sha文字列いいえマージリクエストのHEAD
{
  "id": 5,
  "iid": 5,
  "project_id": 1,
  "title": "Approvals API",
  "description": "Test",
  "state": "opened",
  "created_at": "2016-06-08T00:19:52.638Z",
  "updated_at": "2016-06-09T21:32:14.105Z",
  "merge_status": "can_be_merged",
  "approvals_required": 2,
  "approvals_left": 0,
  "approved_by": [
    {
      "user": {
        "name": "Administrator",
        "username": "root",
        "id": 1,
        "state": "active",
        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/root"
      },
      "approved_at": "2016-06-10T04:21:41.050Z"
    },
    {
      "user": {
        "name": "Nico Cartwright",
        "username": "ryley",
        "id": 2,
        "state": "active",
        "avatar_url": "http://www.gravatar.com/avatar/cf7ad14b34162a76d593e3affca2adca?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/ryley"
      },
      "approved_at": "2016-06-10T09:17:13.520Z"
    }
  ]
}

自動化されたマージリクエストの承認

APIを使用してマージリクエストを作成し、すぐに承認すると、自動化によってコミットが完全に処理される前に、マージリクエストが承認される可能性があります。デフォルトでは、新しいコミットをマージリクエストに追加すると、既存のすべての承認がリセットされます。この場合、アクティビティー領域には、次のような一連のメッセージがマージリクエストに表示されます:

  • (botname)が5分前にこのマージリクエストを承認しました
  • (botname)が5分前に1件のコミットを追加しました
  • (botname)が5分前にブランチにプッシュすることにより、(botname)から承認をリセットしました

コミットの処理が完了する前に自動承認が適用されないようにするには、自動化で次のようになるまで待機(またはsleep)関数を追加する必要があります:

  • detailed_merge_status属性が、checkingまたはapprovals_syncingのいずれの状態にもありません。
  • マージリクエストの差分にNULLではないpatch_id_shaが含まれています。

マージリクエストを却下する

指定されたマージリクエストから、現在認証済みユーザーの承認を削除します。

POST /projects/:id/merge_requests/:merge_request_iid/unapprove

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数はいマージリクエストのIID。

マージリクエストの承認をリセットする

指定されたマージリクエストのすべての承認をリセットします。

有効なプロジェクトまたはグループトークンを持つボットユーザーのみが利用できます。一般ユーザーには、401 Unauthorized応答が返されます。

PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数はいマージリクエストの内部ID。
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"

グループの承認ルール

これらのエンドポイントは、プロジェクトとその承認ルールに適用されます。すべてのエンドポイントで認証が必要です。

プロジェクトの承認設定を取得します

プロジェクトの承認設定を取得します。

GET /projects/:id/approvals

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
{
  "approvers": [], // Deprecated in GitLab 12.3, always returns empty
  "approver_groups": [], // Deprecated in GitLab 12.3, always returns empty
  "approvals_before_merge": 2, // Deprecated in GitLab 12.3, use Approval Rules instead
  "reset_approvals_on_push": true,
  "selective_code_owner_removals": false,
  "disable_overriding_approvers_per_merge_request": false,
  "merge_requests_author_approval": true,
  "merge_requests_disable_committers_approval": false,
  "require_password_to_approve": true, // Deprecated in 16.9, use require_reauthentication_to_approve instead
  "require_reauthentication_to_approve": true
}

プロジェクトの承認設定を更新する

プロジェクトの承認設定を更新します。現在認証済みユーザーは、承認が可能な承認者である必要があります。

POST /projects/:id/approvals

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approvals_before_merge(非推奨)整数いいえマージリクエストをマージするために必要な承認の数。GitLab 12.3で非推奨になりました。代わりに、承認ルールを作成します。
disable_overriding_approvers_per_merge_requestブール値いいえtrueの場合、マージリクエスト内の承認者のオーバーライドを防ぎます。
merge_requests_author_approvalブール値いいえtrueの場合、作成者は自分のマージリクエストを自己承認できます。
merge_requests_disable_committers_approvalブール値いいえtrueの場合、マージリクエストでコミットするユーザーは、それを承認できません。
require_password_to_approve(非推奨)ブール値いいえtrueの場合、承認者は、承認を追加する前にパスワードで認証する必要があります。GitLab 16.9で非推奨になりました。代わりにrequire_reauthentication_to_approveを使用してください。
require_reauthentication_to_approveブール値いいえtrueの場合、承認を追加する前に承認者の認証が必須になります。GitLab 17.1で導入されました。
reset_approvals_on_pushブール値いいえtrueの場合、プッシュ時に承認がリセットされます。
selective_code_owner_removalsブール値いいえtrueの場合、コードの所有者のファイルが変更されると、コードの所有者からの承認がリセットされます。このフィールドを使用するには、reset_approvals_on_pushfalseである必要があります。
{
  "approvals_before_merge": 2, // Use Approval Rules instead
  "reset_approvals_on_push": true,
  "selective_code_owner_removals": false,
  "disable_overriding_approvers_per_merge_request": false,
  "merge_requests_author_approval": false,
  "merge_requests_disable_committers_approval": false,
  "require_password_to_approve": true,
  "require_reauthentication_to_approve": true
}

プロジェクトのすべての承認ルールをリストする

指定されたプロジェクトのすべての承認ルールと、関連する詳細をリストします。

GET /projects/:id/approval_rules

承認ルールのリストを制限するには、pageおよびper_pageページネーションパラメータを使用します。

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
[
  {
    "id": 1,
    "name": "security",
    "rule_type": "regular",
    "report_type": null,
    "eligible_approvers": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      },
      {
        "id": 50,
        "name": "Group Member 1",
        "username": "group_member_1",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/group_member_1"
      }
    ],
    "approvals_required": 3,
    "users": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      }
    ],
    "groups": [
      {
        "id": 5,
        "name": "group1",
        "path": "group1",
        "description": "",
        "visibility": "public",
        "lfs_enabled": false,
        "avatar_url": null,
        "web_url": "http://localhost/groups/group1",
        "request_access_enabled": false,
        "full_name": "group1",
        "full_path": "group1",
        "parent_id": null,
        "ldap_cn": null,
        "ldap_access": null
      }
    ],
    "applies_to_all_protected_branches": false,
    "protected_branches": [
      {
        "id": 1,
        "name": "main",
        "push_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "Developers + Maintainers"
          }
        ],
        "merge_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "Developers + Maintainers"
          }
        ],
        "unprotect_access_levels": [
          {
            "access_level": 40,
            "access_level_description": "Maintainers"
          }
        ],
        "code_owner_approval_required": "false"
      }
    ],
    "contains_hidden_groups": false,
  },
  {
    "id": 2,
    "name": "Coverage-Check",
    "rule_type": "report_approver",
    "report_type": "code_coverage",
    "eligible_approvers": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      },
      {
        "id": 50,
        "name": "Group Member 1",
        "username": "group_member_1",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/group_member_1"
      }
    ],
    "approvals_required": 3,
    "users": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      }
    ],
    "groups": [
      {
        "id": 5,
        "name": "group1",
        "path": "group1",
        "description": "",
        "visibility": "public",
        "lfs_enabled": false,
        "avatar_url": null,
        "web_url": "http://localhost/groups/group1",
        "request_access_enabled": false,
        "full_name": "group1",
        "full_path": "group1",
        "parent_id": null,
        "ldap_cn": null,
        "ldap_access": null
      }
    ],
    "applies_to_all_protected_branches": false,
    "protected_branches": [
      {
        "id": 1,
        "name": "main",
        "push_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "Developers + Maintainers"
          }
        ],
        "merge_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "Developers + Maintainers"
          }
        ],
        "unprotect_access_levels": [
          {
            "access_level": 40,
            "access_level_description": "Maintainers"
          }
        ],
        "code_owner_approval_required": "false"
      }
    ],
    "contains_hidden_groups": false,
  }
]

プロジェクトの承認ルールを取得する

プロジェクトの指定された承認ルールに関する情報を取得します。

GET /projects/:id/approval_rules/:approval_rule_id

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approval_rule_id整数はい承認ルールのID。
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "report_type": null,
  "eligible_approvers": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 3,
  "users": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "applies_to_all_protected_branches": false,
  "protected_branches": [
    {
      "id": 1,
      "name": "main",
      "push_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "Maintainers"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}

プロジェクトの承認ルールを作成する

プロジェクトの承認ルールを作成します。

rule_typeフィールドは、次のルールタイプをサポートします:

  • any_approver: approvals_required0に設定された、事前設定済みのデフォルトルール。
  • regular: 通常のマージリクエストの承認ルールに使用されます。
  • report_approver: フィールドは、設定され有効になっているマージリクエスト承認ポリシーからGitLabが承認ルールを作成する際に使用されます。このAPIで承認ルールを作成するときは、この値を使用しないでください。
POST /projects/:id/approval_rules

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approvals_required整数はいこのルールに必要な承認の数。
name文字列はい承認ルールの名前。1024文字に制限されています。
applies_to_all_protected_branchesブール値いいえtrueの場合、ルールはすべての保護ブランチに適用され、protected_branch_ids属性は無視されます。
group_ids配列いいえ承認者としてのグループのID。
protected_branch_ids配列いいえルールの範囲を指定する保護ブランチのID。IDを識別するには、保護されたブランチをリスト APIを使用します。
report_type文字列いいえレポートタイプ。ルールタイプがreport_approverの場合に必須。サポートされているレポートタイプは、license_scanning(GitLab 15.9で非推奨になりました)とcode_coverageです。
rule_type文字列いいえルールタイプ。any_approverregular、およびreport_approverを含む、サポートされている値。
user_ids配列いいえ承認者としてのユーザーのID。usernamesと併用すると、ユーザーのリストが両方とも追加されます。
usernames文字列配列いいえ承認者のユーザー名。user_idsと併用すると、ユーザーのリストが両方とも追加されます。
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "applies_to_all_protected_branches": false,
  "protected_branches": [
    {
      "id": 1,
      "name": "main",
      "push_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "Maintainers"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}

必要な承認者のデフォルト数を0から増やすには、次のようにします:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header 'Content-Type: application/json' \
  --data '{"name": "Any name", "rule_type": "any_approver", "approvals_required": 2}' \
  --url "https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules"

別の例として、ユーザー固有のルールを作成する方法を次に示します:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header 'Content-Type: application/json' \
  --data '{"name": "Name of your rule", "approvals_required": 3, "user_ids": [123, 456, 789]}' \
  --url "https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules"

プロジェクトの承認ルールを更新する

プロジェクトの指定された承認ルールを更新します。このエンドポイントは、group_idsuser_ids、またはusernames属性で定義されていない承認者とグループを削除します。

usersまたはgroupsパラメータに含まれていない隠しグループ(ユーザーに表示する権限がないプライベートグループ)は、デフォルトで保持されます。それらを削除するには、remove_hidden_groupstrueに設定します。これにより、ユーザーが承認ルールを更新するときに、非表示のグループが誤って削除されなくなります。

PUT /projects/:id/approval_rules/:approval_rule_id

サポートされている属性:

属性必須説明
approval_rule_id整数はい承認ルールのID。
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
applies_to_all_protected_branchesブール値いいえtrueの場合、ルールはすべての保護ブランチに適用され、protected_branch_ids属性は無視されます。
approvals_required整数いいえこのルールに必要な承認の数。
group_ids配列いいえ承認者としてのグループのID。
name文字列いいえ承認ルールの名前。1024文字に制限されています。
protected_branch_ids配列いいえルールの範囲を指定する保護ブランチのID。IDを識別するには、保護されたブランチをリスト APIを使用します。
remove_hidden_groupsブール値いいえtrueの場合、承認ルールから隠しグループが削除されます。
user_ids配列いいえ承認者としてのユーザーのID。usernamesと併用すると、ユーザーのリストが両方とも追加されます。
usernames文字列配列いいえ承認者のユーザー名。user_idsと併用すると、ユーザーのリストが両方とも追加されます。
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "applies_to_all_protected_branches": false,
  "protected_branches": [
    {
      "id": 1,
      "name": "main",
      "push_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "Maintainers"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}

プロジェクトの承認ルールを削除する

指定されたプロジェクトの承認ルールを削除します。

DELETE /projects/:id/approval_rules/:approval_rule_id

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approval_rule_id整数はい承認ルールのID。

マージリクエストの承認ルール

これらのエンドポイントは、個々のマージリクエストに適用されます。すべてのエンドポイントで認証が必要です。

マージリクエストの承認状態を取得する

指定されたマージリクエストの承認状態を取得します。

応答では、approved_byには、承認が承認ルールを満たしているかどうかに関係なく、マージリクエストのすべての承認者に関する情報が含まれています。マージリクエストの承認ルールに関する詳細情報、および受信した承認がそれらのルールを満たしているかどうかについては、/approval_stateエンドポイントを参照してください。

GET /projects/:id/merge_requests/:merge_request_iid/approvals

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数はいマージリクエストのIID。
{
  "id": 5,
  "iid": 5,
  "project_id": 1,
  "title": "Approvals API",
  "description": "Test",
  "state": "opened",
  "created_at": "2016-06-08T00:19:52.638Z",
  "updated_at": "2016-06-08T21:20:42.470Z",
  "merge_status": "cannot_be_merged",
  "approvals_required": 2,
  "approvals_left": 1,
  "approved_by": [
    {
      "user": {
        "name": "Administrator",
        "username": "root",
        "id": 1,
        "state": "active",
        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/root"
      },
      "approved_at": "2016-06-09T01:45:21.720Z"
    }
  ]
}

マージリクエストの承認の詳細を取得する

指定されたマージリクエストの承認の詳細を取得します。

ユーザーがマージリクエストの承認ルールを変更した場合、応答には以下が含まれます:

  • approval_rules_overwritten: trueの場合、デフォルトの承認ルールが変更されたことを示します。
  • approved: trueの場合、関連付けられた承認ルールが承認されたことを示します。
  • approved_by: 定義されている場合は、関連付けられた承認ルールを承認したユーザーの詳細を示します。承認ルールに一致しないユーザーは返されません。すべての承認ユーザーを返すには、/approvalsエンドポイントを参照してください。
GET /projects/:id/merge_requests/:merge_request_iid/approval_state

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数はいマージリクエストのIID。
{
  "approval_rules_overwritten": true,
  "rules": [
    {
      "id": 1,
      "name": "Ruby",
      "rule_type": "regular",
      "eligible_approvers": [
        {
          "id": 4,
          "name": "John Doe",
          "username": "jdoe",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "http://localhost/jdoe"
        }
      ],
      "approvals_required": 2,
      "users": [
        {
          "id": 4,
          "name": "John Doe",
          "username": "jdoe",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "http://localhost/jdoe"
        }
      ],
      "groups": [],
      "contains_hidden_groups": false,
      "approved_by": [
        {
          "id": 4,
          "name": "John Doe",
          "username": "jdoe",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "http://localhost/jdoe"
        }
      ],
      "source_rule": null,
      "approved": true,
      "overridden": false
    }
  ]
}

マージリクエストのすべての承認ルールをリストする

指定されたマージリクエストのすべての承認ルールと、関連する詳細をリストします。

pageおよびper_pageページネーションパラメータを使用して、承認ルールのリストを制限します。

GET /projects/:id/merge_requests/:merge_request_iid/approval_rules

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
merge_request_iid整数はいマージリクエストのIID。
[
  {
    "id": 1,
    "name": "security",
    "rule_type": "regular",
    "report_type": null,
    "eligible_approvers": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      },
      {
        "id": 50,
        "name": "Group Member 1",
        "username": "group_member_1",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/group_member_1"
      }
    ],
    "approvals_required": 3,
    "source_rule": null,
    "users": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      }
    ],
    "groups": [
      {
        "id": 5,
        "name": "group1",
        "path": "group1",
        "description": "",
        "visibility": "public",
        "lfs_enabled": false,
        "avatar_url": null,
        "web_url": "http://localhost/groups/group1",
        "request_access_enabled": false,
        "full_name": "group1",
        "full_path": "group1",
        "parent_id": null,
        "ldap_cn": null,
        "ldap_access": null
      }
    ],
    "contains_hidden_groups": false,
    "overridden": false
  },
  {
    "id": 2,
    "name": "Coverage-Check",
    "rule_type": "report_approver",
    "report_type": "code_coverage",
    "eligible_approvers": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      },
      {
        "id": 50,
        "name": "Group Member 1",
        "username": "group_member_1",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/group_member_1"
      }
    ],
    "approvals_required": 3,
    "source_rule": null,
    "users": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      }
    ],
    "groups": [
      {
        "id": 5,
        "name": "group1",
        "path": "group1",
        "description": "",
        "visibility": "public",
        "lfs_enabled": false,
        "avatar_url": null,
        "web_url": "http://localhost/groups/group1",
        "request_access_enabled": false,
        "full_name": "group1",
        "full_path": "group1",
        "parent_id": null,
        "ldap_cn": null,
        "ldap_access": null
      }
    ],
    "contains_hidden_groups": false,
    "overridden": false
  }
]

特定のマージリクエストの承認ルールを取得する

特定のマージリクエストの承認ルールに関する情報を取得します。

GET /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approval_rule_id整数はい承認ルールのID。
merge_request_iid整数はいマージリクエストのIID。
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "report_type": null,
  "eligible_approvers": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 3,
  "source_rule": null,
  "users": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "contains_hidden_groups": false,
  "overridden": false
}

マージリクエストの承認ルールを作成する

特定のマージリクエストの承認ルールを作成します。approval_project_rule_idがプロジェクトからの既存の承認ルールのIDで設定されている場合、このエンドポイントは次のようになります:

  • プロジェクトのルールから、nameusers、およびgroupsの値をコピーします。
  • 指定したapprovals_required値を使用します。
POST /projects/:id/merge_requests/:merge_request_iid/approval_rules

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approvals_required整数はいこのルールに必要な承認の数。
merge_request_iid整数はいマージリクエストのIID。
name文字列はい承認ルールの名前。1024文字に制限されています。
approval_project_rule_id整数いいえプロジェクトの承認ルールのID。
group_ids配列いいえ承認者としてのグループのID。
user_ids配列いいえ承認者としてのユーザーのID。usernamesと併用すると、ユーザーのリストが両方とも追加されます。
usernames文字列配列いいえ承認者のユーザー名。user_idsと併用すると、ユーザーのリストが両方とも追加されます。
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "source_rule": null,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "contains_hidden_groups": false,
  "overridden": false
}

マージリクエストの承認ルールを更新する

マージリクエストの指定された承認ルールを更新します。このエンドポイントは、group_idsuser_ids、またはusernames属性に含まれていない承認者とグループを削除します。

report_approverまたはcode_ownerのルールはシステムによって生成されるため、編集できません。

PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approval_rule_id整数はい承認ルールのID。
merge_request_iid整数はいマージリクエストのIID。
approvals_required整数いいえこのルールに必要な承認の数。
group_ids配列いいえ承認者としてのグループのID。
name文字列いいえ承認ルールの名前。1024文字に制限されています。
remove_hidden_groupsブール値いいえtrueの場合、隠しグループを削除します。
user_ids配列いいえ承認者としてのユーザーのID。usernamesと併用すると、ユーザーのリストが両方とも追加されます。
usernames文字列配列いいえ承認者のユーザー名。user_idsと併用すると、ユーザーのリストが両方とも追加されます。
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "source_rule": null,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "contains_hidden_groups": false,
  "overridden": false
}

マージリクエストの承認ルールを削除する

指定されたマージリクエストの承認ルールを削除します。

DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id

report_approverまたはcode_ownerのルールはシステムによって生成されるため、編集できません。

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
approval_rule_id整数はい承認ルールのID。
merge_request_iid整数はいマージリクエストのIID。

グループの承認ルール

  • ステータス: 実験的機能

GitLab Self-Managedでは、デフォルトでこの機能は使用できません。管理者がapproval_group_rulesという名前の機能フラグを有効にすると、この機能を使用できるようになります。GitLab.comとGitLab Dedicatedでは、この機能は使用できません。この機能は本番環境での使用には対応していません。

グループ承認ルールは、グループに属するプロジェクトのすべての保護ブランチに適用されます。

グループのすべての承認ルールをリストする

指定されたグループのすべての承認ルールと、関連する詳細をリストします。グループ管理者に制限されています。

pageおよびper_pageページネーションパラメータを使用して、承認ルールのリストを制限します。

GET /groups/:id/approval_rules

サポートされている属性:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス

リクエスト例:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/29/approval_rules"

レスポンス例:

[
  {
    "id": 2,
    "name": "rule1",
    "rule_type": "any_approver",
    "report_type": null,
    "eligible_approvers": [],
    "approvals_required": 3,
    "users": [],
    "groups": [],
    "contains_hidden_groups": false,
    "protected_branches": [],
    "applies_to_all_protected_branches": true
  },
  {
    "id": 3,
    "name": "rule2",
    "rule_type": "code_owner",
    "report_type": null,
    "eligible_approvers": [],
    "approvals_required": 2,
    "users": [],
    "groups": [],
    "contains_hidden_groups": false,
    "protected_branches": [],
    "applies_to_all_protected_branches": true
  },
  {
    "id": 4,
    "name": "rule2",
    "rule_type": "report_approver",
    "report_type": "code_coverage",
    "eligible_approvers": [],
    "approvals_required": 2,
    "users": [],
    "groups": [],
    "contains_hidden_groups": false,
    "protected_branches": [],
    "applies_to_all_protected_branches": true
  }
]

グループの承認ルールを作成する

グループの承認ルールを作成します。グループ管理者に制限されています。

APIから承認ルールをビルドするときは、rule_typeフィールドを使用しないでください。フィールドは、次のルールタイプをサポートします:

POST /groups/:id/approval_rules

サポートされている属性:

属性必須説明
id整数または文字列はいグループのIDまたはURLエンコードされたパス
approvals_required整数はいこのルールに必要な承認の数。
name文字列はい承認ルールの名前。1024文字に制限されています。
group_ids配列いいえ承認者としてのグループのID。
rule_type文字列いいえルールタイプ。any_approverregular、およびreport_approverを含む、サポートされている値。
user_ids配列いいえ承認者としてのユーザーのID。

リクエスト例:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/29/approval_rules?name=security&approvals_required=2"

レスポンス例:

{
  "id": 5,
  "name": "security",
  "rule_type": "any_approver",
  "eligible_approvers": [],
  "approvals_required": 2,
  "users": [],
  "groups": [],
  "contains_hidden_groups": false,
  "protected_branches": [
    {
      "id": 5,
      "name": "master",
      "push_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "deploy_key_id": null,
          "user_id": null,
          "group_id": null
        }
      ],
      "merge_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "user_id": null,
          "group_id": null
        }
      ],
      "allow_force_push": false,
      "unprotect_access_levels": [],
      "code_owner_approval_required": false,
      "inherited": false
    }
  ],
  "applies_to_all_protected_branches": true
}

グループの承認ルールを更新する

グループの承認ルールを更新します。グループ管理者に制限されています。

APIから承認ルールをビルドするときは、rule_typeフィールドを使用しないでください。フィールドは、次のルールタイプをサポートします:

PUT /groups/:id/approval_rules/:approval_rule_id

サポートされている属性:

属性必須説明
approval_rule_id整数はい承認ルールのID。
id整数または文字列はいグループのIDまたはURLエンコードされたパス
approvals_required文字列いいえこのルールに必要な承認の数。
group_ids整数いいえ承認者としてのユーザーのID。
name文字列いいえ承認ルールの名前。1024文字に制限されています。
rule_type配列いいえルールタイプ。any_approverregular、およびreport_approverを含む、サポートされている値。
user_ids配列いいえ承認者としてのグループのID。

リクエスト例:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/29/approval_rules/5?name=security2&approvals_required=1"

レスポンス例:

{
  "id": 5,
  "name": "security2",
  "rule_type": "any_approver",
  "eligible_approvers": [],
  "approvals_required": 1,
  "users": [],
  "groups": [],
  "contains_hidden_groups": false,
  "protected_branches": [
    {
      "id": 5,
      "name": "master",
      "push_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "deploy_key_id": null,
          "user_id": null,
          "group_id": null
        }
      ],
      "merge_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "user_id": null,
          "group_id": null
        }
      ],
      "allow_force_push": false,
      "unprotect_access_levels": [],
      "code_owner_approval_required": false,
      "inherited": false
    }
  ],
  "applies_to_all_protected_branches": true
}