2020-05-13 13:13:33 +02:00
|
|
|
import flask
|
|
|
|
import requests
|
|
|
|
import os
|
|
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
import json
|
|
|
|
|
|
|
|
app = flask.Flask(__name__)
|
|
|
|
app.config["DEBUG"] = True # TODO: make production
|
|
|
|
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]
|
2020-09-29 17:49:38 +02:00
|
|
|
refspec = 'master'
|
|
|
|
if 'ph_scripts_refspec' in build_env:
|
|
|
|
refspec = build_env['ph_scripts_refspec']
|
2020-05-13 13:13:33 +02:00
|
|
|
build_request = {
|
|
|
|
'commit': 'HEAD',
|
2020-09-29 17:49:38 +02:00
|
|
|
'branch': refspec,
|
2020-05-13 13:13:33 +02:00
|
|
|
'env': build_env,
|
2020-06-04 15:04:42 +02:00
|
|
|
'message': f'D{build_env["ph_buildable_revision"]}',
|
2020-05-13 13:13:33 +02:00
|
|
|
}
|
|
|
|
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'
|
2020-05-14 12:57:38 +02:00
|
|
|
'/pipelines/diff-checks/builds',
|
2020-05-13 13:13:33 +02:00
|
|
|
json=build_request,
|
|
|
|
headers=headers)
|
|
|
|
app.logger.info('buildkite response: %s %s', response.status_code, response.text)
|
|
|
|
rjs = json.loads(response.text)
|
2020-05-25 16:42:40 +02:00
|
|
|
return rjs['web_url']
|
2020-05-13 13:13:33 +02:00
|
|
|
else:
|
|
|
|
return "expected POST request"
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
app.run(host='0.0.0.0:8080')
|