Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cumulusci_ado/cumulusci_plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ plugins:
organisation_artifact: False # When True artifacts are created at Organisation level otherwise, its project level.
feed_name: SFCore Packages # Default feed name for salesforce packages
artifact_folder_path: # Artifact folder in repo to upload for salesforce packages
pull_request_approve_on_merge: True # When True, the created pull request is approved on merge.
services:
azure_devops:
description: Configure connection for Azure DevOps Server
Expand Down
35 changes: 35 additions & 0 deletions cumulusci_ado/vcs/ado/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
GitStatusContext,
GitTargetVersionDescriptor,
GitVersionDescriptor,
IdentityRefWithVote,
TeamProjectReference,
)
from azure.devops.v7_0.upack_api.models import JsonPatchOperation, PackageVersionDetails
Expand Down Expand Up @@ -476,6 +477,40 @@ def merge(self) -> None:
# Set auto-complete with completion options
self.set_auto_complete(completion_options)

if self.repo.config("pull_request_approve_on_merge"):
self.approve_pull_request()

def approve_pull_request(self) -> None:
"""Approves the pull request."""
try:
reviewer_id = (
self.pull_request.created_by.id
if self.pull_request.created_by
else None
)
if not reviewer_id:
raise AzureDevOpsServiceError(
"Cannot approve pull request because reviewer identity is missing."
)

reviewer_vote = IdentityRefWithVote(id=reviewer_id, vote=10)
reviewer = self.repo.git_client.create_pull_request_reviewer(
reviewer=reviewer_vote,
repository_id=self.repo.id,
pull_request_id=self.number,
reviewer_id=reviewer_id,
project=self.repo.project_id,
)
self.repo.logger.info(
f"{reviewer.display_name or reviewer.id or 'Unknown'} approved pull request #{self.number}."
)
except AzureDevOpsServiceError as e:
e.message = f"Failed to approve pull request #{self.number}: {e.message}"
raise AzureDevOpsServiceError(e)
except Exception as ex:
message = f"Unexpected error during pull request approval: {str(ex)}"
raise Exception(message)

def set_auto_complete(
self, completion_options: GitPullRequestCompletionOptions
) -> None:
Expand Down
Loading