feat: failed stage in scoreboard commit
All checks were successful
build / trigger-build-image (push) Successful in 23s

This commit is contained in:
张泊明518370910136 2025-11-29 00:11:17 -08:00
parent 3a69be006d
commit 743331c81b
GPG Key ID: CA088E6D9284F870
2 changed files with 18 additions and 12 deletions

View File

@ -426,6 +426,7 @@ def joj3_all_env(
submitter_repo_name, submitter_repo_name,
total_score, total_score,
) )
failed_stage = joj3.get_failed_stage_from_file(env.joj3_output_path)
tea.pot.git.add_commit( tea.pot.git.add_commit(
grading_repo_name, grading_repo_name,
[scoreboard_filename], [scoreboard_filename],
@ -435,6 +436,7 @@ def joj3_all_env(
f"gitea actions link: {gitea_actions_url}\n" f"gitea actions link: {gitea_actions_url}\n"
f"gitea issue link: {gitea_issue_url}\n" f"gitea issue link: {gitea_issue_url}\n"
f"groups: {env.joj3_groups}\n" f"groups: {env.joj3_groups}\n"
f"failed stage: {failed_stage}\n"
), ),
) )
if not skip_failed_table: if not skip_failed_table:

View File

@ -142,6 +142,18 @@ def get_failed_table_from_file(table_file_path: str) -> List[List[str]]:
return data return data
def get_failed_stage_from_file(score_file_path: str) -> str:
with open(score_file_path) as json_file:
stages: List[Dict[str, Any]] = json.load(json_file)
failed_stage = ""
for stage in stages:
if stage["force_quit"] == True:
failed_stage = stage["name"]
break
return failed_stage
def update_failed_table_from_score_file( def update_failed_table_from_score_file(
data: List[List[str]], data: List[List[str]],
score_file_path: str, score_file_path: str,
@ -149,31 +161,23 @@ def update_failed_table_from_score_file(
repo_link: str, repo_link: str,
action_link: str, action_link: str,
) -> None: ) -> None:
# get info from score file failed_stage = get_failed_stage_from_file(score_file_path)
with open(score_file_path) as json_file:
stages: List[Dict[str, Any]] = json.load(json_file)
failed_name = ""
for stage in stages:
if stage["force_quit"] == True:
failed_name = stage["name"]
break
# append to failed table # append to failed table
now = datetime.now().strftime("%Y-%m-%d %H:%M") now = datetime.now().strftime("%Y-%m-%d %H:%M")
repo = f"[{repo_name}]({repo_link})" repo = f"[{repo_name}]({repo_link})"
failure = f"[{failed_name}]({action_link})" failure = f"[{failed_stage}]({action_link})"
row_found = False row_found = False
for i, row in enumerate(data[:]): for i, row in enumerate(data[:]):
if row[1] == repo: if row[1] == repo:
row_found = True row_found = True
if failed_name == "": if failed_stage == "":
data.remove(row) data.remove(row)
else: else:
data[i][0] = now data[i][0] = now
data[i][2] = failure data[i][2] = failure
break break
if not row_found and failed_name != "": if not row_found and failed_stage != "":
data.append([now, repo, failure]) data.append([now, repo, failure])