From f44478f7dcf4fb96730d6847d3ac26a050a49a6a Mon Sep 17 00:00:00 2001 From: lethosor Date: Thu, 31 Mar 2022 16:51:42 -0400 Subject: [PATCH] Add script to rebuild PRs on Buildmaster --- ci/buildmaster-rebuild-pr.py | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 ci/buildmaster-rebuild-pr.py diff --git a/ci/buildmaster-rebuild-pr.py b/ci/buildmaster-rebuild-pr.py new file mode 100755 index 000000000..7ce988683 --- /dev/null +++ b/ci/buildmaster-rebuild-pr.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 + +import argparse +import hashlib +import hmac +import json +import logging +import os +import uuid + +import requests + +logging.basicConfig(level=logging.DEBUG) + + +def get_required_env(name): + value = os.environ.get(name) + if not value: + raise ValueError(f'Expected environment variable {name!r} to be non-empty') + return value + + +def make_sig(body, secret, algorithm): + return hmac.new(secret.encode(), body.encode(), algorithm).hexdigest() + + +webhook_url = get_required_env('DFHACK_BUILDMASTER_WEBHOOK_URL') +secret = get_required_env('DFHACK_BUILDMASTER_WEBHOOK_SECRET') +api_token = get_required_env('GITHUB_TOKEN') +repo = get_required_env('GITHUB_REPO') + + +parser = argparse.ArgumentParser() +target_group = parser.add_mutually_exclusive_group(required=True) +target_group.add_argument('--pull-request', type=int, help='Pull request to rebuild') +args = parser.parse_args() + + +response = requests.get( + f'https://api.github.com/repos/{repo}/pulls/{args.pull_request}', + headers={ + 'Authorization': f'Bearer {api_token}', + }, +) +response.raise_for_status() +pull_request_data = response.json() + + +body = json.dumps({ + 'action': 'synchronize', + 'number': args.pull_request, + 'pull_request': pull_request_data, +}) + +response = requests.post( + 'https://lubar-webhook-proxy.appspot.com/github/buildmaster', + headers={ + 'Content-Type': 'application/json', + 'User-Agent': 'GitHub-Hookshot/' + requests.utils.default_user_agent(), + 'X-GitHub-Delivery': 'dfhack-rebuild-' + str(uuid.uuid4()), + 'X-GitHub-Event': 'pull_request', + 'X-Hub-Signature': 'sha1=' + make_sig(body, secret, hashlib.sha1), + 'X-Hub-Signature-256': 'sha256=' + make_sig(body, secret, hashlib.sha256), + }, + data=body, + timeout=15, +) + +print(response) +print(str(response.text)) +response.raise_for_status()