From 86f3cd82395123a14562c9a90b693a3dc2b5df6d Mon Sep 17 00:00:00 2001 From: Russel Waters Date: Tue, 21 Apr 2020 16:16:57 -0400 Subject: [PATCH] changelog_generator refactored as changelog.py (#2722) * changelog_generator refactored as changelog.py mapping between sections and labels handled in SECTIONS Other added as a catchall if there are no matching labels * formatting errors * Websockets Section added reorder as PRs will only appear in one Update header, Highlight breaking changes. Sort Breaking changes to the beginning of the sections * Full Changelog link link for github compare between start and end references * Swap --- before header --- util/changelog.py | 219 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 util/changelog.py diff --git a/util/changelog.py b/util/changelog.py new file mode 100644 index 00000000..9a6e82ea --- /dev/null +++ b/util/changelog.py @@ -0,0 +1,219 @@ +import argparse +import copy + +try: + from github import Github + from mdutils import MdUtils +except BaseException: + exit("Error: run 'pip install PyGithub mdutils'") + +SECTIONS = { + "Major Changes": [ + "major", + ], + "Protocol Changes": [ + "protocol change", + ], + "Node Configuration Updates": [ + "toml", + "configuration default change", + ], + "RPC Updates": [ + "rpc", + ], + "IPC Updates": [ + "ipc", + ], + "Websocket Updates": [ + "websockets", + ], + "CLI Updates": [ + "cli", + ], + "Deprecation/Removal": [ + "deprecation", + "removal", + ], + "Developer Wallet": [ + "qt wallet", + ], + "Developer/Debug Options": [ + "debug", + ], + "Fixed Bugs": [ + "bug", + ], + "Implemented Enhancements": [ + "enhancement", + "functionality quality improvements", + "non-functional change", + "performance", + "quality improvements", + ], + "Build, Test, Automation, & Chores": [ + "build-error", + "documentation", + "routine", + "sanitizers", + "static-analysis", + "tool", + "unit test", + "universe", + ], + "Other": [] +} + + +class cliArgs(): + def __init__(self): + parse = argparse.ArgumentParser( + prog="changelog", + description="Generate Changelogs between tags or commits" + ) + parse.add_argument( + '-r', '--repo', + help=" to generate logs for", + type=str, action="store", + default='nanocurrency/nano-node', + ) + parse.add_argument( + '-s', '--start', + help="Starting reference for Changelog", + type=str, action="store", + required=True, + ) + parse.add_argument( + '-e', '--end', + help="Ending reference for Changelog", + type=str, action="store", + required=True, + ) + parse.add_argument( + '--pat', + help="Personal Access Token", + type=str, action="store", + required=True, + ) + options = parse.parse_args() + self.repo = options.repo + self.start = options.start + self.end = options.end + self.pat = options.pat + + def __repr__(self): + return "" \ + .format(self.repo, self.start, self.end, self.pat) + + def __str__(self): + return "Generating a changelog for {0} starting with {1} " \ + "and ending with {2}".format(self.repo, self.start, self.end) + + +class changelogRepo: + def __init__(self, args): + github = Github(args.pat) + self.repo = github.get_repo(args.repo) + self.start = args.start + self.end = args.end + try: + self.startCommit = self.repo.get_commit(args.start) + except BaseException: + exit("Error finding commit for " + args.start) + try: + self.endCommit = self.repo.get_commit(args.end) + except BaseException: + exit("Error finding commit for " + args.end) + self.tree = self.repo.compare(self.start, self.end).commits + self.commits = {} + for commit in self.tree: + for pull in commit.get_pulls(): + labels = [] + for label in pull.labels: + labels.append(label.name) + self.commits[pull.number] = { + "Title": pull.title, + "Url": pull.html_url, + "labels": labels + } + + def __repr__(self): + return " 0: + result[a] = sect[a] + return result + + +if __name__ == "__main__": + args = cliArgs() + repo = changelogRepo(args) + generateMarkdown(repo)