blob: 483c18ba85f3cd82951c7ab2f37dd4f854725275 [file] [log] [blame]
# Copyright 2021 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.
import copy
from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb2
from PB.go.chromium.org.luci.led.job import job as job_pb2
from recipe_engine.post_process import (
MustRun,
StepCommandContains,
)
DEPS = [
'flutter/monorepo',
'flutter/shard_util',
'fuchsia/buildbucket_util',
'recipe_engine/buildbucket',
'recipe_engine/led',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/properties',
'recipe_engine/step',
]
def RunSteps(api):
build_configs = api.properties.get('builds', [])
test_configs = api.properties.get('tests', [])
props = api.shard_util.pre_process_properties({
'properties': {
'$flutter/osx_sdk':
'{"cleanup_cache": true, "sdk_version": "14a5294e"}',
'validation':
'docs'
}
})
assert isinstance(props['properties']['$flutter/osx_sdk'], dict)
assert props['properties']['validation'] == 'docs'
with api.step.nest("launch builds") as presentation:
reqs = api.shard_util.schedule_builds(build_configs, presentation)
with api.step.nest("collect builds") as presentation:
builds = api.shard_util.collect(reqs)
for build in builds.values():
if build.build_proto.status != common_pb2.SUCCESS:
raise api.step.StepFailure("build %s failed" % build.build_id)
api.shard_util.archive_full_build(
api.path['start_dir'].join('out', 'host_debug'), 'host_debug'
)
api.shard_util.download_full_builds(builds, api.path['cleanup'].join('out'))
with api.step.nest("launch builds") as presentation:
reqs = api.shard_util.schedule_tests(test_configs, builds, presentation)
api.shard_util.get_base_bucket_name()
def GenTests(api):
try_subbuild1 = api.shard_util.try_build_message(
build_id=8945511751514863186,
builder='ios_debug',
input_props={'task_name': 'mytask'},
output_props={
'cas_output_hash': {
'web_tests': 'abc', 'ios_debug': 'bcd', 'full_build': '123'
}
},
status='SUCCESS',
)
try_subbuild2 = api.shard_util.try_build_message(
build_id=8945511751514863187,
builder='builder-subbuild2',
output_props={
'cas_output_hash': {'web_tests': 'abc', 'ios_debug': 'bcd'}
},
status='SUCCESS',
)
try_failure = api.shard_util.try_build_message(
build_id=8945511751514863187,
builder='builder-subbuild2',
output_props={
'cas_output_hash': {'web_tests': 'abc', 'ios_debug': 'bcd'}
},
status='FAILURE',
)
led_try_subbuild1 = api.shard_util.try_build_message(
build_id=87654321,
builder='ios_debug',
input_props={'task_name': 'mytask'},
output_props={
'cas_output_hash': {
'web_tests': 'abc', 'ios_debug': 'bcd', 'full_build': '123'
}
},
status='SUCCESS',
)
props = {
'builds': [{
'name': 'ios_debug', 'gn': [], 'ninja': ['ios_debug'],
'dimensions': {'cpu': 'arm64'},
'drone_dimensions': ['dimension1=abc', 'os=Linux']
}],
'tests': [{
'name': 'felt_test', 'dependencies': ['ios_debug'],
'scripts': ['out/script.sh'], 'parameters': ['test']
}],
'environment': 'Staging',
'dependencies': [{'dependency': 'android_sdk'},
{'dependency': 'chrome_and_driver'}],
'$recipe_engine/led': {
'led_run_id':
'flutter/led/abc_google.com/b9861e3db1034eee460599837221ab468e03bc43f9fd05684a08157fd646abfc',
'rbe_cas_input': {
'cas_instance':
'projects/chromium-swarm/instances/default_instance',
'digest': {
'hash':
'146d56311043bb141309968d570e23d05a108d13ce2e20b5aeb40a9b95629b3e',
'size_bytes':
91
}
}
},
}
props_bb = {
'task_name': 'mytask', 'builds': [{
'name': 'ios_debug', 'gn': ['--ios'], 'dimensions': {'cpu': 'arm64'},
'ninja': {'config': 'ios_debug', 'targets': []},
'drone_dimensions': ['dimension1=abc', 'os=Windows-10'],
'generators': [{'name': 'generator1', 'script': 'script1.sh'}]
}], 'tests': [{
'name': 'felt_test', 'dependencies': ['ios_debug'],
'scripts': ['out/script.sh'], 'parameters': ['test']
}], 'dependencies': [{'dependency': 'android_sdk'},
{'dependency': 'chrome_and_driver'}],
'environment': 'Staging'
}
presubmit_props = copy.deepcopy(props)
presubmit_props['git_url'] = 'http://abc'
presubmit_props['git_ref'] = 'refs/123/main'
job = job_pb2.Definition()
build = api.buildbucket.ci_build_message(build_id=87654321, on_backend=True)
job.buildbucket.bbagent_args.build.CopyFrom(build)
yield api.test(
'presubmit_led', api.properties(**presubmit_props),
api.platform.name('linux'),
api.buildbucket.ci_build(
project='proj',
builder='try-builder',
git_repo='https://github.com/repo/a',
revision='a' * 40,
build_number=123
), api.led.mock_get_builder(
job,
project='proj',
bucket='ci',
),
api.shard_util.child_led_steps(
subbuilds=[led_try_subbuild1],
collect_step='collect builds',
)
)
presubmit_props_bb = copy.deepcopy(props_bb)
presubmit_props_bb['git_url'] = 'http://abc'
presubmit_props_bb['git_ref'] = 'refs/123/main'
presubmit_props_bb['no_goma'] = 'true'
yield (
api.buildbucket_util.test('presubmit_bb', tryjob=False, status='FAILURE')
+ api.properties(**presubmit_props_bb) + api.platform.name('linux') +
api.shard_util.child_build_steps(
subbuilds=[try_failure],
launch_step='launch builds.schedule',
collect_step='collect builds',
)
)
yield api.test(
'presubmit_led_subbuilds', api.properties(**props),
api.platform.name('linux'),
api.buildbucket.ci_build(
project='proj',
builder='try-builder',
git_repo='https://github.com/repo/a',
revision='a' * 40,
build_number=123
), api.led.mock_get_builder(
job,
project='proj',
bucket='ci',
),
api.shard_util.child_led_steps(
subbuilds=[led_try_subbuild1],
collect_step='collect builds',
)
)
yield api.test(
'monorepo_bb_subbuilds', api.properties(**props_bb),
api.platform.name('linux'), api.monorepo.ci_build(),
api.shard_util.child_build_steps(
subbuilds=[try_subbuild1],
launch_step='launch builds.schedule',
collect_step='collect builds',
)
)
yield api.test(
'monorepo_try_bb_subbuilds', api.properties(**props_bb),
api.platform.name('linux'), api.monorepo.try_build(),
api.shard_util.child_build_steps(
subbuilds=[try_subbuild1],
launch_step='launch builds.schedule',
collect_step='collect builds',
)
)
yield api.test(
'monorepo_led_subbuilds',
api.properties(**props),
api.platform.name('linux'),
api.monorepo.ci_build(),
api.shard_util.child_led_steps(
subbuilds=[led_try_subbuild1],
collect_step='collect builds',
),
api.led.mock_get_builder(job, project='dart', bucket='ci.sandbox'),
)
yield api.test(
'monorepo_try_led_subbuilds',
api.properties(**props),
api.platform.name('linux'),
api.monorepo.try_build(),
api.shard_util.child_led_steps(
subbuilds=[led_try_subbuild1],
collect_step='collect builds',
),
api.led.mock_get_builder(job, project='dart', bucket='try.monorepo'),
api.post_process(MustRun, 'launch builds.led edit-cr-cl'),
api.post_process(
StepCommandContains, 'launch builds.led get-builder', [
'led', 'get-builder', '-real-build',
'dart/try.monorepo/flutter-linux-ios_debug-try'
]
),
)
yield api.test(
'monorepo_try_led_without_builder_id',
api.properties(**props),
api.platform.name('linux'),
api.monorepo.try_build(build_id=0),
api.expect_exception('AssertionError'),
)