Exemple #1
0
    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
Exemple #2
0
    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, 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')
Exemple #5
0
    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