Files
macos-stats/Kit/scripts/changelog.py

67 lines
2.0 KiB
Python

import subprocess
import re
def last_release_tag():
cmd = "git describe --abbrev=0 --tags"
output = subprocess.check_output(['bash', '-c', cmd])
return output.decode("utf-8").strip()
def git_hash(tag):
cmd = "git rev-list -n 1 {0}".format(tag)
output = subprocess.check_output(['bash', '-c', cmd])
return output.decode("utf-8").strip()
class Changelog:
fixPattern = re.compile("^- fix:")
featPattern = re.compile("^- feat:")
langPattern = re.compile("^- lang:")
def generate(self):
tag = last_release_tag()
tag_hash = git_hash(tag)
fix, feat, lang = self.commits(tag_hash)
changelog = ""
if len(fix) != 0:
changelog += "## Bug fixes \n{}".format("\n".join(fix))
if len(feat) != 0:
if len(changelog) != 0:
changelog += "\n\n"
changelog += "## New features \n{}".format("\n".join(feat))
if len(lang) != 0:
if len(changelog) != 0:
changelog += "\n\n"
changelog += "## Localization \n{}".format("\n".join(lang))
print(changelog)
def commits(self, first_commit):
cmd = f"git log --pretty=\"- %s\" {first_commit}..HEAD"
output = subprocess.check_output(['bash', '-c', cmd])
lines = output.decode("utf-8").splitlines()
fix = []
feat = []
lang = []
for line in lines:
if self.fixPattern.match(line) and "translation" not in line and "localization" not in line:
fix.append(line)
elif self.featPattern.match(line) and "translation" not in line and "localization" not in line:
feat.append(line)
elif self.langPattern.match(line) or "translation" in line or "localization" in line:
lang.append(line)
else:
print("Failed to detect commit {} type".format(line))
return fix, feat, lang
if __name__ == "__main__":
Changelog().generate()