mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-07 02:31:45 +00:00
73 lines
2.5 KiB
Python
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()
|