diff --git a/joint_teapot/app.py b/joint_teapot/app.py index fd9c6e7..b0ff5e0 100644 --- a/joint_teapot/app.py +++ b/joint_teapot/app.py @@ -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) diff --git a/joint_teapot/utils/joj3.py b/joint_teapot/utils/joj3.py index 631c14d..51c22c8 100644 --- a/joint_teapot/utils/joj3.py +++ b/joint_teapot/utils/joj3.py @@ -53,9 +53,10 @@ def generate_scoreboard( exercise_name = "unknown" for stage in stages: - if stage["name"] == "metadata": - comment = stage["results"][0]["comment"] - exercise_name = comment.split("-")[0] + if stage["name"] != "metadata": + continue + comment = stage["results"][0]["comment"] + exercise_name = comment.split("-")[0] # Find if exercise in table: if exercise_name not in columns: column_tail = columns[3:] @@ -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