forked from JOJ/Joint-Teapot
		
	feat: joj3-check-env with health check output format
This commit is contained in:
		
							parent
							
								
									308fc41719
								
							
						
					
					
						commit
						da37d09e23
					
				|  | @ -684,6 +684,8 @@ def joj3_all_env( | ||||||
|     ), |     ), | ||||||
| ) -> None: | ) -> None: | ||||||
|     app.pretty_exceptions_enable = False |     app.pretty_exceptions_enable = False | ||||||
|  |     set_settings(Settings(_env_file=env_path)) | ||||||
|  |     set_logger(settings.stderr_log_level) | ||||||
|     submitter = os.getenv("GITHUB_ACTOR") |     submitter = os.getenv("GITHUB_ACTOR") | ||||||
|     run_number = os.getenv("GITHUB_RUN_NUMBER") |     run_number = os.getenv("GITHUB_RUN_NUMBER") | ||||||
|     exercise_name = os.getenv("JOJ3_CONF_NAME") |     exercise_name = os.getenv("JOJ3_CONF_NAME") | ||||||
|  | @ -841,6 +843,8 @@ def joj3_check_env( | ||||||
|     ), |     ), | ||||||
| ) -> None: | ) -> None: | ||||||
|     app.pretty_exceptions_enable = False |     app.pretty_exceptions_enable = False | ||||||
|  |     set_settings(Settings(_env_file=env_path)) | ||||||
|  |     set_logger(settings.stderr_log_level) | ||||||
|     submitter = os.getenv("GITHUB_ACTOR") |     submitter = os.getenv("GITHUB_ACTOR") | ||||||
|     exercise_name = os.getenv("JOJ3_CONF_NAME") |     exercise_name = os.getenv("JOJ3_CONF_NAME") | ||||||
|     run_id = os.getenv("JOJ3_RUN_ID") |     run_id = os.getenv("JOJ3_RUN_ID") | ||||||
|  | @ -856,15 +860,69 @@ def joj3_check_env( | ||||||
|         logger.error("missing required env var") |         logger.error("missing required env var") | ||||||
|         raise Exit(code=1) |         raise Exit(code=1) | ||||||
|     submitter_repo_name = (repository or "").split("/")[-1] |     submitter_repo_name = (repository or "").split("/")[-1] | ||||||
|     joj3_check( |     repo: Repo = tea.pot.git.get_repo(grading_repo_name) | ||||||
|         env_path, |     now = datetime.now() | ||||||
|         submitter, |     items = group_config.split(",") | ||||||
|         grading_repo_name, |     msg = "" | ||||||
|         submitter_repo_name, |     failed = False | ||||||
|         scoreboard_file_name, |     for item in items: | ||||||
|         exercise_name, |         name, values = item.split("=") | ||||||
|         group_config, |         max_count, time_period = map(int, values.split(":")) | ||||||
|     ) |         if max_count < 0 or time_period < 0: | ||||||
|  |             continue | ||||||
|  |         since = now - timedelta(hours=time_period) | ||||||
|  |         since_git_format = since.strftime("%Y-%m-%dT%H:%M:%S") | ||||||
|  |         submit_count = 0 | ||||||
|  |         commits = repo.iter_commits(paths=scoreboard_file_name, since=since_git_format) | ||||||
|  |         for commit in commits: | ||||||
|  |             msg = commit.message.strip() | ||||||
|  |             lines = msg.splitlines() | ||||||
|  |             pattern = ( | ||||||
|  |                 r"joj3: update scoreboard for (?P<exercise_name>.+?) " | ||||||
|  |                 r"by @(?P<submitter>.+) in " | ||||||
|  |                 r"(?P<gitea_org_name>.+)/(?P<submitter_repo_name>.+)@(?P<commit_hash>.+)"  # 捕获 gitea_org_name, submitter_repo_name 和 commit_hash | ||||||
|  |             ) | ||||||
|  |             match = re.match(pattern, lines[0]) | ||||||
|  |             if not match: | ||||||
|  |                 continue | ||||||
|  |             d = match.groupdict() | ||||||
|  |             if ( | ||||||
|  |                 exercise_name != d["exercise_name"] | ||||||
|  |                 or submitter != d["submitter"] | ||||||
|  |                 or submitter_repo_name != d["submitter_repo_name"] | ||||||
|  |             ): | ||||||
|  |                 continue | ||||||
|  |             if name != "": | ||||||
|  |                 line = first(lines, lambda l: l.startswith("groups: ")) | ||||||
|  |                 if line and name not in line[len("groups: ") :].split(","): | ||||||
|  |                     continue | ||||||
|  |             submit_count += 1 | ||||||
|  |         logger.info( | ||||||
|  |             f"submitter {submitter} is submitting for the {submit_count + 1} time, " | ||||||
|  |             f"{max_count - submit_count - 1} time(s) remaining, " | ||||||
|  |             f"group={name}, " | ||||||
|  |             f"time period={time_period} hour(s), " | ||||||
|  |             f"max count={max_count}, submit count={submit_count}" | ||||||
|  |         ) | ||||||
|  |         use_group = False | ||||||
|  |         if name: | ||||||
|  |             msg += f"keyword `{name}` " | ||||||
|  |         else: | ||||||
|  |             use_group = True | ||||||
|  |         for group in groups or "": | ||||||
|  |             if group.lower() == name.lower(): | ||||||
|  |                 use_group = True | ||||||
|  |                 break | ||||||
|  |         msg += ( | ||||||
|  |             f"in last {time_period} hour(s): " | ||||||
|  |             f"submit count {submit_count}, " | ||||||
|  |             f"max count {max_count}" | ||||||
|  |         ) | ||||||
|  |         if use_group and submit_count + 1 > max_count: | ||||||
|  |             failed = True | ||||||
|  |             msg += ", exceeded" | ||||||
|  |         msg += "\n" | ||||||
|  |     print(json.dumps({"msg": msg, "failed": failed}))  # print result to stdout for joj3 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user