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
12 changes: 10 additions & 2 deletions example.config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -26,14 +26,16 @@ repositories:
verified_job: true
pypi:
token: <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
- check_run
- 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
Expand All @@ -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
- <GITHUB TOKEN1>
- <GITHUB TOKEN2>

can-be-merged-required-labels: # check for extra labels to set PR as can be merged
- my-label1
- my-label2
15 changes: 13 additions & 2 deletions webhook_server_container/libs/github_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -1240,15 +1242,15 @@ 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]
if change_request_user in self.approvers:
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():
Expand All @@ -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()
Expand Down