summaryrefslogtreecommitdiffstats
path: root/tools/changelog.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtools/changelog.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/changelog.py b/tools/changelog.py
new file mode 100755
index 0000000..24b74a8
--- /dev/null
+++ b/tools/changelog.py
@@ -0,0 +1,51 @@
+# ruff: noqa: T201 (Allow print statements)
+# Simple script to generate a rough changelog from git log.
+# This changelog is manually edited before it goes into CHANGELOG.md
+
+import re
+import subprocess
+import sys
+from collections import defaultdict
+
+if len(sys.argv) != 2:
+ print("Usage: python changelog.py <tag>")
+ sys.exit(1)
+
+tag = sys.argv[1]
+# Get all commits since the last release
+cmd = ["git", "log", "--pretty=%s|%aN", f"{tag}..HEAD"]
+log_lines = subprocess.Popen(cmd, stdout=subprocess.PIPE).stdout.read().decode("UTF-8")
+log_lines = log_lines.split("\n")[:-1]
+
+# Group commits by type
+commit_groups = defaultdict(list)
+for log_line in log_lines:
+ message, author = log_line.split("|")
+ # skip dependabot commits
+ if author == "dependabot[bot]":
+ group = "dependabot"
+ else:
+ type_parts = message.split(":")
+ if len(type_parts) == 1:
+ group = "other"
+ else:
+ group = type_parts[0]
+
+ commit_groups[group].append((message, author))
+
+# Print the changelog
+for group, commits in commit_groups.items():
+ print(group)
+ for message, author in commits:
+ # Thank authors other than maintainer
+ author_thanks = ""
+ if author != "Joris Roovers":
+ author_thanks = f" - Thanks {author}"
+
+ # Find the issue number in message using regex, format: (#1234)
+ issue_number = re.search(r"\(#(\d+)\)", message)
+ if issue_number:
+ issue_url = f"https://github.com/jorisroovers/gitlint/issues/{issue_number.group(1)}"
+ message = message.replace(issue_number.group(0), f"([#{issue_number.group(1)}]({issue_url}))")
+
+ print(f" - {message}{author_thanks}")