Add ci_config.StatusNames class for common statuses

This commit is contained in:
Mikhail f. Shiryaev 2024-04-17 15:11:42 +02:00
parent 2ba5b7fd23
commit 76911c9fca
No known key found for this signature in database
GPG Key ID: 4B02ED204C7D93F4
5 changed files with 33 additions and 26 deletions

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python3
from copy import deepcopy
import logging
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
from copy import deepcopy
from dataclasses import dataclass, field
from pathlib import Path
from typing import Callable, Dict, Iterable, List, Literal, Optional, Union
@ -181,6 +181,13 @@ class JobNames(metaclass=WithIter):
BUGFIX_VALIDATE = "Bugfix validation"
class StatusNames(metaclass=WithIter):
"Class with statuses that aren't related to particular jobs"
CI = "CI running"
MERGEABLE = "Mergeable Check"
SYNC = "A Sync"
# dynamically update JobName with Build jobs
for attr_name in dir(Build):
if not attr_name.startswith("__") and not callable(getattr(Build, attr_name)):
@ -1348,7 +1355,7 @@ CI_CONFIG.validate()
# checks required by Mergeable Check
REQUIRED_CHECKS = [
"PR Check",
"A Sync", # Cloud sync
StatusNames.SYNC,
JobNames.BUILD_CHECK,
JobNames.BUILD_CHECK_SPECIAL,
JobNames.DOCS_CHECK,
@ -1461,9 +1468,9 @@ CHECK_DESCRIPTIONS = [
lambda x: x.startswith("Integration tests ("),
),
CheckDescription(
"Mergeable Check",
StatusNames.MERGEABLE,
"Checks if all other necessary checks are successful",
lambda x: x == "Mergeable Check",
lambda x: x == StatusNames.MERGEABLE,
),
CheckDescription(
"Performance Comparison",

View File

@ -17,7 +17,7 @@ from github.GithubObject import NotSet
from github.IssueComment import IssueComment
from github.Repository import Repository
from ci_config import CHECK_DESCRIPTIONS, REQUIRED_CHECKS, CheckDescription
from ci_config import CHECK_DESCRIPTIONS, REQUIRED_CHECKS, CheckDescription, StatusNames
from env_helper import GITHUB_REPOSITORY, GITHUB_RUN_URL, TEMP_PATH
from lambda_shared_package.lambda_shared.pr import Labels
from pr_info import PRInfo
@ -36,9 +36,7 @@ from upload_result_helper import upload_results
RETRY = 5
CommitStatuses = List[CommitStatus]
MERGEABLE_NAME = "Mergeable Check"
GH_REPO = None # type: Optional[Repository]
CI_STATUS_NAME = "CI running"
STATUS_FILE_PATH = Path(TEMP_PATH) / "status.json"
@ -159,16 +157,16 @@ def set_status_comment(commit: Commit, pr_info: PRInfo) -> None:
if not statuses:
return
if not [status for status in statuses if status.context == CI_STATUS_NAME]:
if not [status for status in statuses if status.context == StatusNames.CI]:
# This is the case, when some statuses already exist for the check,
# but not the CI_STATUS_NAME. We should create it as pending.
# but not the StatusNames.CI. We should create it as pending.
# W/o pr_info to avoid recursion, and yes, one extra create_ci_report
post_commit_status(
commit,
PENDING,
create_ci_report(pr_info, statuses),
"The report for running CI",
CI_STATUS_NAME,
StatusNames.CI,
)
# We update the report in generate_status_comment function, so do it each
@ -300,7 +298,7 @@ def create_ci_report(pr_info: PRInfo, statuses: CommitStatuses) -> str:
)
)
return upload_results(
S3Helper(), pr_info.number, pr_info.sha, test_results, [], CI_STATUS_NAME
S3Helper(), pr_info.number, pr_info.sha, test_results, [], StatusNames.CI
)
@ -429,7 +427,7 @@ def set_mergeable_check(
state: StatusType = SUCCESS,
) -> None:
commit.create_status(
context=MERGEABLE_NAME,
context=StatusNames.MERGEABLE,
description=format_description(description),
state=state,
target_url=GITHUB_RUN_URL,
@ -457,14 +455,14 @@ def update_mergeable_check(commit: Commit, pr_info: PRInfo, check_name: str) ->
def trigger_mergeable_check(commit: Commit, statuses: CommitStatuses) -> None:
"""calculate and update MERGEABLE_NAME"""
"""calculate and update StatusNames.MERGEABLE"""
required_checks = [
status for status in statuses if status.context in REQUIRED_CHECKS
]
mergeable_status = None
for status in statuses:
if status.context == MERGEABLE_NAME:
if status.context == StatusNames.MERGEABLE:
mergeable_status = status
break

View File

@ -3,8 +3,8 @@ import logging
from github import Github
from ci_config import StatusNames
from commit_status_helper import (
CI_STATUS_NAME,
get_commit,
get_commit_filtered_statuses,
post_commit_status,
@ -26,7 +26,7 @@ def main():
trigger_mergeable_check(commit, statuses)
if not pr_info.is_merge_queue:
statuses = [s for s in statuses if s.context == CI_STATUS_NAME]
statuses = [s for s in statuses if s.context == StatusNames.CI]
if not statuses:
return
# Take the latest status
@ -37,7 +37,7 @@ def main():
SUCCESS,
status.target_url,
"All checks finished",
CI_STATUS_NAME,
StatusNames.CI,
pr_info,
dump_to_file=True,
)

View File

@ -5,9 +5,8 @@ from typing import Tuple
from github import Github
from cherry_pick import Labels
from ci_config import StatusNames
from commit_status_helper import (
CI_STATUS_NAME,
create_ci_report,
format_description,
get_commit,
@ -206,7 +205,7 @@ def main():
PENDING,
ci_report_url,
description,
CI_STATUS_NAME,
StatusNames.CI,
pr_info,
)

View File

@ -5,10 +5,11 @@
import argparse
import sys
from get_robot_token import get_best_robot_token
from pr_info import PRInfo
from github_helper import GitHub
from ci_config import StatusNames
from commit_status_helper import get_commit, post_commit_status
from get_robot_token import get_best_robot_token
from github_helper import GitHub
from pr_info import PRInfo
from report import SUCCESS
@ -56,7 +57,7 @@ def set_sync_status(gh, pr_info, sync_pr):
# FIXME: uncomment posting red Sync status to prohibit merge in MQ if PR state fetching works good
if not sync_pr:
# post_commit_status(
# get_commit(gh, pr_info.sha), FAILURE, "", "Sync PR not found", "A Sync"
# get_commit(gh, pr_info.sha), FAILURE, "", "Sync PR not found", StatusNames.SYNC
# )
return
@ -73,7 +74,9 @@ def set_sync_status(gh, pr_info, sync_pr):
if sync_pr.mergeable_state == "clean":
print(f"Sync PR [{sync_pr.number}] is clean")
post_commit_status(get_commit(gh, pr_info.sha), SUCCESS, "", "", "A Sync")
post_commit_status(
get_commit(gh, pr_info.sha), SUCCESS, "", "", StatusNames.SYNC
)
else:
print(
f"Sync PR [{sync_pr}] is not mergeable, state [{sync_pr.mergeable_state}]"
@ -83,7 +86,7 @@ def set_sync_status(gh, pr_info, sync_pr):
# FAILURE,
# "",
# f"state: {sync_pr.mergeable_state}",
# "A Sync",
# StatusNames.SYNC,
# )