mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-17 04:48:21 +00:00
Mallory - Single commit
This commit is contained in:
72
scripts/print_release_diffs.py
Normal file
72
scripts/print_release_diffs.py
Normal file
@@ -0,0 +1,72 @@
|
||||
"""
|
||||
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()
|
||||
Reference in New Issue
Block a user