Split out callbacks into their own blueprint. Add build trigger DB information and connect it with some APIs. Stub out the UI to allow for generation of triggers. Split out the triggers into a plugin-ish architecture for easily adding new triggers.

This commit is contained in:
jakedt 2014-02-18 15:50:15 -05:00
parent fc4983ed8b
commit b5d4919364
13 changed files with 500 additions and 170 deletions

View file

@ -1,7 +1,6 @@
import logging
import stripe
import urlparse
import json
from flask import request, make_response, Blueprint
@ -12,11 +11,14 @@ from util.invoice import renderInvoiceToHtml
from util.email import send_invoice_email
from util.names import parse_repository_name
from util.http import abort
from endpoints.trigger import BuildTrigger
logger = logging.getLogger(__name__)
webhooks = Blueprint('webhooks', __name__)
@webhooks.route('/stripe', methods=['POST'])
def stripe_webhook():
request_data = request.get_json()
@ -41,22 +43,37 @@ def stripe_webhook():
return make_response('Okay')
@webhooks.route('/github/push/repository/<path:repository>', methods=['POST'])
@webhooks.route('/push/<path:repository>/trigger/<trigger_uuid>',
methods=['POST'])
@process_auth
@parse_repository_name
def github_push_webhook(namespace, repository):
# data = request.get_json()
def github_push_webhook(namespace, repository, trigger_uuid):
logger.debug('Webhook received for %s/%s with uuid %s', namespace,
repository, trigger_uuid)
permission = ModifyRepositoryPermission(namespace, repository)
if permission.can():
payload = json.loads(request.form['payload'])
ref = payload['ref']
try:
trigger = model.get_build_trigger(namespace, repository, trigger_uuid)
except model.InvalidBuildTriggerException:
abort(404)
repo = model.get_repository(namespace, repository)
token = model.create_access_token(repo, 'write')
handler = BuildTrigger.get_trigger_for_service(trigger.service.name)
logger.debug('Passing webhook request to handler %s', handler)
df_id, tag, name = handler.incoming_webhook(request, trigger.auth_token,
trigger.config)
host = urlparse.urlparse(request.url).netloc
tag = '%s/%s/%s:latest' % (host, repo.namespace, repo.name)
full_tag = '%s/%s/%s:%s' % (host, trigger.repository.namespace,
trigger.repository.name, tag)
model.create_repository_build(repo, token, build_spec, tag)
token = model.create_access_token(trigger.repository, 'write')
logger.debug('Creating build %s with full_tag %s and dockerfile_id %s',
name, full_tag, df_id)
model.create_repository_build(trigger.repository, token, df_id, full_tag,
name)
return make_response('Okay')
abort(403)