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
3 changes: 3 additions & 0 deletions example.config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,6 @@ repositories:
required_approving_review_count: 1
required_linear_history: True
required_conversation_resolution: True

set-auto-merge-prs:
- main
23 changes: 15 additions & 8 deletions webhook_server_container/config/schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -171,12 +171,19 @@ properties:
type: boolean
required_conversation_resolution:
type: boolean
can-be-merged-required-labels:
type: array
items:
type: string
jira-tracking:
type: boolean
default: true

conventional-title: string
set-auto-merge-prs:
description: Set auto merge for pull requests for specific branches
type: array
items:
type: string

can-be-merged-required-labels:
type: array
items:
type: string
jira-tracking:
type: boolean
default: true

conventional-title: string
18 changes: 13 additions & 5 deletions webhook_server_container/libs/github_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ def _repo_data_from_config(self) -> None:
value="can-be-merged-required-labels", return_on_none=[]
)
self.conventional_title: str = self.config.get_value(value="conventional-title")
self.set_auto_merge_prs: list[str] = self.config.get_value(value="set-auto-merge-prs", return_on_none=[])

def _get_pull_request(self, number: int | None = None) -> PullRequest:
if number:
Expand Down Expand Up @@ -834,8 +835,7 @@ def process_pull_request_webhook_data(self) -> None:
if hook_action == "edited":
self.set_wip_label_based_on_title()

if hook_action == "opened":
self.logger.info(f"{self.log_prefix} Creating welcome comment")
if hook_action in ("opened", "reopened"):
pull_request_opened_futures: list[Future] = []
with ThreadPoolExecutor() as executor:
pull_request_opened_futures.append(
Expand All @@ -844,11 +844,13 @@ def process_pull_request_webhook_data(self) -> None:
pull_request_opened_futures.append(executor.submit(self.create_issue_for_new_pull_request))
pull_request_opened_futures.append(executor.submit(self.set_wip_label_based_on_title))
pull_request_opened_futures.append(executor.submit(self.process_opened_or_synchronize_pull_request))
pull_request_opened_futures.append(executor.submit(self.set_pull_request_automerge))

if self.jira_track_pr:
pull_request_opened_futures.append(executor.submit(self.create_jira_when_open_pull_reques))

# Set automerge only after all initialization of a new PR is done.
self.set_pull_request_automerge()

for result in as_completed(pull_request_opened_futures):
if _exp := result.exception():
self.logger.error(f"{self.log_prefix} {_exp}")
Expand Down Expand Up @@ -2017,12 +2019,18 @@ def add_pull_request_owner_as_assingee(self) -> None:
self.pull_request.add_to_assignees(self.root_approvers[0])

def set_pull_request_automerge(self) -> None:
if self.parent_committer in self.auto_verified_and_merged_users:
self.logger.error(f"AUTO_MERGE: {self.pull_request_branch} in {self.set_auto_merge_prs}")
auto_merge = (
self.pull_request_branch in self.set_auto_merge_prs
or self.parent_committer in self.auto_verified_and_merged_users
)
self.logger.debug(f"{self.log_prefix} auto_merge: {auto_merge}, branch: {self.pull_request_branch}")
if auto_merge:
try:
if not self.pull_request.raw_data.get("auto_merge"):
self.logger.info(
f"{self.log_prefix} will be merged automatically. owner: {self.parent_committer} "
f"is part of auto merge enabled users"
f"is part of auto merge enabled rules"
)

self.pull_request.enable_automerge(merge_method="SQUASH")
Expand Down