mirror of
https://git.citron-emu.org/citron/emu
synced 2025-05-19 06:07:50 +01:00
60 lines
2.2 KiB
Python
Executable file
60 lines
2.2 KiB
Python
Executable file
# SPDX-FileCopyrightText: 2019 citron Emulator Project
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# Apply patches that are tagged with a specific label
|
|
# Current labels include:
|
|
# "canary merge benefit"
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import re
|
|
from urllib import request
|
|
|
|
|
|
def get_pull_request_list(page=1):
|
|
url = f"https://api.github.com/repos/Citron-Project/Cit/pulls?page={page}"
|
|
headers = {'Accept': 'application/vnd.github.v3+json'}
|
|
token = os.environ.get('EARLY_ACCESS_TOKEN')
|
|
if token:
|
|
headers['Authorization'] = f'token {token}'
|
|
req = request.Request(url, headers=headers)
|
|
response = request.urlopen(req)
|
|
result = json.loads(response.read().decode('utf-8'))
|
|
if len(result) > 0:
|
|
return result + get_pull_request_list(page + 1)
|
|
return []
|
|
|
|
|
|
seen = {}
|
|
|
|
for pr in get_pull_request_list():
|
|
pn = pr['number']
|
|
if pn in seen:
|
|
continue
|
|
seen[pn] = True
|
|
print(subprocess.check_output(["git", "fetch", "https://github.com/Citron-Project/Cit.git", f"pull/{pn}/head:pr-{pn}", "-f", "--no-recurse-submodules"]))
|
|
out = subprocess.check_output(["python3", ".ci/scripts/merge/check-label-presence.py", str(pn), sys.argv[1]])
|
|
if b'true' in out:
|
|
print(f'Applying PR #{pn} matching label {sys.argv[1]}...')
|
|
try:
|
|
if b'changes requested' in subprocess.check_output(["python3", ".ci/scripts/merge/check-reviews.py", str(pn)]):
|
|
print(f'PR #{pn} has requested changes, skipping')
|
|
continue
|
|
else:
|
|
print(f'PR #{pn} has approving reviews, applying')
|
|
except:
|
|
print('Could not find any valid reviews, applying anyway')
|
|
try:
|
|
print(subprocess.check_output(["git", "merge", "--squash", f"pr-{pn}", "-m", f"Merge PR #{pn} tagged with: {sys.argv[1]}"]))
|
|
except:
|
|
print("Failed to merge cleanly, are there conflicts?")
|
|
exit(0)
|
|
|
|
# Apply a tag to the EA release
|
|
try:
|
|
print(subprocess.check_output(["git", "tag", "-f", f"canary/{sys.argv[1]}"]))
|
|
except:
|
|
print("Failed to apply canary tag")
|
|
exit(0)
|