feat: support joj3 metadata skip steps

This commit is contained in:
张泊明518370910136 2024-09-26 03:34:57 -04:00
parent 85fae796ce
commit 98e4400e32
GPG Key ID: CA088E6D9284F870
2 changed files with 29 additions and 10 deletions

View File

@ -211,7 +211,7 @@ def unsubscribe_from_repos(pattern: str = Argument("")) -> None:
)
def joj3_scoreboard(
env_path: str = Argument("", help="path to .env file"),
scorefile_path: str = Argument(
score_file_path: str = Argument(
"", help="path to score json file generated by JOJ3"
),
submitter: str = Argument("", help="submitter ID"),
@ -224,6 +224,8 @@ def joj3_scoreboard(
),
) -> None:
set_settings(Settings(_env_file=env_path))
if joj3.check_skipped(score_file_path, "skip-scoreboard"):
return
repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading")
repo: Repo = tea.pot.git.get_repo(repo_name)
if "grading" not in repo.remote().refs:
@ -236,7 +238,7 @@ def joj3_scoreboard(
return
repo.git.reset("--hard", "origin/grading")
joj3.generate_scoreboard(
scorefile_path,
score_file_path,
submitter,
os.path.join(repo_path, scoreboard_file_name),
)
@ -252,12 +254,12 @@ def joj3_scoreboard(
)
def joj3_failed_table(
env_path: str = Argument("", help="path to .env file"),
scorefile_path: str = Argument(
score_file_path: str = Argument(
"", help="path to score json file generated by JOJ3"
),
repo_name: str = Argument(
"",
help="name of grading repo to push scoreboard file",
help="name of grading repo to push failed table file",
),
submitter_repo_name: str = Argument(
"",
@ -268,6 +270,8 @@ def joj3_failed_table(
),
) -> None:
set_settings(Settings(_env_file=env_path))
if joj3.check_skipped(score_file_path, "skip-failed-table"):
return
repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading")
repo: Repo = tea.pot.git.get_repo(repo_name)
if "grading" not in repo.remote().refs:
@ -284,7 +288,7 @@ def joj3_failed_table(
+ f"{settings.gitea_org_name}/{submitter_repo_name}"
)
joj3.generate_failed_table(
scorefile_path,
score_file_path,
submitter_repo_name,
submitter_repo_link,
os.path.join(repo_path, failed_table_file_name),
@ -301,7 +305,7 @@ def joj3_failed_table(
)
def joj3_create_result_issue(
env_path: str = Argument("", help="path to .env file"),
scorefile_path: str = Argument(
score_file_path: str = Argument(
"", help="path to score json file generated by JOJ3"
),
submitter_repo_name: str = Argument(
@ -314,12 +318,14 @@ def joj3_create_result_issue(
),
) -> None:
set_settings(Settings(_env_file=env_path))
if joj3.check_skipped(score_file_path, "skip-result-issue"):
return
action_link = (
f"https://{settings.gitea_domain_name}{settings.gitea_suffix}/"
+ f"{settings.gitea_org_name}/{submitter_repo_name}/"
+ f"actions/runs/{run_number}"
)
title, comment = joj3.generate_title_and_comment(scorefile_path, action_link)
title, comment = joj3.generate_title_and_comment(score_file_path, action_link)
tea.pot.gitea.create_issue(submitter_repo_name, title, comment, False)

View File

@ -53,7 +53,8 @@ def generate_scoreboard(
exercise_name = "unknown"
for stage in stages:
if stage["name"] == "metadata":
if stage["name"] != "metadata":
continue
comment = stage["results"][0]["comment"]
exercise_name = comment.split("-")[0]
# Find if exercise in table:
@ -183,3 +184,15 @@ def generate_title_and_comment(
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
title = f"JOJ3 Result {now} - Total Score: {total_score}"
return title, comment
def check_skipped(score_file_path: str, keyword: str) -> bool:
with open(score_file_path) as json_file:
stages: List[Dict[str, Any]] = json.load(json_file)
for stage in stages:
if stage["name"] != "metadata":
continue
comment = stage["results"][0]["comment"]
if keyword in comment or "skip-teapot" in comment:
return True
return False