mirror of https://github.com/kubeflow/trainer.git
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
import argparse
|
|
|
|
from github import Github
|
|
|
|
REPO_NAME = "kubeflow/trainer"
|
|
CHANGELOG_FILE = "CHANGELOG.md"
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--token", type=str, help="GitHub Access Token")
|
|
parser.add_argument(
|
|
"--range", type=str, help="Changelog is generated for this release range"
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
if args.token is None:
|
|
raise Exception("GitHub Token must be set")
|
|
try:
|
|
previous_release = args.range.split("..")[0]
|
|
current_release = args.range.split("..")[1]
|
|
except Exception:
|
|
raise Exception("Release range must be set in this format: v1.7.0..v1.8.0")
|
|
|
|
# Get list of commits from the range.
|
|
github_repo = Github(args.token).get_repo(REPO_NAME)
|
|
comparison = github_repo.compare(previous_release, current_release)
|
|
commits = comparison.commits
|
|
|
|
# The latest commit contains the release date.
|
|
release_date = str(commits[-1].commit.author.date).split(" ")[0]
|
|
release_url = "https://github.com/{}/tree/{}".format(REPO_NAME, current_release)
|
|
|
|
# Get all PRs in reverse chronological order from the commits.
|
|
pr_list = ""
|
|
pr_set = set()
|
|
for commit in reversed(commits):
|
|
# Only add commits with PRs.
|
|
for pr in commit.get_pulls():
|
|
# Each PR is added only one time to the list.
|
|
if pr.number in pr_set:
|
|
continue
|
|
pr_set.add(pr.number)
|
|
|
|
new_pr = "- {title} ([#{id}]({pr_link}) by [@{user_id}]({user_url}))\n".format(
|
|
title=pr.title,
|
|
id=pr.number,
|
|
pr_link=pr.html_url,
|
|
user_id=pr.user.login,
|
|
user_url=pr.user.html_url,
|
|
)
|
|
pr_list += new_pr
|
|
|
|
change_log = [
|
|
"# Changelog" "\n\n",
|
|
"# [{}]({}) ({})".format(current_release, release_url, release_date),
|
|
"\n\n",
|
|
"## TODO: Group PRs into Breaking Changes, New Features, Bug fixes, Misc, etc. "
|
|
+ "For example: [v1.7.0](https://github.com/kubeflow/trainer/releases/tag/v1.7.0)",
|
|
"\n\n",
|
|
pr_list,
|
|
"\n" "[Full Changelog]({})\n".format(comparison.html_url),
|
|
]
|
|
|
|
# Update Changelog with the new changes.
|
|
with open(CHANGELOG_FILE, "r+") as f:
|
|
lines = f.readlines()
|
|
f.seek(0)
|
|
lines = lines[0:0] + change_log + lines[1:]
|
|
f.writelines(lines)
|
|
|
|
print("Changelog has been updated\n")
|
|
print("Group PRs in the Changelog into Features, Bug fixes, Misc, etc.\n")
|
|
print("After that, submit a PR with the updated Changelog")
|