feat: create teams with branch protection
This commit is contained in:
		
							parent
							
								
									2dbe321d43
								
							
						
					
					
						commit
						e1d3ad0428
					
				|  | @ -29,8 +29,8 @@ def create_personal_repos_for_all_canvas_students() -> None: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @app.command("create-teams", help="create teams on gitea by canvas groups") | @app.command("create-teams", help="create teams on gitea by canvas groups") | ||||||
| def create_teams_and_repos_by_canvas_groups() -> None: | def create_teams_and_repos_by_canvas_groups(group_prefix: str) -> None: | ||||||
|     teapot.create_teams_and_repos_by_canvas_groups() |     teapot.create_teams_and_repos_by_canvas_groups(group_prefix) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @app.command("get-public-keys", help="list all public keys on gitea") | @app.command("get-public-keys", help="list all public keys on gitea") | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import functools | import functools | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| from typing import Any, Callable, List | from typing import Any, Callable, List, Optional | ||||||
| 
 | 
 | ||||||
| from joint_teapot.config import settings | from joint_teapot.config import settings | ||||||
| from joint_teapot.utils.logger import logger | from joint_teapot.utils.logger import logger | ||||||
|  | @ -67,8 +67,12 @@ class Teapot: | ||||||
|             self.canvas.students |             self.canvas.students | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|     def create_teams_and_repos_by_canvas_groups(self) -> List[str]: |     def create_teams_and_repos_by_canvas_groups( | ||||||
|         def convertor(name: str) -> str: |         self, group_prefix: str = "" | ||||||
|  |     ) -> List[str]: | ||||||
|  |         def convertor(name: str) -> Optional[str]: | ||||||
|  |             if group_prefix and not name.startswith(group_prefix): | ||||||
|  |                 return None | ||||||
|             team_name, number_str = name.split(" ") |             team_name, number_str = name.split(" ") | ||||||
|             number = int(number_str) |             number = int(number_str) | ||||||
|             return f"{team_name}-{number:02}" |             return f"{team_name}-{number:02}" | ||||||
|  |  | ||||||
|  | @ -200,6 +200,7 @@ class Gitea: | ||||||
|                 team.id, self.org_name, repo_name |                 team.id, self.org_name, repo_name | ||||||
|             ) |             ) | ||||||
|             membership: GroupMembership |             membership: GroupMembership | ||||||
|  |             student_count = 0 | ||||||
|             for membership in group.get_memberships(): |             for membership in group.get_memberships(): | ||||||
|                 student = first(students, lambda s: s.id == membership.user_id) |                 student = first(students, lambda s: s.id == membership.user_id) | ||||||
|                 if student is None: |                 if student is None: | ||||||
|  | @ -211,6 +212,40 @@ class Gitea: | ||||||
|                 self.repository_api.repo_add_collaborator( |                 self.repository_api.repo_add_collaborator( | ||||||
|                     self.org_name, repo_name, username |                     self.org_name, repo_name, username | ||||||
|                 ) |                 ) | ||||||
|  |                 student_count += 1 | ||||||
|  |             try: | ||||||
|  |                 self.repository_api.repo_delete_branch_protection( | ||||||
|  |                     self.org_name, repo_name, "master" | ||||||
|  |                 ) | ||||||
|  |             except ApiException as e: | ||||||
|  |                 if e.status != 404: | ||||||
|  |                     raise | ||||||
|  |             self.repository_api.repo_create_branch_protection( | ||||||
|  |                 self.org_name, | ||||||
|  |                 repo_name, | ||||||
|  |                 body={ | ||||||
|  |                     "block_on_official_review_requests": True, | ||||||
|  |                     "block_on_outdated_branch": True, | ||||||
|  |                     "block_on_rejected_reviews": True, | ||||||
|  |                     "branch_name": "master", | ||||||
|  |                     "dismiss_stale_approvals": True, | ||||||
|  |                     "enable_approvals_whitelist": False, | ||||||
|  |                     "enable_merge_whitelist": False, | ||||||
|  |                     "enable_push": False, | ||||||
|  |                     "enable_push_whitelist": False, | ||||||
|  |                     "enable_status_check": False, | ||||||
|  |                     "merge_whitelist_teams": [], | ||||||
|  |                     "merge_whitelist_usernames": [], | ||||||
|  |                     "protected_file_patterns": "", | ||||||
|  |                     "push_whitelist_deploy_keys": False, | ||||||
|  |                     "push_whitelist_teams": [], | ||||||
|  |                     "push_whitelist_usernames": [], | ||||||
|  |                     "require_signed_commits": False, | ||||||
|  |                     "required_approvals": max(student_count - 1, 0), | ||||||
|  |                     "status_check_contexts": [], | ||||||
|  |                 }, | ||||||
|  |             ) | ||||||
|  |             logger.info(f"{self.org_name}/{repo_name} jobs done") | ||||||
|         return repo_names |         return repo_names | ||||||
| 
 | 
 | ||||||
|     def get_public_key_of_canvas_students(self, students: PaginatedList) -> List[str]: |     def get_public_key_of_canvas_students(self, students: PaginatedList) -> List[str]: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user