module Gitlab::Client::MergeRequestApprovals

Defines methods related to MR Approvals. @see docs.gitlab.com/ee/api/merge_request_approvals.html

Public Instance Methods

approve_merge_request(project, merge_request, options = {}) click to toggle source

Approve a merge request

@example

Gitlab.approve_merge_request(1, 5)
Gitlab.approve_merge_request(1, 5, sha: 'fe678da')

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge request. @option options [String] :sha(optional) The HEAD of the MR @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project

# File lib/gitlab/client/merge_request_approvals.rb, line 236
def approve_merge_request(project, merge_request, options = {})
  post("/projects/#{url_encode project}/merge_requests/#{merge_request}/approve", body: options)
end
create_merge_request_level_rule(project, merge_request, options = {}) click to toggle source

Create merge request level rule

@example

Gitlab.create_merge_request_level_rule(1, 2, {
  name: "devs",
  approvals_required: 2,
  approval_project_rule_id: 99,
  user_ids: [3, 4],
  group_ids: [5, 6],
})

Important: When approval_project_rule_id is set, the name, users and groups of project-level rule are copied. The approvals_required specified is used.

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge request. @option options [String] :name(required) The name of the approval rule @option options [Integer] :approvals_required(required) The number of required approvals for this rule @option options [Integer] :approval_project_rule_id(optional) The ID of a project-level approval rule @option options [Array] :user_ids(optional) The ids of users as approvers @option options [Array] :group_ids(optional) The ids of groups as approvers @return [Gitlab::ObjectifiedHash] New MR level approval rule

# File lib/gitlab/client/merge_request_approvals.rb, line 168
def create_merge_request_level_rule(project, merge_request, options = {})
  post("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules", body: options)
end
create_project_merge_request_approval_rule(project, options = {}) click to toggle source

Create MR Approval Rule for a project

@example

Gitlab.create_project_merge_request_approval_rule(1, {name: "security", approvals_required: 1})

@param [Integer] project(required) The ID of a project. @option options [String] :name(required) The name of the approval rule @option options [Integer] :approvals_required(required) The number of required approvals for this rule @option options [Array] :user_ids(optional) The ids of users as approvers @option options [Array] :group_ids(optional) The ids of groups as approvers @option options [Array] :protected_branch_ids(optional) The ids of protected branches to scope the rule by @return [Gitlab::ObjectifiedHash] New MR approval rule

# File lib/gitlab/client/merge_request_approvals.rb, line 57
def create_project_merge_request_approval_rule(project, options = {})
  post("/projects/#{url_encode project}/approval_rules", body: options)
end
delete_merge_request_level_rule(project, merge_request, appr_rule_id) click to toggle source

Delete merge request level rule

@example

Gitlab.delete_merge_request_level_rule(1, 2, 69)

Important: Deleting a report_approver or code_owner rule is not allowed. These are system generated rules.

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge request. @param [Integer] appr_rule_id(required) The ID of a approval rule @return [void] This API call returns an empty response body

# File lib/gitlab/client/merge_request_approvals.rb, line 222
def delete_merge_request_level_rule(project, merge_request, appr_rule_id)
  delete("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules/#{appr_rule_id}")
end
delete_project_merge_request_approval_rule(project, approval_rule_id) click to toggle source

Delete MR Approval Rule for a project

@example

Gitlab.delete_project_merge_request_approval_rule(1, 1)

@param [Integer] project(required) The ID of a project. @param [Integer] approval_rule_id(required) The ID of a approval rule @return [void] This API call returns an empty response body

# File lib/gitlab/client/merge_request_approvals.rb, line 86
def delete_project_merge_request_approval_rule(project, approval_rule_id)
  delete("/projects/#{url_encode project}/approval_rules/#{approval_rule_id}")
end
edit_merge_request_approvals(project, merge_request, options = {}) click to toggle source

Change configuration for approvals on a specific merge request.

@example

Gitlab.edit_merge_request_approvals(1, 5, approvals_required: 2)

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge_request. @option options [Integer] :approvals_required(required) Approvals required before MR can be merged @return [Gitlab::ObjectifiedHash] Updated MR approval configuration information about the merge request

# File lib/gitlab/client/merge_request_approvals.rb, line 126
def edit_merge_request_approvals(project, merge_request, options = {})
  post("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvals", body: options)
end
edit_merge_request_approvers(project, merge_request, options = {}) click to toggle source

Change allowed approvers and approver groups for a merge request @deprecated Since Gitlab 13.12 /approvers endpoints are removed!!! See Gitlab.create_merge_request_level_rule

@example

Gitlab.edit_merge_request_approvers(1, 5, {approver_ids: [5], approver_groups: [1]})

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge_request. @option options [Array] :approver_ids(required, nil if none) An array of User IDs that can approve MRs @option options [Array] :approver_group_ids(required, nil if none) An array of Group IDs whose members can approve MRs @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project

# File lib/gitlab/client/merge_request_approvals.rb, line 142
def edit_merge_request_approvers(project, merge_request, options = {})
  put("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvers", body: options)
end
edit_project_approvers(project, options = {}) click to toggle source

Change allowed approvers and approver groups for a project @deprecated Since Gitlab 13.12 /approvers endpoints are removed!!! See Gitlab.create_project_merge_request_approval_rule

@example

Gitlab.edit_project_approvers(1, {approver_ids: [5], approver_groups: [1]})

@param [Integer] project(required) The ID of a project. @option options [Array] :approver_ids(required, nil if none) An array of User IDs that can approve MRs @option options [Array] :approver_group_ids(required, nil if none) An array of Group IDs whose members can approve MRs @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project

# File lib/gitlab/client/merge_request_approvals.rb, line 101
def edit_project_approvers(project, options = {})
  put("/projects/#{url_encode project}/approvers", body: options)
end
edit_project_merge_request_approvals(project, options = {}) click to toggle source

Change MR Approval Configuration for a project

@example

Gitlab.edit_project_merge_request_approvals(1, {approvals_before_merge: 3})
Gitlab.edit_project_merge_request_approvals(1, {approvals_before_merge: 3, reset_approvals_on_push: true})
Gitlab.edit_project_merge_request_approvals(1, {approvals_before_merge: 3, disable_overriding_approvers_per_merge_request: false})

@param [Integer] project(required) The ID of a project. @option options [Integer] :approvals_before_merge(optional) How many approvals are required before an MR can be merged @option options [Boolean] :reset_approvals_on_push(optional) Reset approvals on a new push @option options [Boolean] :disable_overriding_approvers_per_merge_request(optional) Allow/Disallow overriding approvers per MR @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project

# File lib/gitlab/client/merge_request_approvals.rb, line 30
def edit_project_merge_request_approvals(project, options = {})
  post("/projects/#{url_encode project}/approvals", body: options)
end
merge_request_approval_state(project, id) click to toggle source

Get the approval state of merge requests

@example

Gitlab.merge_request_approval_state(5, 36)

@param [Integer, String] project The ID or name of a project. @param [Integer] id The ID of a merge request. @return [Array<Gitlab::ObjectifiedHash>]

# File lib/gitlab/client/merge_request_approvals.rb, line 261
def merge_request_approval_state(project, id)
  get("/projects/#{url_encode project}/merge_requests/#{id}/approval_state")
end
merge_request_approvals(project, merge_request) click to toggle source

Get Configuration for approvals on a specific Merge Request.

@example

Gitlab.merge_request_approvals(1, 5)

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge_request. @return [Gitlab::ObjectifiedHash] MR approval configuration information about the merge request

# File lib/gitlab/client/merge_request_approvals.rb, line 113
def merge_request_approvals(project, merge_request)
  get("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvals")
end
merge_request_level_rule(project, merge_request) click to toggle source

Get merge request level rule

@example

Gitlab.merge_request_level_rule(1, 2)

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge request. @return [Gitlab::ObjectifiedHash] New MR level approval rule

# File lib/gitlab/client/merge_request_approvals.rb, line 180
def merge_request_level_rule(project, merge_request)
  get("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules")
end
project_merge_request_approval_rules(project) click to toggle source

Gets MR Approval Rules for a project

@example

Gitlab.project_merge_request_approval_rules(1)

@param [Integer] project The ID of a project. @return [Gitlab::ObjectifiedHash] MR approval rules for the project

# File lib/gitlab/client/merge_request_approvals.rb, line 41
def project_merge_request_approval_rules(project)
  get("/projects/#{url_encode project}/approval_rules")
end
project_merge_request_approvals(project) click to toggle source

Gets MR Approval Configuration for a project

@example

Gitlab.project_merge_request_approvals(1)

@param [Integer] project The ID of a project. @return [Gitlab::ObjectifiedHash] MR approval configuration information about the project

# File lib/gitlab/client/merge_request_approvals.rb, line 14
def project_merge_request_approvals(project)
  get("/projects/#{url_encode project}/approvals")
end
unapprove_merge_request(project, merge_request, options = {}) click to toggle source

Unapprove a merge request

@example

Gitlab.unapprove_merge_request(1, 5)

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge request. @option options [String] :sudo(optional) The username of the user you want to remove the approval for @return [void] This API call returns an empty response body.

# File lib/gitlab/client/merge_request_approvals.rb, line 249
def unapprove_merge_request(project, merge_request, options = {})
  post("/projects/#{url_encode project}/merge_requests/#{merge_request}/unapprove", body: options)
end
update_merge_request_level_rule(project, merge_request, appr_rule_id, options = {}) click to toggle source

Update merge request level rule

@example

Gitlab.update_merge_request_level_rule(1, 2, 69, {
  name: "devs",
  approvals_required: 2,
  user_ids: [3, 4],
  group_ids: [5, 6],
})

Important: Approvers and groups not in the users/groups parameters are removed Important: Updating a report_approver or code_owner rule is not allowed. These are system generated rules.

@param [Integer] project(required) The ID of a project. @param [Integer] merge_request(required) The IID of a merge request. @param [Integer] appr_rule_id(required) The ID of a approval rule @option options [String] :name(required) The name of the approval rule @option options [Integer] :approvals_required(required) The number of required approvals for this rule @option options [Array] :user_ids(optional) The ids of users as approvers @option options [Array] :group_ids(optional) The ids of groups as approvers @return [Gitlab::ObjectifiedHash] Updated MR level approval rule

# File lib/gitlab/client/merge_request_approvals.rb, line 206
def update_merge_request_level_rule(project, merge_request, appr_rule_id, options = {})
  put("/projects/#{url_encode project}/merge_requests/#{merge_request}/approval_rules/#{appr_rule_id}", body: options)
end
update_project_merge_request_approval_rule(project, approval_rule_id, options = {}) click to toggle source

Update MR Approval Rule for a project

@example

Gitlab.update_project_merge_request_approval_rule(1, {name: "security", approvals_required: 2})

@param [Integer] project(required) The ID of a project. @param [Integer] approval_rule_id(required) The ID of a project Approval Rule @option options [String] :name(required) The name of the approval rule @option options [Integer] :approvals_required(required) The number of required approvals for this rule @option options [Array] :user_ids(optional) The ids of users as approvers @option options [Array] :group_ids(optional) The ids of groups as approvers @option options [Array] :protected_branch_ids(optional) The ids of protected branches to scope the rule by @return [Gitlab::ObjectifiedHash] Updated MR approval rule

# File lib/gitlab/client/merge_request_approvals.rb, line 74
def update_project_merge_request_approval_rule(project, approval_rule_id, options = {})
  put("/projects/#{url_encode project}/approval_rules/#{approval_rule_id}", body: options)
end