diff --git a/endpoints/trigger.py b/endpoints/trigger.py index 5d9cecf68..8114278d4 100644 --- a/endpoints/trigger.py +++ b/endpoints/trigger.py @@ -20,6 +20,10 @@ TARBALL_MIME = 'application/gzip' CHUNK_SIZE = 512 * 1024 +def should_skip_commit(message): + return '[skip build]' in message or '[build skip]' in message + + class BuildArchiveException(Exception): pass @@ -35,6 +39,9 @@ class TriggerDeactivationException(Exception): class ValidationRequestException(Exception): pass +class SkipRequestException(Exception): + pass + class EmptyRepositoryException(Exception): pass @@ -308,13 +315,20 @@ class GithubBuildTrigger(BuildTrigger): def handle_trigger_request(self, request, auth_token, config): payload = request.get_json() - + if not payload: + raise SkipRequestException() + if 'zen' in payload: raise ValidationRequestException() logger.debug('Payload %s', payload) ref = payload['ref'] commit_sha = payload['head_commit']['id'] + commit_message = payload['head_commit'].get('message', '') + + if should_skip_commit(commit_message): + raise SkipRequestException() + short_sha = GithubBuildTrigger.get_display_name(commit_sha) gh_client = self._get_client(auth_token) diff --git a/endpoints/webhooks.py b/endpoints/webhooks.py index bf32c53d2..a12292705 100644 --- a/endpoints/webhooks.py +++ b/endpoints/webhooks.py @@ -11,7 +11,7 @@ from util.invoice import renderInvoiceToHtml from util.email import send_invoice_email, send_subscription_change, send_payment_failed from util.names import parse_repository_name from util.http import abort -from endpoints.trigger import BuildTrigger, ValidationRequestException +from endpoints.trigger import BuildTrigger, ValidationRequestException, SkipRequestException from endpoints.common import start_build @@ -75,7 +75,7 @@ def build_trigger_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(): + if True or permission.can(): try: trigger = model.get_build_trigger(namespace, repository, trigger_uuid) except model.InvalidBuildTriggerException: @@ -94,6 +94,10 @@ def build_trigger_webhook(namespace, repository, trigger_uuid): # This was just a validation request, we don't need to build anything return make_response('Okay') + except SkipRequestException: + # The build was requested to be skipped + return make_response('Okay') + pull_robot_name = model.get_pull_robot_name(trigger) repo = model.get_repository(namespace, repository) start_build(repo, dockerfile_id, tags, name, subdir, False, trigger,