Esempio n. 1
0
    def __init__(self, tags=None, builders=None, schedulers=None, branches=None,
                 add_patch=False, formatter=None):

        super().__init__('all', tags, builders, schedulers, branches, None, False, add_patch)
        self.formatter = formatter
        if self.formatter is None:
            self.formatter = MessageFormatterRenderable('Build pending.')
Esempio n. 2
0
    def _create_default_generators(self):
        start_formatter = MessageFormatterRenderable('Build started.')
        end_formatter = MessageFormatterRenderable('Build done.')

        return [
            BuildStartEndStatusGenerator(start_formatter=start_formatter,
                                         end_formatter=end_formatter)
        ]
Esempio n. 3
0
    def __init__(self, tags=None, builders=None, schedulers=None, branches=None, add_logs=False,
                 add_patch=False, start_formatter=None, end_formatter=None):

        super().__init__('all', tags, builders, schedulers, branches, None, add_logs, add_patch)
        self.start_formatter = start_formatter
        if self.start_formatter is None:
            self.start_formatter = MessageFormatterRenderable('Build started.')
        self.end_formatter = end_formatter
        if self.end_formatter is None:
            self.end_formatter = MessageFormatterRenderable('Build done.')
Esempio n. 4
0
    def test_setting_options(self):
        generator = BuildStartEndStatusGenerator(
            start_formatter=MessageFormatterRenderable('Build started.'),
            end_formatter=MessageFormatterRenderable('Build finished.'))

        self.setupReporter(statusName='Build', generators=[generator])
        build = yield self.insert_build_finished(SUCCESS)
        # we make sure proper calls to txrequests have been made
        self._http.expect('post',
                          '/rest/build-status/1.0/commits/d34db33fd43db33f',
                          json={
                              'url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'state': 'INPROGRESS',
                              'key': 'Builder0',
                              'name': 'Build',
                              'description': 'Build started.'
                          },
                          code=HTTP_PROCESSED)
        self._http.expect('post',
                          '/rest/build-status/1.0/commits/d34db33fd43db33f',
                          json={
                              'url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'state': 'SUCCESSFUL',
                              'key': 'Builder0',
                              'name': 'Build',
                              'description': 'Build finished.'
                          },
                          code=HTTP_PROCESSED)
        self._http.expect('post',
                          '/rest/build-status/1.0/commits/d34db33fd43db33f',
                          json={
                              'url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'state': 'FAILED',
                              'key': 'Builder0',
                              'name': 'Build',
                              'description': 'Build finished.'
                          },
                          code=HTTP_PROCESSED)
        build['complete'] = False
        yield self.sp._got_event(('builds', 20, 'new'), build)
        build['complete'] = True
        yield self.sp._got_event(('builds', 20, 'finished'), build)
        build['results'] = FAILURE
        yield self.sp._got_event(('builds', 20, 'finished'), build)
Esempio n. 5
0
class BuildRequestGenerator(BuildStatusGeneratorMixin):

    wanted_event_keys = [
        ('buildrequests', None, 'new')
    ]

    compare_attrs = ['formatter']

    def __init__(self, tags=None, builders=None, schedulers=None, branches=None,
                 add_patch=False, formatter=None):

        super().__init__('all', tags, builders, schedulers, branches, None, False, add_patch)
        self.formatter = formatter
        if self.formatter is None:
            self.formatter = MessageFormatterRenderable('Build pending.')

    @defer.inlineCallbacks
    def partial_build_dict(self, master, buildrequest):
        brdict = yield master.db.buildrequests.getBuildRequest(buildrequest['buildrequestid'])
        bdict = {}

        props = Properties()
        buildrequest = yield BuildRequest.fromBrdict(master, brdict)
        builder = yield master.botmaster.getBuilderById(brdict['builderid'])

        Build.setupPropertiesKnownBeforeBuildStarts(props, [buildrequest], builder)
        Build.setupBuildProperties(props, [buildrequest])

        bdict['properties'] = props.asDict()
        yield utils.get_details_for_buildrequest(master, brdict, bdict)
        return bdict

    @defer.inlineCallbacks
    def generate(self, master, reporter, key, buildrequest):
        build = yield self.partial_build_dict(master, buildrequest)

        if not self.is_message_needed_by_props(build):
            return None

        report = yield self.buildrequest_message(master, build)
        return report

    @defer.inlineCallbacks
    def buildrequest_message(self, master, build):
        patches = self._get_patches_for_build(build)
        users = []
        buildmsg = yield self.formatter.format_message_for_build(master, build, is_buildset=True,
                                                                 mode=self.mode, users=users)

        return {
            'body': buildmsg['body'],
            'subject': buildmsg['subject'],
            'type': buildmsg['type'],
            'results': build['results'],
            'builds': [build],
            'users': list(users),
            'patches': patches,
            'logs': []
        }
Esempio n. 6
0
    def test_custom_description(self):
        start_formatter = MessageFormatterRenderable(
            Interpolate("started %(prop:buildername)s"))
        end_formatter = MessageFormatterRenderable(
            Interpolate("finished %(prop:buildername)s"))

        generator = BuildStartEndStatusGenerator(
            start_formatter=start_formatter, end_formatter=end_formatter)

        yield self.createGerritStatus(generators=[generator])
        build = yield self.insert_build_new()
        # we make sure proper calls to txrequests have been made
        self._http.expect(
            method='post',
            ep='/a/changes/12/revisions/2/verify-status~verifications',
            json={
                'comment': 'started Builder0',
                'abstain': False,
                'name': 'Builder0',
                'reporter': 'buildbot',
                'url': 'http://localhost:8080/#builders/79/builds/0',
                'value': 0,
                'duration': 'pending'
            })
        self._http.expect(
            method='post',
            ep='/a/changes/12/revisions/2/verify-status~verifications',
            json={
                'comment': 'finished Builder0',
                'abstain': False,
                'name': 'Builder0',
                'reporter': 'buildbot',
                'url': 'http://localhost:8080/#builders/79/builds/0',
                'value': 1,
                'duration': '2h 1m 4s'
            })
        yield self.sp._got_event(('builds', 20, 'new'), build)
        build['complete'] = True
        build['complete_at'] = build['started_at'] + \
            datetime.timedelta(hours=2, minutes=1, seconds=4)
        build['results'] = SUCCESS
        yield self.sp._got_event(('builds', 20, 'finished'), build)