forked from JOJ/Joint-Teapot
		
	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