mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-29 10:12:38 +02:00
67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
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()
|