feat: support joj3-all
This commit is contained in:
parent
ee17d86614
commit
bfc12eee53
|
@ -287,9 +287,8 @@ def joj3_scoreboard(
|
||||||
+ f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n"
|
+ f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n"
|
||||||
+ f"gitea actions link: {actions_link}"
|
+ f"gitea actions link: {actions_link}"
|
||||||
)
|
)
|
||||||
tea.pot.git.add_commit_and_push(
|
tea.pot.git.add_commit(repo_name, [scoreboard_file_name], commit_message)
|
||||||
repo_name, [scoreboard_file_name], commit_message
|
tea.pot.git.push(repo_name)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@app.command(
|
@app.command(
|
||||||
|
@ -373,11 +372,8 @@ def joj3_failed_table(
|
||||||
+ f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n"
|
+ f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n"
|
||||||
+ f"gitea actions link: {actions_link}"
|
+ f"gitea actions link: {actions_link}"
|
||||||
)
|
)
|
||||||
tea.pot.git.add_commit_and_push(
|
tea.pot.git.add_commit(repo_name, [failed_table_file_name], commit_message)
|
||||||
repo_name,
|
tea.pot.git.push(repo_name)
|
||||||
[failed_table_file_name],
|
|
||||||
commit_message,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@app.command(
|
@app.command(
|
||||||
|
@ -428,6 +424,136 @@ def joj3_create_result_issue(
|
||||||
tea.pot.gitea.create_issue(submitter_repo_name, title, comment, False)
|
tea.pot.gitea.create_issue(submitter_repo_name, title, comment, False)
|
||||||
|
|
||||||
|
|
||||||
|
@app.command(
|
||||||
|
"joj3-all",
|
||||||
|
help="run all joj3 tasks",
|
||||||
|
)
|
||||||
|
def joj3_all(
|
||||||
|
env_path: str = Argument("", help="path to .env file"),
|
||||||
|
score_file_path: str = Argument(
|
||||||
|
"", help="path to score json file generated by JOJ3"
|
||||||
|
),
|
||||||
|
submitter: str = Argument("", help="submitter ID"),
|
||||||
|
repo_name: str = Argument(
|
||||||
|
"",
|
||||||
|
help="name of grading repo to push failed table file",
|
||||||
|
),
|
||||||
|
submitter_repo_name: str = Argument(
|
||||||
|
"",
|
||||||
|
help="repository's name of the submitter",
|
||||||
|
),
|
||||||
|
run_number: str = Argument(
|
||||||
|
"",
|
||||||
|
help="gitea actions run number",
|
||||||
|
),
|
||||||
|
scoreboard_file_name: str = Argument(
|
||||||
|
"scoreboard.csv", help="name of scoreboard file in the gitea repo"
|
||||||
|
),
|
||||||
|
failed_table_file_name: str = Argument(
|
||||||
|
"failed-table.md", help="name of failed table file in the gitea repo"
|
||||||
|
),
|
||||||
|
exercise_name: str = Argument(
|
||||||
|
"unknown",
|
||||||
|
help="name of the exercise that appears on the issue title",
|
||||||
|
),
|
||||||
|
commit_hash: str = Argument(
|
||||||
|
"",
|
||||||
|
help="commit hash that triggers gitea actions",
|
||||||
|
),
|
||||||
|
skip_result_issue: bool = Option(
|
||||||
|
False,
|
||||||
|
help="skip creating result issue on gitea",
|
||||||
|
),
|
||||||
|
skip_scoreboard: bool = Option(
|
||||||
|
False,
|
||||||
|
help="skip creating scoreboard on gitea",
|
||||||
|
),
|
||||||
|
skip_failed_table: bool = Option(
|
||||||
|
False,
|
||||||
|
help="skip creating failed table on gitea",
|
||||||
|
),
|
||||||
|
) -> None:
|
||||||
|
set_settings(Settings(_env_file=env_path))
|
||||||
|
set_logger(settings.stderr_log_level, diagnose=False, backtrace=False)
|
||||||
|
logger.info(f"debug log to file: {settings.log_file_path}")
|
||||||
|
actions_link = (
|
||||||
|
f"https://{settings.gitea_domain_name}{settings.gitea_suffix}/"
|
||||||
|
+ f"{settings.gitea_org_name}/{submitter_repo_name}/"
|
||||||
|
+ f"actions/runs/{run_number}"
|
||||||
|
)
|
||||||
|
submitter_repo_link = (
|
||||||
|
f"https://{settings.gitea_domain_name}{settings.gitea_suffix}/"
|
||||||
|
+ f"{settings.gitea_org_name}/{submitter_repo_name}"
|
||||||
|
)
|
||||||
|
if not skip_result_issue:
|
||||||
|
title, comment = joj3.generate_title_and_comment(
|
||||||
|
score_file_path,
|
||||||
|
actions_link,
|
||||||
|
run_number,
|
||||||
|
exercise_name,
|
||||||
|
submitter,
|
||||||
|
commit_hash,
|
||||||
|
)
|
||||||
|
tea.pot.gitea.create_issue(submitter_repo_name, title, comment, False)
|
||||||
|
if skip_scoreboard and skip_failed_table:
|
||||||
|
return
|
||||||
|
tea.pot.git # trigger lazy load
|
||||||
|
lock_file_path = os.path.join(
|
||||||
|
settings.repos_dir, repo_name, settings.joj3_lock_file_path
|
||||||
|
)
|
||||||
|
logger.info(
|
||||||
|
f"try to acquire lock, file path: {lock_file_path}, "
|
||||||
|
+ f"timeout: {settings.joj3_lock_file_timeout}"
|
||||||
|
)
|
||||||
|
with FileLock(lock_file_path, timeout=settings.joj3_lock_file_timeout).acquire():
|
||||||
|
logger.info("file lock acquired")
|
||||||
|
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:
|
||||||
|
logger.error(
|
||||||
|
'"grading" branch not found in remote, create and push it to origin first.'
|
||||||
|
)
|
||||||
|
return
|
||||||
|
if "grading" not in repo.branches:
|
||||||
|
logger.error('"grading" branch not found in local, create it first.')
|
||||||
|
return
|
||||||
|
repo.git.reset("--hard", "origin/grading")
|
||||||
|
if not skip_scoreboard:
|
||||||
|
joj3.generate_scoreboard(
|
||||||
|
score_file_path,
|
||||||
|
submitter,
|
||||||
|
os.path.join(repo_path, scoreboard_file_name),
|
||||||
|
exercise_name,
|
||||||
|
)
|
||||||
|
tea.pot.git.add_commit(
|
||||||
|
repo_name,
|
||||||
|
[scoreboard_file_name],
|
||||||
|
(
|
||||||
|
f"joj3: update scoreboard by @{submitter} in "
|
||||||
|
+ f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n"
|
||||||
|
+ f"gitea actions link: {actions_link}"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if not skip_failed_table:
|
||||||
|
joj3.generate_failed_table(
|
||||||
|
score_file_path,
|
||||||
|
submitter_repo_name,
|
||||||
|
submitter_repo_link,
|
||||||
|
os.path.join(repo_path, failed_table_file_name),
|
||||||
|
actions_link,
|
||||||
|
)
|
||||||
|
tea.pot.git.add_commit(
|
||||||
|
repo_name,
|
||||||
|
[failed_table_file_name],
|
||||||
|
(
|
||||||
|
f"joj3: update failed table by @{submitter} in "
|
||||||
|
+ f"{settings.gitea_org_name}/{submitter_repo_name}@{commit_hash}\n\n"
|
||||||
|
+ f"gitea actions link: {actions_link}"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
tea.pot.git.push(repo_name)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
app()
|
app()
|
||||||
|
|
|
@ -102,7 +102,7 @@ class Git:
|
||||||
raise
|
raise
|
||||||
return repo_dir
|
return repo_dir
|
||||||
|
|
||||||
def add_commit_and_push(
|
def add_commit(
|
||||||
self, repo_name: str, files_to_add: List[str], commit_message: str
|
self, repo_name: str, files_to_add: List[str], commit_message: str
|
||||||
) -> None:
|
) -> None:
|
||||||
repo: Repo = self.get_repo(repo_name)
|
repo: Repo = self.get_repo(repo_name)
|
||||||
|
@ -116,4 +116,7 @@ class Git:
|
||||||
continue
|
continue
|
||||||
if repo.is_dirty(untracked_files=True) or repo.index.diff(None):
|
if repo.is_dirty(untracked_files=True) or repo.index.diff(None):
|
||||||
repo.index.commit(commit_message)
|
repo.index.commit(commit_message)
|
||||||
|
|
||||||
|
def push(self, repo_name: str) -> None:
|
||||||
|
repo: Repo = self.get_repo(repo_name)
|
||||||
repo.remote(name="origin").push()
|
repo.remote(name="origin").push()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user