import flask import requests import os from urllib.parse import urlparse, parse_qs import json app = flask.Flask(__name__) app.config["DEBUG"] = False buildkite_api_token = os.getenv("BUILDKITE_API_TOKEN", "") @app.route('/', methods=['GET']) def home(): return "Hi LLVM!" @app.route('/build', methods=['POST', 'GET']) def build(): app.logger.info('request: %s %s', flask.request, flask.request.url) app.logger.info('headers: %s', flask.request.headers) if flask.request.method == 'POST': app.logger.info('data: %s', flask.request.data) app.logger.info('form: %s', flask.request.form) url = urlparse(flask.request.url) params = parse_qs(url.query) build_env = {} for k, v in params.items(): if len(v) == 1: build_env['ph_' + k] = v[0] refspec = 'main' if 'ph_scripts_refspec' in build_env: refspec = build_env['ph_scripts_refspec'] build_request = { 'commit': 'HEAD', 'branch': refspec, 'env': build_env, 'message': f'D{build_env["ph_buildable_revision"]}', } app.logger.info('buildkite request: %s', build_request) headers = {'Authorization': f'Bearer {buildkite_api_token}'} response = requests.post( 'https://api.buildkite.com/v2/organizations/llvm-project' '/pipelines/diff-checks/builds', json=build_request, headers=headers) app.logger.info('buildkite response: %s %s', response.status_code, response.text) rjs = json.loads(response.text) return rjs['web_url'] else: return "expected POST request" if __name__ == '__main__': app.run(host='0.0.0.0:8080')