Add migration for BitBucket web hooks

This needs to added only *after* we roll out #255
This commit is contained in:
Joseph Schorr 2015-07-21 14:55:50 -04:00
parent f6311b09fe
commit c3f269ee23
3 changed files with 114 additions and 60 deletions

View file

@ -359,19 +359,10 @@ class BitbucketBuildTrigger(BuildTriggerHandler):
def deactivate(self):
config = self.config
# TODO(jschorr): Remove the old hook removal code once everyone is migrated.
old_hook_id = config.pop('hook_id', None)
webhook_id = config.pop('webhook_id', None)
deploy_key_id = config.pop('deploy_key_id', None)
repository = self._get_repository_client()
# Remove the old service hook.
if old_hook_id is not None:
(result, _, err_msg) = repository.services().delete(old_hook_id)
if not result:
msg = 'Unable to remove service hook from repository: %s' % err_msg
raise TriggerDeactivationException(msg)
# Remove the webhook.
if webhook_id is not None:
(result, _, err_msg) = repository.webhooks().delete(webhook_id)
@ -556,15 +547,6 @@ class BitbucketBuildTrigger(BuildTriggerHandler):
return prepared
def handle_trigger_request(self, request):
# Check for a payload field. If found, this is a V1 service request.
payload_json = request.form.get('payload')
if payload_json:
return self.handle_V1_trigger_request(request)
# Otherwise, this is a V2 webhook request.
return self.handle_V2_trigger_request(request)
def handle_V2_trigger_request(self, request):
payload = request.get_json()
if not 'push' in payload:
logger.debug('Skipping BitBucket request due to missing push data in payload')
@ -607,48 +589,6 @@ class BitbucketBuildTrigger(BuildTriggerHandler):
actor=payload.get('actor'))
def handle_V1_trigger_request(self, request):
# TODO(jschorr): Delete this code after the migration has successfully completed.
# Parse the JSON payload.
payload_json = request.form.get('payload')
if not payload_json:
logger.debug('Skipping BitBucket request due to missing payload')
raise SkipRequestException()
try:
payload = json.loads(payload_json)
except ValueError:
logger.debug('Skipping BitBucket request due to invalid payload')
raise SkipRequestException()
logger.debug('BitBucket trigger payload %s', payload)
# Make sure we have a commit in the payload.
if not payload.get('commits'):
logger.debug('Skipping BitBucket request due to missing commits block')
raise SkipRequestException()
# Check if this build should be skipped by commit message.
commit = payload['commits'][-1]
commit_message = commit['message']
if should_skip_commit(commit_message):
logger.debug('Skipping BitBucket request due to commit message request')
raise SkipRequestException()
# Check to see if this build should be skipped by ref.
if not commit.get('branch') and not commit.get('tag'):
logger.debug('Skipping BitBucket request due to missing branch and tag')
raise SkipRequestException()
ref = 'refs/heads/' + commit['branch'] if commit.get('branch') else 'refs/tags/' + commit['tag']
logger.debug('Checking BitBucket request: %s', ref)
raise_if_skipped(self.config, ref)
commit_sha = commit['node']
return self._prepare_build(commit_sha, ref, False)
def manual_start(self, run_parameters=None):
run_parameters = run_parameters or {}
repository = self._get_repository_client()