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(
|
use_regex: bool = Option(
|
||||||
False, "--regex", help="repo_names takes list of regexes if set"
|
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:
|
) -> 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")
|
@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)
|
tea.pot.create_comment(repo_name, index, body)
|
||||||
|
|
||||||
|
|
||||||
@app.command("create-milestones", help="create milestones on gitea")
|
@app.command(
|
||||||
def create_milestone_for_repos(
|
"create-milestones",
|
||||||
repo_names: List[str], title: str, description: str, due_on: datetime
|
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:
|
) -> 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")
|
@app.command("check-issues", help="check the existence of issue by title on gitea")
|
||||||
|
|
|
@ -146,6 +146,8 @@ class Teapot:
|
||||||
body: str,
|
body: str,
|
||||||
from_file: bool = False,
|
from_file: bool = False,
|
||||||
use_regex: bool = False,
|
use_regex: bool = False,
|
||||||
|
milestone: str = "",
|
||||||
|
labels: List[str] = [],
|
||||||
) -> None:
|
) -> None:
|
||||||
if from_file:
|
if from_file:
|
||||||
try:
|
try:
|
||||||
|
@ -173,7 +175,7 @@ class Teapot:
|
||||||
affected_repos = repo_names
|
affected_repos = repo_names
|
||||||
|
|
||||||
for repo_name in affected_repos:
|
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(
|
def create_comment(
|
||||||
self,
|
self,
|
||||||
|
@ -183,12 +185,6 @@ class Teapot:
|
||||||
) -> None:
|
) -> None:
|
||||||
self.gitea.create_comment(repo_name, index, body)
|
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(
|
def check_exist_issue_by_title(
|
||||||
self, repo_names: List[str], title: str
|
self, repo_names: List[str], title: str
|
||||||
) -> List[str]:
|
) -> List[str]:
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, TypeVar
|
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, TypeVar
|
||||||
|
@ -345,6 +344,8 @@ class Gitea:
|
||||||
title: str,
|
title: str,
|
||||||
body: str,
|
body: str,
|
||||||
assign_every_collaborators: bool = True,
|
assign_every_collaborators: bool = True,
|
||||||
|
milestone: str = "",
|
||||||
|
labels: list[str] = [],
|
||||||
) -> None:
|
) -> None:
|
||||||
assignees = []
|
assignees = []
|
||||||
if assign_every_collaborators:
|
if assign_every_collaborators:
|
||||||
|
@ -356,10 +357,33 @@ class Gitea:
|
||||||
repo_name,
|
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.issue_api.issue_create_issue(
|
||||||
self.org_name,
|
self.org_name,
|
||||||
repo_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}')
|
logger.info(f'Created issue "{title}" in {repo_name}')
|
||||||
|
|
||||||
|
@ -382,15 +406,22 @@ class Gitea:
|
||||||
repo_name: str,
|
repo_name: str,
|
||||||
title: str,
|
title: str,
|
||||||
description: str,
|
description: str,
|
||||||
due_on: datetime,
|
due_on: str,
|
||||||
) -> None:
|
) -> 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.issue_api.issue_create_milestone(
|
||||||
self.org_name,
|
self.org_name,
|
||||||
repo_name,
|
repo_name,
|
||||||
body={
|
body={
|
||||||
"title": title,
|
"title": title,
|
||||||
"description": description,
|
"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}")
|
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__":
|
if __name__ == "__main__":
|
||||||
gitea = Gitea()
|
gitea = Gitea()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user