def _DownloadBuildData(self, master_name, builder_name, build_number): """Downloads build data and returns a WfBuild instance.""" build = WfBuild.Get(master_name, builder_name, build_number) if not build: build = WfBuild.Create(master_name, builder_name, build_number) # Cache the data to avoid pulling from master again. if self._BuildDataNeedUpdating(build): # Retrieve build data from build archive first. build.data = buildbot.GetBuildDataFromArchive( build.master_name, build.builder_name, build.build_number, self.HTTP_CLIENT_NO_404_ERROR) if build.data is None: if not lock_util.WaitUntilDownloadAllowed( master_name): # pragma: no cover raise pipeline.Retry('Too many download from %s' % master_name) # Retrieve build data from build master. build.data = buildbot.GetBuildDataFromBuildMaster( build.master_name, build.builder_name, build.build_number, self.HTTP_CLIENT_LOGGING_ERRORS) build.last_crawled_time = datetime.utcnow() build.put() return build
def DownloadBuildData(master_name, builder_name, build_number): """Downloads build data and returns a WfBuild instance.""" build = WfBuild.Get(master_name, builder_name, build_number) if not build: build = WfBuild.Create(master_name, builder_name, build_number) # Cache the data to avoid pulling from master again. if _BuildDataNeedUpdating(build): use_cbe = waterfall_config.GetDownloadBuildDataSettings().get( 'use_chrome_build_extract') if use_cbe: # Retrieve build data from build archive first. build.data = buildbot.GetBuildDataFromArchive( master_name, builder_name, build_number, HTTP_CLIENT_NO_404_ERROR) if build.data: build.data_source = CHROME_BUILD_EXTRACT elif not lock_util.WaitUntilDownloadAllowed( master_name): # pragma: no cover return None if not build.data or not use_cbe: # Retrieve build data from build master. build.data = buildbot.GetBuildDataFromBuildMaster( master_name, builder_name, build_number, HTTP_CLIENT_LOGGING_ERRORS) build.data_source = BUILDBOT_MASTER build.last_crawled_time = time_util.GetUTCNow() build.put() return build
def testGetBuildDataFromBuildMasterFailure(self): master_name = 'a' builder_name = 'b c' build_number = 1 expected_url = 'https://build.chromium.org/p/a/json/builders/b%20c/builds/1' http_client = DummyHttpClient(404, 'Not Found') data = buildbot.GetBuildDataFromBuildMaster(master_name, builder_name, build_number, http_client) self.assertIsNone(data) self.assertEqual(1, len(http_client.requests)) self.assertEqual(expected_url, http_client.requests[0])
def testGetBuildDataFromBuildMasterSuccess(self): master_name = 'a' builder_name = 'b c' build_number = 1 expected_url = 'https://build.chromium.org/p/a/json/builders/b%20c/builds/1' http_client = DummyHttpClient(200, 'abc') data = buildbot.GetBuildDataFromBuildMaster(master_name, builder_name, build_number, http_client) self.assertEqual(http_client.response_content, data) self.assertEqual(1, len(http_client.requests)) self.assertEqual(expected_url, http_client.requests[0])
def testGetBuildDataFromBuildMasterSuccess(self, mock_fn): master_name = 'a' builder_name = 'b c' build_number = 1 response = { 'data': base64.b64encode('response') } mock_fn.return_value = json.dumps(response) self.assertEqual('response', buildbot.GetBuildDataFromBuildMaster( master_name, builder_name, build_number, self.http_client))
def _ReferredBuildExceptionedOut(self, master_name, builder_name, build_number, http_client): """Checks if the build had exception, if so don't run the step.""" json_data = buildbot.GetBuildDataFromBuildMaster( master_name, builder_name, build_number, http_client) if not json_data: logging.error('Failed to get build data for %s, %s, %s' % (master_name, builder_name, build_number)) return False try: build_data = json.loads(json_data) except ValueError: logging.error('Failed to decode build data for %s, %s, %s' % (master_name, builder_name, build_number)) return False build_result = buildbot.GetBuildResult(build_data) return build_result == buildbot.EXCEPTION
def _LatestBuildFailed(master_name, builder_name, build_number): http_client = HttpClientAppengine() latest_build_numbers = buildbot.GetRecentCompletedBuilds( master_name, builder_name, http_client) for checked_build_number in latest_build_numbers: if checked_build_number <= build_number: return True checked_build_data = buildbot.GetBuildDataFromBuildMaster( master_name, builder_name, checked_build_number, http_client) if not checked_build_data: logging.error("Failed to get build data for %s/%s/%d" % (master_name, builder_name, checked_build_number)) return False checked_build_result = buildbot.GetBuildResult( json.loads(checked_build_data)) if checked_build_result in [buildbot.SUCCESS, buildbot.WARNINGS]: return False return True