blob: 2ebba8afc086577d75484baaaa6f05082bfc147e [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine.recipe_api import Property
from recipe_engine.config import List
DEPS = [
'recipe_engine/cipd',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/step'
]
PROPERTIES = {
'recipe_bundler_pkg': Property(
kind=str, help='The CIPD package to fetch the recipe bundler from',
default='infra/tools/luci/recipe_bundler/${platform}',
),
'recipe_bundler_vers': Property(
kind=str, help='The version of the recipe_bundler CIPD package to fetch',
),
'repo_specs': Property(
kind=List(str),
help=('The list of repo specs to process, as defined by recipe_bundler\'s '
'"-r" flag.'),
default=[]
),
'repo_specs_optional': Property(
kind=List(str),
help=('Like "repo_specs", but it\'s not an error if any these fail.'),
default=[]
),
'package_name_prefix': Property(
kind=str, help='The CIPD package prefix for non-internal recipes',
),
'package_name_internal_prefix': Property(
kind=str, help='The CIPD package prefix for internal recipes',
),
}
def RunSteps(api, recipe_bundler_pkg, recipe_bundler_vers, repo_specs,
repo_specs_optional, package_name_prefix,
package_name_internal_prefix):
bundler_path = api.path['cache'].join('builder', 'bundler')
ensure_file = api.cipd.EnsureFile().add_package(
recipe_bundler_pkg, recipe_bundler_vers)
api.cipd.ensure(bundler_path, ensure_file)
cmd = [
bundler_path.join('recipe_bundler'),
'bundle',
'-log-level', 'debug',
'-workdir', api.path['cache'].join('builder', 'workdir'),
'-package-name-prefix', package_name_prefix,
'-package-name-internal-prefix', package_name_internal_prefix,
]
if repo_specs:
args = []
for spec in repo_specs:
args += ['-r', spec]
api.step('run recipe_bundler', cmd + args)
if repo_specs_optional:
args = []
for spec in repo_specs_optional:
args += ['-r', spec]
# TODO(mmoss): If bundling fails, set a "Warning" step result rather than
# just ignoring the errors? Requires crbug.com/854099.
api.step('run optional recipe_bundler', cmd + args, ok_ret='any')
def GenTests(api):
yield api.test('basic') + api.properties(
recipe_bundler_vers='latest',
repo_specs=[
'chromium.googlesource.com/chromium/tools/build',
'chromium.googlesource.com/infra/infra',
],
package_name_prefix='infra/recipe_bundles',
package_name_internal_prefix='infra_internal/recipe_bundles',
)
yield api.test('basic_optional') + api.properties(
recipe_bundler_vers='latest',
repo_specs_optional=[
'chromium.googlesource.com/chromium/tools/build:'
'FETCH_HEAD,refs/heads/maybe/bogus',
],
package_name_prefix='infra/recipe_bundles',
package_name_internal_prefix='infra_internal/recipe_bundles',
) + api.step_data('run optional recipe_bundler', retcode=1)