Files
lighthouse/scripts/print_release_diffs.py
2025-10-16 18:57:48 +11:00

73 lines
2.5 KiB
Python

"""
Summarise pull requests between two Lighthouse releases.
Usage:
export GITHUB_TOKEN=your_token
python -m pip install requests==2.32.4
python print_release_diffs.py --base v7.0.1 --head release-v7.1.0
Shows commit SHA, PR number, 'backwards-incompat' label status, and PR title.
"""
import requests
import re
import argparse
import os
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN")
if not GITHUB_TOKEN:
raise SystemExit("Error: Please set the GITHUB_TOKEN environment variable.")
parser = argparse.ArgumentParser(description="Summarise PRs between two Lighthouse versions.")
parser.add_argument("--base", required=True, help="Base tag or branch (older release)")
parser.add_argument("--head", required=True, help="Head tag or branch (newer release)")
args = parser.parse_args()
BASE = args.base
HEAD = args.head
OWNER = 'sigp'
REPO = 'lighthouse'
HEADERS = {
'Authorization': f'token {GITHUB_TOKEN}',
'Accept': 'application/vnd.github+json'
}
def get_commits_between(base, head):
url = f'https://api.github.com/repos/{OWNER}/{REPO}/compare/{base}...{head}'
response = requests.get(url, headers=HEADERS)
response.raise_for_status()
return response.json()['commits']
def has_backwards_incompat_label(pr_number):
url = f'https://api.github.com/repos/{OWNER}/{REPO}/issues/{pr_number}'
response = requests.get(url, headers=HEADERS)
if response.status_code != 200:
raise Exception(f"Failed to fetch PR #{pr_number}")
labels = response.json().get('labels', [])
return any(label['name'] == 'backwards-incompat' for label in labels)
def main():
commits = get_commits_between(BASE, HEAD)
print(" # Commit SHA PR Number Has backwards-incompat Label PR Title")
print("--- ------------ ----------- ------------------------------ --------------------------------------------")
for i, commit in enumerate(commits, 1):
sha = commit['sha'][:12]
message = commit['commit']['message']
pr_match = re.search(r"\(#(\d+)\)", message)
if not pr_match:
print(f"{i:<3} {sha} {'-':<11} {'-':<30} [NO PR MATCH]: {message.splitlines()[0]}")
continue
pr_number = int(pr_match.group(1))
try:
has_label = has_backwards_incompat_label(pr_number)
print(f"{i:<3} {sha} {pr_number:<11} {str(has_label):<30} {message.splitlines()[0]}")
except Exception as e:
print(f"{i:<3} {sha} {pr_number:<11} {'ERROR':<30} [ERROR FETCHING PR]: {e}")
if __name__ == '__main__':
main()