From 17581cd56f155609d11fa820d10890a5b45493ee Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Fri, 7 Mar 2025 22:25:37 +0200 Subject: [PATCH 1/3] Use repo api token for webhooks and set repositories when available --- .../utils/github_repository_settings.py | 29 +++++++++---------- webhook_server_container/utils/webhook.py | 12 +++----- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/webhook_server_container/utils/github_repository_settings.py b/webhook_server_container/utils/github_repository_settings.py index d2391be8..c2de837b 100644 --- a/webhook_server_container/utils/github_repository_settings.py +++ b/webhook_server_container/utils/github_repository_settings.py @@ -196,7 +196,7 @@ def get_repo_branch_protection_rules(config_data: dict[str, Any], repo_data: dic return repo_data -def set_repositories_settings(config_: Config, github_api: Github) -> None: +def set_repositories_settings(config_: Config) -> None: logger = get_logger_with_params(name="github-repository-settings") logger.info("Processing repositories") @@ -214,6 +214,8 @@ def set_repositories_settings(config_: Config, github_api: Github) -> None: futures = [] with ThreadPoolExecutor() as executor: for _, data in config_data["repositories"].items(): + github_api, _ = get_api_with_highest_rate_limit(config=config, repository_name=data["name"]) + data = get_repo_branch_protection_rules(config_data=config_data, repo_data=data) futures.append( executor.submit( @@ -229,15 +231,17 @@ def set_repositories_settings(config_: Config, github_api: Github) -> None: get_future_results(futures=futures) -def set_repository( - data: Dict[str, Any], github_api: Github, default_status_checks: List[str] -) -> Tuple[bool, str, Callable]: +def set_repository(data: Dict[str, Any], default_status_checks: List[str]) -> Tuple[bool, str, Callable]: logger = get_logger_with_params(name="github-repository-settings") repository: str = data["name"] logger.info(f"Processing repository {repository}") protected_branches: Dict[str, Any] = data.get("protected-branches", {}) repo_branch_protection_rules: Dict[str, Any] = data["branch_protection"] + github_api, _ = get_api_with_highest_rate_limit(config=config, repository_name=repository) + if not github_api: + return False, f"{repository}: Failed to get github api", logger.error + repo = _get_github_repo_api(github_api=github_api, repository=repository) if not repo: return False, f"{repository}: Failed to get repository", logger.error @@ -294,7 +298,7 @@ def set_repository( return True, f"{repository}: Setting repository settings is done", logger.info -def set_all_in_progress_check_runs_to_queued(config_: Config, github_api: Github) -> None: +def set_all_in_progress_check_runs_to_queued(config_: Config) -> None: check_runs = ( PYTHON_MODULE_INSTALL_STR, CAN_BE_MERGED_STR, @@ -306,6 +310,7 @@ def set_all_in_progress_check_runs_to_queued(config_: Config, github_api: Github with ThreadPoolExecutor() as executor: for _, data in config_.data["repositories"].items(): + github_api, _ = get_api_with_highest_rate_limit(config=config, repository_name=data["name"]) futures.append( executor.submit( set_repository_check_runs_to_queued, @@ -382,13 +387,7 @@ def get_repository_github_app_api(config_: Config, repository_name: str) -> Opti logger = get_logger_with_params(name="github-repository-settings") config = Config() - api, _ = get_api_with_highest_rate_limit(config=config) - if api: - set_repositories_settings(config_=config, github_api=api) - set_all_in_progress_check_runs_to_queued( - config_=config, - github_api=api, - ) - - else: - logger.error("Failed to get GitHub API") + set_repositories_settings(config_=config) + set_all_in_progress_check_runs_to_queued( + config_=config, + ) diff --git a/webhook_server_container/utils/webhook.py b/webhook_server_container/utils/webhook.py index 56615e00..162eaa40 100644 --- a/webhook_server_container/utils/webhook.py +++ b/webhook_server_container/utils/webhook.py @@ -1,8 +1,8 @@ from concurrent.futures import ThreadPoolExecutor from typing import Any, Callable, Dict, List, Tuple -from github.Hook import Hook from github import Github +from github.Hook import Hook from webhook_server_container.libs.config import Config from webhook_server_container.utils.helpers import ( @@ -12,7 +12,6 @@ get_logger_with_params, ) - LOGGER = get_logger_with_params(name="webhook") @@ -39,13 +38,14 @@ def process_github_webhook(data: Dict[str, Any], github_api: Github, webhook_ip: return True, f"{repository}: Create webhook is done", LOGGER.info -def create_webhook(config_: Config, github_api: Github) -> None: +def create_webhook(config_: Config) -> None: LOGGER.info("Preparing webhook configuration") webhook_ip = config_.data["webhook_ip"] futures = [] with ThreadPoolExecutor() as executor: for _, data in config_.data["repositories"].items(): + github_api, _ = get_api_with_highest_rate_limit(config=config, repository_name=data["name"]) futures.append( executor.submit( process_github_webhook, @@ -58,8 +58,4 @@ def create_webhook(config_: Config, github_api: Github) -> None: if __name__ == "__main__": config = Config() - api, _ = get_api_with_highest_rate_limit(config=config) - if api: - create_webhook(config_=config, github_api=api) - else: - LOGGER.error("Failed to get GitHub API") + create_webhook(config_=config) From 48f35a3b5105ab59e728066a388c2dfd98c3bf1e Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Fri, 7 Mar 2025 22:28:08 +0200 Subject: [PATCH 2/3] Use repo api token for webhooks and set repositories when available --- webhook_server_container/utils/github_repository_settings.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/webhook_server_container/utils/github_repository_settings.py b/webhook_server_container/utils/github_repository_settings.py index c2de837b..c1cf2a7e 100644 --- a/webhook_server_container/utils/github_repository_settings.py +++ b/webhook_server_container/utils/github_repository_settings.py @@ -214,15 +214,12 @@ def set_repositories_settings(config_: Config) -> None: futures = [] with ThreadPoolExecutor() as executor: for _, data in config_data["repositories"].items(): - github_api, _ = get_api_with_highest_rate_limit(config=config, repository_name=data["name"]) - data = get_repo_branch_protection_rules(config_data=config_data, repo_data=data) futures.append( executor.submit( set_repository, **{ "data": data, - "github_api": github_api, "default_status_checks": default_status_checks, }, ) From 4a28b7f2c718ab5528f0cbb30055e5ee7cfecca2 Mon Sep 17 00:00:00 2001 From: Meni Yakove Date: Fri, 7 Mar 2025 22:31:18 +0200 Subject: [PATCH 3/3] Fix tests --- webhook_server_container/tests/test_pull_request_owners.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/webhook_server_container/tests/test_pull_request_owners.py b/webhook_server_container/tests/test_pull_request_owners.py index 5fbc57ec..fcfe3c6a 100644 --- a/webhook_server_container/tests/test_pull_request_owners.py +++ b/webhook_server_container/tests/test_pull_request_owners.py @@ -1,6 +1,6 @@ -import pytest - import yaml + +import pytest from webhook_server_container.tests.conftest import ContentFile, Tree from webhook_server_container.utils.constants import APPROVED_BY_LABEL_PREFIX @@ -12,7 +12,7 @@ def __init__(self): def get_git_tree(self, sha: str, recursive: bool): return Tree("") - def get_contents(self, path: str): + def get_contents(self, path: str, ref): owners_data = yaml.dump({ "approvers": ["root_approver1", "root_approver2"], "reviewers": ["root_reviewer1", "root_reviewer2"],