def handle_webhook(self): """ Handle GitLab events for push and tag_push. GitLab doesn't have a separate event for creation/deletion, instead, it sets the before/after field to 0000000000000000000000000000000000000000 ('0' * 40) """ event = self.request.data.get('object_kind', GITLAB_PUSH) webhook_gitlab.send( Project, project=self.project, data=self.request.data, event=event, ) # Handle push events and trigger builds if event in (GITLAB_PUSH, GITLAB_TAG_PUSH): data = self.request.data before = data['before'] after = data['after'] # Tag/branch created/deleted if GITLAB_NULL_HASH in (before, after): return self.sync_versions(self.project) # Normal push to master try: branches = [self._normalize_ref(data['ref'])] return self.get_response_push(self.project, branches) except KeyError: raise ParseError('Parameter "ref" is required') return None
def handle_webhook(self, request, project, data=None): # Get event and trigger other webhook events event = data.get('object_kind', GITLAB_PUSH) webhook_gitlab.send(Project, project=project, data=data, event=event) # Handle push events and trigger builds if event == GITLAB_PUSH: try: branches = [request.data['ref'].replace('refs/heads/', '')] return self.get_response_push(project, branches) except KeyError: raise ParseError('Parameter "ref" is required')
def handle_webhook(self): """ Handle GitLab events for push and tag_push. GitLab doesn't have a separate event for creation/deletion, instead, it sets the before/after field to 0000000000000000000000000000000000000000 ('0' * 40) """ event = self.request.data.get('object_kind', GITLAB_PUSH) action = self.data.get('object_attributes', {}).get('action', None) log.bind(webhook_event=event) webhook_gitlab.send( Project, project=self.project, data=self.request.data, event=event, ) # Handle push events and trigger builds if event in (GITLAB_PUSH, GITLAB_TAG_PUSH): data = self.request.data before = data.get('before') after = data.get('after') # Tag/branch created/deleted if GITLAB_NULL_HASH in (before, after): log.debug( 'Triggered sync_versions.', before=before, after=after, ) return self.sync_versions_response(self.project) # Normal push to master try: branches = [self._normalize_ref(data['ref'])] return self.get_response_push(self.project, branches) except KeyError: raise ParseError('Parameter "ref" is required') if self.project.external_builds_enabled and event == GITLAB_MERGE_REQUEST: if (action in [ GITLAB_MERGE_REQUEST_OPEN, GITLAB_MERGE_REQUEST_REOPEN, GITLAB_MERGE_REQUEST_UPDATE ]): # Handle open, update, reopen merge_request event. return self.get_external_version_response(self.project) if action in [ GITLAB_MERGE_REQUEST_CLOSE, GITLAB_MERGE_REQUEST_MERGE ]: # Handle merge and close merge_request event. return self.get_deactivated_external_version_response( self.project) return None