Compare commits

...

2 commits

Author SHA1 Message Date
a3c47ab531
Merge d30a4348a6 into c1cf16a705 2024-10-30 01:22:37 +01:00
Alexis Métaireau
d30a4348a6
Add a script to help generate release notes from merged pull requests 2024-10-29 22:51:38 +01:00

View file

@ -0,0 +1,67 @@
import sys
import requests
REPOSITORY = "https://github.com/freedomofpress/dangerzone/"
TEMPLATE = "- {title} ([#{number}]({url}))"
def get_prs_since_last_release(owner, repo):
session = requests.Session()
session.headers["Accept"] = "application/vnd.github.v3+json"
# Try to get latest release
response = session.get(
f"https://api.github.com/repos/{owner}/{repo}/releases/latest"
)
since = None
if response.ok:
since = response.json()["published_at"]
# Get merged PRs
response = session.get(
f"https://api.github.com/repos/{owner}/{repo}/pulls",
params={
"state": "closed",
"sort": "updated",
"direction": "desc",
"per_page": 100,
},
)
response.raise_for_status()
prs = []
for pr in response.json():
if not pr["merged_at"]:
continue
if since and pr["merged_at"] <= since:
break
prs.append(
TEMPLATE.format(title=pr["title"], number=pr["number"], url=pr["html_url"])
)
return prs
def main():
try:
url_path = REPOSITORY.rstrip("/").split("github.com/")[1]
owner, repo = url_path.split("/")[-2:]
except (ValueError, IndexError):
print("Error: Invalid GitHub URL", file=sys.stderr)
sys.exit(1)
try:
notes = get_prs_since_last_release(owner, repo)
print("\n".join(notes))
except requests.exceptions.HTTPError as e:
print(f"Error: {e.response.json().get('message', str(e))}", file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()