46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import os
|
|
import re
|
|
from argparse import ArgumentParser
|
|
from collections import defaultdict
|
|
from _pkg import Const as C
|
|
from _pkg import Utils as U
|
|
import github # type: ignore # pip install PyGithub
|
|
|
|
def generate_msg_from_repo(repo_name, tag_name):
|
|
"""Generate changelog messages from repository and tag name.
|
|
|
|
Envs:
|
|
GITHUB_HOST: the custom github host.
|
|
GITHUB_TOKEN: the github access token.
|
|
|
|
Args:
|
|
repo_name (str): The repository name
|
|
tag_name (str): the tag name
|
|
"""
|
|
hostname = os.getenv("GITHUB_HOST") or C.hostname
|
|
token = os.getenv("GITHUB_TOKEN")
|
|
desc_mapping = defaultdict(list)
|
|
|
|
gh = github.Github(token, base_url=f"https://{hostname}")
|
|
repo = gh.get_repo(repo_name)
|
|
|
|
milestone = U.find_milestone(repo, tag_name)
|
|
for issue in repo.get_issues(state="closed", milestone=milestone): # type: ignore
|
|
# REF https://pygithub.readthedocs.io/en/latest/github_objects/Issue.html#github.Issue.Issue
|
|
desc_mapping[U.get_issue_first_label(issue, C.docmap_siyuan)].append(
|
|
{"title": issue.title, "url": issue.html_url}
|
|
)
|
|
U.generate_msg(desc_mapping, C.docmap_siyuan)
|
|
|
|
if __name__ == "__main__":
|
|
parser = ArgumentParser(
|
|
description="Automaticly generate information from issues by tag."
|
|
)
|
|
parser.add_argument("-t", "--tag", help="the tag to filter issues.")
|
|
parser.add_argument("repo", help="The repository name")
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
generate_msg_from_repo(args.repo, args.tag)
|
|
except AssertionError:
|
|
print(args.tag)
|