diff --git a/example.config.yaml b/example.config.yaml index 1e7d55bb..7f234ab5 100644 --- a/example.config.yaml +++ b/example.config.yaml @@ -109,3 +109,6 @@ repositories: required_approving_review_count: 1 required_linear_history: True required_conversation_resolution: True + + set-auto-merge-prs: + - main diff --git a/webhook_server_container/config/schema.yaml b/webhook_server_container/config/schema.yaml index 80373275..78b38731 100644 --- a/webhook_server_container/config/schema.yaml +++ b/webhook_server_container/config/schema.yaml @@ -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 diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index 33725aed..c2082b6b 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -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: @@ -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( @@ -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}") @@ -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")