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.')
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) ]
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.')
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)
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': [] }
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)