From df151d76a32baa972aa28dbca97beb58d0c0c035 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Wed, 24 Apr 2024 13:15:11 +0300 Subject: [PATCH] User can set extra required labels to set PR as ca be merged --- example.config.yaml | 12 ++++++++++-- webhook_server_container/libs/github_api.py | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/example.config.yaml b/example.config.yaml index 89242fc5..b993d9b0 100644 --- a/example.config.yaml +++ b/example.config.yaml @@ -12,7 +12,7 @@ docker: # Used to pull images from docker.io default-status-checks: - "WIP" - "dpulls" - - "Inclusive Language", + - "Inclusive Language" - "can-be-merged" auto-verified-and-merged-users: @@ -26,7 +26,8 @@ repositories: verified_job: true pypi: token: - events: # To listen to all events do not send events + + events: # To listen to all events do not send events - push - pull_request - issue_comment @@ -34,6 +35,7 @@ repositories: - pull_request_review tox: all # Run all tests in tox.ini pre-commit: true # Run pre-commit check + protected-branches: dev: [] main: # set [] in order to set all defaults run included @@ -53,8 +55,14 @@ repositories: - build-arg2=2 args: # args to send to podman build command - --format docker + auto-verified-and-merged-users: # override auto verified users per repository - "my[bot]" + github-tokens: # override GitHub tokens per repository - - + + can-be-merged-required-labels: # check for extra labels to set PR as can be merged + - my-label1 + - my-label2 diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index fdfed05a..c22b8755 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -89,6 +89,7 @@ def __init__(self, hook_data, repositories_app_api, missing_app_repositories): self.repository_full_name = None self.github_app_id = None self.container_release = None + self.can_be_merged_required_labels = [] # End of filled by self._repo_data_from_config() self.config = Config() @@ -295,6 +296,7 @@ def _repo_data_from_config(self): "auto-verified-and-merged-users", repo_data.get("auto-verified-and-merged-users", []), ) + self.can_be_merged_required_labels = config_data.get("can-be-merged-required-labels", []) def _get_pull_request(self, number=None): if number: @@ -1240,6 +1242,8 @@ def check_if_can_be_merged(self): self._remove_label(label=CAN_BE_MERGED_STR) failure_output += f"Some check runs failed: {failed_check_runs}\n" + self.app.logger.info(f"{self.log_prefix} check if can be merged. PR labels are: {_labels}") + for _label in _labels: if CHANGED_REQUESTED_BY_LABEL_PREFIX.lower() in _label.lower(): change_request_user = _label.split("-")[-1] @@ -1247,8 +1251,6 @@ def check_if_can_be_merged(self): self._remove_label(label=CAN_BE_MERGED_STR) failure_output += "PR has changed requests from approvers\n" - self.app.logger.info(f"{self.log_prefix} check if can be merged. PR labels are: {_labels}") - pr_approved = False for _label in _labels: if APPROVED_BY_LABEL_PREFIX.lower() in _label.lower(): @@ -1257,6 +1259,15 @@ def check_if_can_be_merged(self): pr_approved = True break + missing_required_labels = [] + for _req_label in self.can_be_merged_required_labels: + if _req_label not in _labels: + missing_required_labels.append(_req_label) + + if missing_required_labels: + self._remove_label(label=CAN_BE_MERGED_STR) + failure_output += f"Missing required labels: {missing_required_labels}\n" + if pr_approved and not failure_output: self._add_label(label=CAN_BE_MERGED_STR) self.set_merge_check_success()