blob: ddf77e93c2972afde6f4222f1756fdfab46ac160 [file] [log] [blame]
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Recipe for building and testing cobalt-registry.
Uses Cobalt's cobaltb.py script to build the config_parser tool,
then runs it on Cobalt's `config` repo.
"""
from recipe_engine.recipe_api import Property
DEPS = [
'fuchsia/checkout',
'fuchsia/jiri',
'recipe_engine/buildbucket',
'recipe_engine/context',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/raw_io',
'recipe_engine/step',
]
PROPERTIES = {
'remote':
Property(kind=str, help='URL to remote repo containing Jira manifest'),
'manifest':
Property(
kind=str, help='Jiri manifest file to use, relative to `remote`'),
}
# The name of the gerrit project tested by this recipe.
MANIFEST_PROJECT_NAME = 'cobalt-registry'
def RunSteps(api, remote, manifest):
# Check out the project from the specified manifest.
with api.context(infra_steps=True):
build_input = api.buildbucket.build.input
api.checkout.with_options(
path=api.path['start_dir'],
manifest=manifest,
remote=remote,
project=MANIFEST_PROJECT_NAME,
build_input=build_input)
revision = build_input.gitiles_commit.id
if not revision:
revision = api.jiri.project([MANIFEST_PROJECT_NAME
]).json.output[0]['revision']
api.step.active_result.presentation.properties['got_revision'] = revision
# Root of the cobalt repo as checked out by the manifest.
cobalt_src_dir = api.path['start_dir'].join('third_party/cobalt')
tools_dir = api.path['start_dir'].join('tools')
# Build config_parser.
with api.context(cwd=cobalt_src_dir):
api.python('setup', './cobaltb.py', args=['setup'])
api.python('build', './cobaltb.py', args=['build', '--out_dir', tools_dir])
config_parser_bin = tools_dir.join('config_parser')
config_validator_bin = tools_dir.join('config_change_validator')
# Root of the config repo as checked out by the manifest.
config_src_dir = api.path['start_dir'].join('third_party/cobalt_config')
# Run config_parser on the config repo checkout.
api.step('check config', [
config_parser_bin,
'--output_file',
api.path['start_dir'].join('new_config'),
'--config_dir',
config_src_dir,
])
with api.context(cwd=config_src_dir):
api.step('checkout parent', ['git', 'checkout', 'HEAD^'])
api.step('check parent config', [
config_parser_bin,
'--output_file',
api.path['start_dir'].join('old_config'),
'--config_dir',
config_src_dir,
])
commit_msg = ""
with api.context(cwd=config_src_dir):
api.step('checkout head', ['git', 'checkout', '-'])
commit_msg = api.step(
'read commit message', ['git', 'show', '-s', '--format=%b'],
stdout=api.raw_io.output()).stdout
api.step('validate change', [
config_validator_bin,
'--old_config',
api.path['start_dir'].join('old_config'),
'--new_config',
api.path['start_dir'].join('new_config'),
'--commit_msg',
commit_msg,
])
def GenTests(api):
yield (api.test('ci') + api.buildbucket.ci_build(
git_repo='https://fuchsia.googlesource.com/cobalt-registry',) +
api.properties(
remote='https://fuchsia.googlesource.com/manifest',
manifest='config.manifest',
project='cobalt-registry',
))
yield (api.test('cq_try') + api.buildbucket.try_build(
git_repo='https://fuchsia.googlesource.com/cobalt-registry',) +
api.properties.tryserver(
remote='https://fuchsia.googlesource.com/manifest',
manifest='config.manifest',
project='cobalt-registry',
))