feat: create issue with milestone (#55)
This commit is contained in:
		
							parent
							
								
									396329f4b6
								
							
						
					
					
						commit
						23204ef168
					
				|  | @ -90,8 +90,16 @@ def create_issue_for_repos( | |||
|     use_regex: bool = Option( | ||||
|         False, "--regex", help="repo_names takes list of regexes if set" | ||||
|     ), | ||||
|     milesetone: str = Option("", "--milestone", help="milestone title"), | ||||
|     labels: List[str] = Option( | ||||
|         [], | ||||
|         "--label", | ||||
|         help="labels to add to the issue (use --label A --label B to add multiple)", | ||||
|     ), | ||||
| ) -> None: | ||||
|     tea.pot.create_issue_for_repos(repo_names, title, body, from_file, use_regex) | ||||
|     tea.pot.create_issue_for_repos( | ||||
|         repo_names, title, body, from_file, use_regex, milesetone, labels | ||||
|     ) | ||||
| 
 | ||||
| 
 | ||||
| @app.command("create-comment", help="create a comment for an issue on gitea") | ||||
|  | @ -103,11 +111,17 @@ def create_comment( | |||
|     tea.pot.create_comment(repo_name, index, body) | ||||
| 
 | ||||
| 
 | ||||
| @app.command("create-milestones", help="create milestones on gitea") | ||||
| def create_milestone_for_repos( | ||||
|     repo_names: List[str], title: str, description: str, due_on: datetime | ||||
| @app.command( | ||||
|     "create-milestones", | ||||
|     help="create milestones on gitea", | ||||
| ) | ||||
| def create_milestones( | ||||
|     title: str, | ||||
|     regex: str = Argument(".+"), | ||||
|     due_on: str = Argument("", help="milestone due-on date [%YYYY-%MM-%DD]"), | ||||
|     description: str = Argument(""), | ||||
| ) -> None: | ||||
|     tea.pot.create_milestone_for_repos(repo_names, title, description, due_on) | ||||
|     tea.pot.gitea.create_milestones(title, regex, due_on, description) | ||||
| 
 | ||||
| 
 | ||||
| @app.command("check-issues", help="check the existence of issue by title on gitea") | ||||
|  |  | |||
|  | @ -146,6 +146,8 @@ class Teapot: | |||
|         body: str, | ||||
|         from_file: bool = False, | ||||
|         use_regex: bool = False, | ||||
|         milestone: str = "", | ||||
|         labels: List[str] = [], | ||||
|     ) -> None: | ||||
|         if from_file: | ||||
|             try: | ||||
|  | @ -173,7 +175,7 @@ class Teapot: | |||
|             affected_repos = repo_names | ||||
| 
 | ||||
|         for repo_name in affected_repos: | ||||
|             self.gitea.create_issue(repo_name, title, content) | ||||
|             self.gitea.create_issue(repo_name, title, content, True, milestone, labels) | ||||
| 
 | ||||
|     def create_comment( | ||||
|         self, | ||||
|  | @ -183,12 +185,6 @@ class Teapot: | |||
|     ) -> None: | ||||
|         self.gitea.create_comment(repo_name, index, body) | ||||
| 
 | ||||
|     def create_milestone_for_repos( | ||||
|         self, repo_names: List[str], title: str, description: str, due_on: datetime | ||||
|     ) -> None: | ||||
|         for repo_name in repo_names: | ||||
|             self.gitea.create_milestone(repo_name, title, description, due_on) | ||||
| 
 | ||||
|     def check_exist_issue_by_title( | ||||
|         self, repo_names: List[str], title: str | ||||
|     ) -> List[str]: | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| import re | ||||
| from datetime import datetime | ||||
| from enum import Enum | ||||
| from functools import lru_cache | ||||
| from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, TypeVar | ||||
|  | @ -345,6 +344,8 @@ class Gitea: | |||
|         title: str, | ||||
|         body: str, | ||||
|         assign_every_collaborators: bool = True, | ||||
|         milestone: str = "", | ||||
|         labels: list[str] = [], | ||||
|     ) -> None: | ||||
|         assignees = [] | ||||
|         if assign_every_collaborators: | ||||
|  | @ -356,10 +357,33 @@ class Gitea: | |||
|                     repo_name, | ||||
|                 ) | ||||
|             ] | ||||
|         milestone_id = None | ||||
|         if milestone: | ||||
|             milestone_list = self.issue_api.issue_get_milestones_list( | ||||
|                 self.org_name, repo_name | ||||
|             ) | ||||
|             if milestone not in [m.title for m in milestone_list]: | ||||
|                 logger.warning(f"Milestone {milestone} does not exist in {repo_name}") | ||||
|             else: | ||||
|                 milestone_id = first( | ||||
|                     [m.id for m in milestone_list if m.title == milestone] | ||||
|                 ) | ||||
|         labels_id = [] | ||||
|         if labels: | ||||
|             labels_list = self.issue_api.issue_list_labels(self.org_name, repo_name) | ||||
|             labels_id = [l.id for l in labels_list if l.name in labels] | ||||
|             if not labels_id: | ||||
|                 logger.warning(f"no label matches {labels}") | ||||
|         self.issue_api.issue_create_issue( | ||||
|             self.org_name, | ||||
|             repo_name, | ||||
|             body={"title": title, "body": body, "assignees": assignees}, | ||||
|             body={ | ||||
|                 "title": title, | ||||
|                 "body": body, | ||||
|                 "assignees": assignees, | ||||
|                 "milestone": milestone_id, | ||||
|                 "labels": labels_id, | ||||
|             }, | ||||
|         ) | ||||
|         logger.info(f'Created issue "{title}" in {repo_name}') | ||||
| 
 | ||||
|  | @ -382,15 +406,22 @@ class Gitea: | |||
|         repo_name: str, | ||||
|         title: str, | ||||
|         description: str, | ||||
|         due_on: datetime, | ||||
|         due_on: str, | ||||
|     ) -> None: | ||||
|         if due_on == "": | ||||
|             self.issue_api.issue_create_milestone( | ||||
|                 self.org_name, | ||||
|                 repo_name, | ||||
|                 body={"title": title, "description": description}, | ||||
|             ) | ||||
|             return | ||||
|         self.issue_api.issue_create_milestone( | ||||
|             self.org_name, | ||||
|             repo_name, | ||||
|             body={ | ||||
|                 "title": title, | ||||
|                 "description": description, | ||||
|                 "due_on": due_on.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), | ||||
|                 "due_on": due_on + "T23:59:59.999Z", | ||||
|             }, | ||||
|         ) | ||||
| 
 | ||||
|  | @ -469,6 +500,21 @@ class Gitea: | |||
|             ) | ||||
|             logger.info(f"Unsubscribed from {sub.name}") | ||||
| 
 | ||||
|     def create_milestones( | ||||
|         self, milestone: str, regex: str, due_date: str, description: str | ||||
|     ) -> None: | ||||
|         for repo_name in self.get_all_repo_names(): | ||||
|             if not re.match(regex, repo_name): | ||||
|                 continue | ||||
|             milestone_list = self.issue_api.issue_get_milestones_list( | ||||
|                 self.org_name, repo_name | ||||
|             ) | ||||
|             if milestone in [m.title for m in milestone_list]: | ||||
|                 logger.warning(f"Milestone {milestone} already exists in {repo_name}") | ||||
|                 continue | ||||
|             self.create_milestone(repo_name, milestone, description, due_date) | ||||
|             logger.info(f"Created milestone {milestone} in {repo_name}") | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     gitea = Gitea() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 mQzLjP
						mQzLjP