12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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)
|