def setup_symbolized_builds(revision): """Set up symbolized release and debug build.""" sym_release_build_bucket_path = environment.get_value( 'SYM_RELEASE_BUILD_BUCKET_PATH') sym_debug_build_bucket_path = environment.get_value( 'SYM_DEBUG_BUILD_BUCKET_PATH') sym_release_build_urls = get_build_urls_list(sym_release_build_bucket_path) sym_debug_build_urls = get_build_urls_list(sym_debug_build_bucket_path) # We should at least have a symbolized debug or release build. if not sym_release_build_urls and not sym_debug_build_urls: logs.log_error('Error getting list of symbolized build urls.') return None sym_release_build_url = revisions.find_build_url( sym_release_build_bucket_path, sym_release_build_urls, revision) sym_debug_build_url = revisions.find_build_url(sym_debug_build_bucket_path, sym_debug_build_urls, revision) base_build_dir = _base_build_dir(sym_release_build_bucket_path) build_class = SymbolizedBuild if environment.is_trusted_host(): from bot.untrusted_runner import build_setup_host build_class = build_setup_host.RemoteSymbolizedBuild build = build_class(base_build_dir, revision, sym_release_build_url, sym_debug_build_url) if build.setup(): return build return None
def setup_regular_build(revision): """Sets up build with a particular revision.""" release_build_bucket_path = environment.get_value('RELEASE_BUILD_BUCKET_PATH') release_build_urls = get_build_urls_list(release_build_bucket_path) job_type = environment.get_value('JOB_NAME') if not release_build_urls: logs.log_error('Error getting release build urls for job %s.' % job_type) return None release_build_url = revisions.find_build_url(release_build_bucket_path, release_build_urls, revision) if not release_build_url: logs.log_error( 'Error getting build url for job %s (r%d).' % (job_type, revision)) # Try setting up trunk build. return setup_trunk_build() base_build_dir = _base_build_dir(release_build_bucket_path) build_class = RegularBuild if environment.is_trusted_host(): from bot.untrusted_runner import build_setup_host build_class = build_setup_host.RemoteRegularBuild target_weights = fuzzer_selection.get_fuzz_target_weights() build = build_class( base_build_dir, revision, release_build_url, target_weights=target_weights) if build.setup(): return build return None
def setup_trunk_build(): """Sets up latest trunk build.""" release_build_bucket_path = environment.get_value('RELEASE_BUILD_BUCKET_PATH') sym_release_build_bucket_path = environment.get_value( 'SYM_RELEASE_BUILD_BUCKET_PATH') sym_debug_build_bucket_path = environment.get_value( 'SYM_DEBUG_BUILD_BUCKET_PATH') base_build_dir = _base_build_dir(release_build_bucket_path) _setup_build_directories(base_build_dir) release_build_urls = get_build_urls_list(release_build_bucket_path) if not release_build_urls: logs.log_error('Error getting list of release build urls from %s.' % release_build_bucket_path) return None other_build_url_lists = [] if sym_release_build_bucket_path: sym_release_build_urls = get_build_urls_list(sym_release_build_bucket_path) if not sym_release_build_urls: logs.log_error( 'Error getting list of symbolized release build urls from %s.' % sym_release_build_bucket_path) return None other_build_url_lists.append((sym_release_build_bucket_path, sym_release_build_urls)) if sym_debug_build_bucket_path: sym_debug_builds_urls = get_build_urls_list(sym_debug_build_bucket_path) if not sym_debug_builds_urls: logs.log_error( 'Error getting list of symbolized debug build urls from %s.' % sym_debug_build_bucket_path) return None other_build_url_lists.append((sym_debug_build_bucket_path, sym_debug_builds_urls)) revision_pattern = revisions.revision_pattern_from_build_bucket_path( release_build_bucket_path) found_revision = False for release_build_url in release_build_urls: match = re.match(revision_pattern, release_build_url) if not match: continue revision = revisions.convert_revision_to_integer(match.group(1)) if (not other_build_url_lists or all( revisions.find_build_url(l[0], l[1], revision) for l in other_build_url_lists)): found_revision = True break if not found_revision: logs.log_error('Unable to find a matching revision.') return None return setup_regular_build(revision)
def test_find_build_url(self): """Tests test_find_build_url.""" bucket_path = 'gs://bucket/path/asan-([0-9]+).zip' build_urls_list = [ 'gs://bucket/path/asan-1000.zip', 'gs://bucket/path/asan-2000.zip', 'gs://bucket/path/asan-3000.zip', 'gs://bucket/path/asan-4000.zip', ] self.assertEqual( revisions.find_build_url(bucket_path, build_urls_list, 1000), 'gs://bucket/path/asan-1000.zip') self.assertEqual( revisions.find_build_url(bucket_path, build_urls_list, 2000), 'gs://bucket/path/asan-2000.zip') self.assertEqual( revisions.find_build_url(bucket_path, build_urls_list, 3000), 'gs://bucket/path/asan-3000.zip') self.assertEqual( revisions.find_build_url(bucket_path, build_urls_list, 4000), 'gs://bucket/path/asan-4000.zip') self.assertIsNone( revisions.find_build_url(bucket_path, build_urls_list, 5000))