mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
67 lines
2.0 KiB
Python
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()
|