Skip to content

Commit

Permalink
🔧 Devops: Add update_changelog.py script
Browse files Browse the repository at this point in the history
  • Loading branch information
mbercx committed Dec 20, 2023
1 parent 7696919 commit cf9d6f0
Showing 1 changed file with 87 additions and 0 deletions.
87 changes: 87 additions & 0 deletions .github/workflows/update_changelog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#!/bin/bash
# -*- coding: utf-8 -*-
"""Script for updating the `CHANGELOG.md` based on the commits since the latest release tag."""
import re
import subprocess
from pathlib import Path

DEFAULT_CHANGELOG_SECTIONS = """
### ‼️ Breaking changes
### ✨ New features
### 🗑️ Deprecations
### 👌 Improvements
### 🐛 Bug fixes
### 📚 Documentation
### 🔧 Maintenance
### ⬆️ Update dependencies
### ♻️ Refactor
"""


def update_changelog():
"""Update the `CHANGELOG.md` for a first draft of the release."""

print("🔍 Checking the current version number")
current_changelog = Path("CHANGELOG.md").read_text(encoding="utf-8")

from aiida_submission_controller import __version__

if str(__version__) in current_changelog:
print("🛑 Current version already in `CHANGELOG.md`. Skipping...")
return

print("⬆️ Found updated version number, adapting `CHANGELOG.md`.")
tags = subprocess.run(["git", "tag", "--sort=v:refname"], capture_output=True, check=True, encoding="utf-8").stdout
latest_tag = re.findall(r"(v\d\.\d\.\d)\n", tags)[-1]

print(f"🔄 Comparing with latest tag `{latest_tag}`.")
commits = subprocess.run(
["git", "log", "--pretty=format:'%h|%H|%s'", f"{latest_tag}..origin/main"],
capture_output=True,
check=True,
encoding="utf-8",
).stdout

pr_pattern = re.compile(r"\(\S(?P<pr_number>\d+)\)")

changelog_message = f"## v{__version__}\n" + DEFAULT_CHANGELOG_SECTIONS

for commit in commits.splitlines():
# Remove the PR number from the commit message
pr_match = pr_pattern.search(commit)

if pr_match is not None:
pr_number = pr_match.groupdict()["pr_number"]
commit = commit.replace(rf"(#{pr_number})", "")

# Add the commit hash (short) to link to the changelog
commit = commit.strip("'")
hash_short, hash_long, message = commit.split("|", maxsplit=2)
message += f" [[{hash_short}](https://github.com/aiidateam/aiida-submission-controller/commit/{hash_long})]"
changelog_message += f"\n* {message}"

with Path("CHANGELOG.md").open("w", encoding="utf8") as handle:
handle.write(changelog_message + "\n\n" + current_changelog)

print("🚀 Success! Finalise the `CHANGELOG.md` and let's get this baby released.")


if __name__ == "__main__":
update_changelog()

0 comments on commit cf9d6f0

Please sign in to comment.