mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-29 02:12:36 +02:00
Add a script to help generate release notes from merged pull requests
This commit is contained in:
parent
5ed4a048a0
commit
d30a4348a6
1 changed files with 67 additions and 0 deletions
67
dev_scripts/generate-release-notes.py
Normal file
67
dev_scripts/generate-release-notes.py
Normal 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()
|
Loading…
Reference in a new issue