|
| 1 | +import requests |
| 2 | +import os |
| 3 | +import re |
| 4 | + |
| 5 | +from gidgethub import sansio, routing |
| 6 | + |
| 7 | +from . import util |
| 8 | + |
| 9 | +router = routing.Router() |
| 10 | + |
| 11 | +TITLE_RE = re.compile(r'\[(?P<branch>\d+\.\d+)\].+?(?P<pr>\d+)\)') |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +@router.register("status") |
| 16 | +async def check_status(event, gh, *args, **kwargs): |
| 17 | + """ |
| 18 | + Check the state change |
| 19 | + """ |
| 20 | + if event.data["commit"]["committer"]["login"] == "miss-islington": |
| 21 | + sha = event.data["sha"] |
| 22 | + status_url = f"https://github.com/api/repos/python/cpython/commits/{sha}/status" |
| 23 | + request_headers = sansio.create_headers( |
| 24 | + "miss-islington", |
| 25 | + oauth_token=os.getenv('GH_AUTH')) |
| 26 | + response = requests.get(status_url, |
| 27 | + headers=request_headers) |
| 28 | + result = response.json() |
| 29 | + |
| 30 | + if result["state"] != "pending": |
| 31 | + url = "https://github.com/api/repos/miss-islington/cpython/git/refs/heads/" |
| 32 | + response = requests.get(url, headers=request_headers) |
| 33 | + for ref in response.json(): |
| 34 | + print("ref obj") |
| 35 | + print(ref) |
| 36 | + if "backport-" in ref["ref"] and ref["object"]["sha"] == sha: |
| 37 | + backport_branch_name = ref["ref"].split("/")[-1] |
| 38 | + pr_url = f"https://github.com/api/repos/python/cpython/pulls?state=open&head=miss-islington:{backport_branch_name}" |
| 39 | + pr_response = requests.get(pr_url, headers=request_headers).json() |
| 40 | + print("pr respponse") |
| 41 | + print(pr_response) |
| 42 | + if pr_response: |
| 43 | + pr_number = pr_response[0]["number"] |
| 44 | + normalized_pr_title = util.normalize_title(pr_response[0]["title"], |
| 45 | + pr_response[0]["body"]) |
| 46 | + |
| 47 | + title_match = TITLE_RE.match(normalized_pr_title) |
| 48 | + if title_match: |
| 49 | + original_pr_number = title_match.group('pr') |
| 50 | + original_pr_url = f"https://github.com/api/repos/python/cpython/pulls/{original_pr_number}" |
| 51 | + original_pr_result = requests.get(original_pr_url, |
| 52 | + headers=request_headers).json() |
| 53 | + pr_author = original_pr_result["user"]["login"] |
| 54 | + committer = original_pr_result["merged_by"]["login"] |
| 55 | + |
| 56 | + participants = util.get_participants( |
| 57 | + pr_author, committer) |
| 58 | + emoji = "✅" if result['state'] == "success" else "❌" |
| 59 | + util.comment_on_pr( |
| 60 | + pr_number, |
| 61 | + message=f"{participants}: Backport status check is done, and it's a {result['state']} {emoji} .") |
0 commit comments