예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
 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))