| # Copyright 2014 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 import post_process |
| from recipe_engine import recipe_api |
| |
| PYTHON_VERSION_COMPATIBILITY = 'PY3' |
| |
| DEPS = [ |
| 'bot_update', |
| 'gclient', |
| 'gerrit', |
| 'tryserver', |
| 'recipe_engine/buildbucket', |
| 'recipe_engine/json', |
| 'recipe_engine/path', |
| 'recipe_engine/platform', |
| 'recipe_engine/properties', |
| 'recipe_engine/runtime', |
| ] |
| |
| from recipe_engine import engine_types |
| |
| from RECIPE_MODULES.depot_tools import gclient |
| from PB.go.chromium.org.luci.buildbucket.proto.build import Build |
| |
| |
| # TODO: crbug.com/339472834 - Once all downstream uses of presentation and |
| # json.output have been removed, this test can be updated to not reference them |
| # and the decorator can be removed |
| @recipe_api.ignore_warnings('^depot_tools/BOT_UPDATE_CUSTOM_RESULT_ATTRIBUTES$') |
| def RunSteps(api): |
| api.gclient.use_mirror = True |
| commit = api.buildbucket.build.input.gitiles_commit |
| |
| src_cfg = api.gclient.make_config(CACHE_DIR=api.path.cache_dir / 'git') |
| soln = src_cfg.solutions.add() |
| soln.name = 'src' |
| soln.url = 'https://chromium.googlesource.com/chromium/src.git' |
| if api.properties.get('revision_fallback_chain'): |
| soln.revision = gclient.api.RevisionFallbackChain() |
| else: |
| soln.revision = commit.id or commit.ref or None |
| api.gclient.c = src_cfg |
| api.gclient.c.revisions.update(api.properties.get('revisions', {})) |
| if api.properties.get('deprecated_got_revision_mapping'): |
| api.gclient.c.got_revision_mapping['src'] = 'got_cr_revision' |
| else: |
| api.gclient.c.got_revision_reverse_mapping['got_cr_revision'] = 'src' |
| api.gclient.c.got_revision_reverse_mapping['got_revision'] = 'src' |
| api.gclient.c.got_revision_reverse_mapping['got_v8_revision'] = 'src/v8' |
| api.gclient.c.got_revision_reverse_mapping['got_angle_revision'] = ( |
| 'src/third_party/angle') |
| api.gclient.c.repo_path_map.update({ |
| 'https://chromium.googlesource.com/angle/angle': ( |
| 'src/third_party/angle', 'HEAD'), |
| 'https://chromium.googlesource.com/v8/v8': ('src/v8', 'HEAD'), |
| 'https://webrtc.googlesource.com/src': ('src/third_party/webrtc', 'HEAD'), |
| }) |
| |
| patch = api.properties.get('patch', True) |
| clobber = True if api.properties.get('clobber') else False |
| with_branch_heads = api.properties.get('with_branch_heads', False) |
| with_tags = api.properties.get('with_tags', False) |
| refs = api.properties.get('refs', []) |
| root_solution_revision = api.properties.get('root_solution_revision') |
| suffix = api.properties.get('suffix') |
| gerrit_no_reset = True if api.properties.get('gerrit_no_reset') else False |
| gerrit_no_rebase_patch_ref = bool( |
| api.properties.get('gerrit_no_rebase_patch_ref')) |
| patch_refs = api.properties.get('patch_refs') |
| add_blamelists = api.properties.get('add_blamelists', False) |
| set_output_commit = api.properties.get('set_output_commit', True) |
| |
| rev_overrides = {'infra': 'HEAD'} |
| bot_update_step = api.bot_update.ensure_checkout( |
| patch=patch, |
| with_branch_heads=with_branch_heads, |
| with_tags=with_tags, |
| refs=refs, |
| clobber=clobber, |
| root_solution_revision=root_solution_revision, |
| suffix=suffix, |
| gerrit_no_reset=gerrit_no_reset, |
| gerrit_no_rebase_patch_ref=gerrit_no_rebase_patch_ref, |
| patch_refs=patch_refs, |
| add_blamelists=add_blamelists, |
| set_output_commit=set_output_commit, |
| recipe_revision_overrides=rev_overrides, |
| ) |
| if patch: |
| api.bot_update.deapply_patch(bot_update_step) |
| |
| if api.properties.get('resolve_chromium_fixed_version'): |
| api.bot_update.resolve_fixed_revision(bot_update_step, 'src') |
| |
| def GenTests(api): |
| |
| def try_build(**kwargs): |
| kwargs.setdefault( |
| 'git_repo', 'https://chromium.googlesource.com/chromium/src') |
| return api.buildbucket.try_build('chromium/src', 'try', 'linux', **kwargs) |
| |
| def ci_build(**kwargs): |
| kwargs.setdefault( |
| 'git_repo', 'https://chromium.googlesource.com/chromium/src') |
| return ( |
| api.buildbucket.ci_build('chromium/src', 'ci', 'linux', **kwargs) + |
| api.properties(patch=False) |
| ) |
| |
| |
| yield ( |
| api.test('basic') + |
| ci_build() |
| ) |
| yield ( |
| api.test('input_commit_with_id_without_repo') + |
| api.buildbucket.build(Build( |
| input={ |
| 'gitiles_commit': { |
| 'id': 'a' * 40, |
| }, |
| }, |
| )) |
| ) |
| yield (api.test('unrecognized_commit_repo', status="INFRA_FAILURE") + |
| ci_build(git_repo='https://unrecognized/repo')) |
| |
| yield api.test( |
| 'bot_update_failure', |
| ci_build(), |
| api.bot_update.fail_checkout(True), |
| api.expect_status('INFRA_FAILURE'), |
| ) |
| |
| yield ( |
| api.test('resolve_chromium_fixed_version') + |
| ci_build() + |
| api.properties(resolve_chromium_fixed_version=True) |
| ) |
| yield ( |
| api.test('basic_with_branch_heads') + |
| ci_build() + |
| api.properties( |
| with_branch_heads=True, |
| suffix='with branch heads' |
| ) |
| ) |
| yield ( |
| api.test('with_tags') + |
| api.properties(with_tags=True) |
| ) |
| yield ( |
| api.test('with_experiments') + |
| api.properties(bot_update_experiments=['no_sync','cool_experiment']) |
| ) |
| yield ( |
| api.test('deprecated_got_revision_mapping') + |
| try_build() + |
| api.properties( |
| deprecated_got_revision_mapping=True, |
| set_output_commit=False, |
| ) |
| ) |
| yield ( |
| api.test('refs') + |
| api.properties(refs=['+refs/change/1/2/333']) |
| ) |
| yield (api.test('tryjob_fail', status="INFRA_FAILURE") + try_build() + |
| api.step_data('bot_update', api.json.invalid(None), retcode=1)) |
| |
| yield api.test( |
| 'tryjob_fail_patch', |
| try_build(), |
| api.bot_update.fail_patch(True), |
| api.expect_status('FAILURE'), |
| ) |
| |
| yield api.test( |
| 'tryjob_fail_patch_download', |
| try_build(), |
| api.bot_update.fail_patch('download'), |
| api.expect_status('INFRA_FAILURE'), |
| ) |
| |
| yield api.test( |
| 'tryjob_fail_missing_bot_update_json', |
| try_build(), |
| api.override_step_data('bot_update', retcode=1), |
| api.post_process(post_process.SummaryMarkdownRE, 'Infra Failure.*'), |
| api.post_process(post_process.StatusException), |
| api.post_process(post_process.DropExpectation), |
| status='INFRA_FAILURE') |
| |
| yield ( |
| api.test('clobber') + |
| api.properties(clobber=1) |
| ) |
| yield ( |
| api.test('reset_root_solution_revision') + |
| api.properties(root_solution_revision=api.bot_update.gen_revision('fake-revision')) |
| ) |
| yield ( |
| api.test('gerrit_no_reset') + |
| api.properties(gerrit_no_reset=1) |
| ) |
| yield ( |
| api.test('gerrit_no_rebase_patch_ref') + |
| api.properties(gerrit_no_rebase_patch_ref=True) |
| ) |
| yield ( |
| api.test('tryjob_v8') + |
| try_build(git_repo='https://chromium.googlesource.com/v8/v8') + |
| api.properties(revisions={'src/v8': 'abc'}) |
| ) |
| yield ( |
| api.test('tryjob_v8_head_by_default') + |
| try_build(git_repo='https://chromium.googlesource.com/v8/v8') |
| ) |
| yield ( |
| api.test('tryjob_gerrit_angle') + |
| try_build(git_repo='https://chromium.googlesource.com/angle/angle') |
| ) |
| yield ( |
| api.test('tryjob_gerrit_v8_feature_branch') + |
| try_build(git_repo='https://chromium.googlesource.com/v8/v8') + |
| api.tryserver.gerrit_change_target_ref('refs/heads/experimental/feature') |
| ) |
| yield ( |
| api.test('tryjob_gerrit_feature_branch') + |
| try_build() + |
| api.tryserver.gerrit_change_target_ref('refs/heads/experimental/feature') |
| ) |
| yield ( |
| api.test('tryjob_gerrit_branch_heads') + |
| try_build() + |
| api.tryserver.gerrit_change_target_ref('refs/branch-heads/67') |
| ) |
| yield ( |
| api.test('tryjob_gerrit_webrtc') + |
| try_build(git_repo='https://webrtc.googlesource.com/src') |
| ) |
| yield ( |
| api.test('multiple_patch_refs') + |
| api.properties( |
| patch_refs=[ |
| ('https://chromium.googlesource.com/chromium/src@' |
| 'refs/changes/12/34/5'), |
| 'https://chromium.googlesource.com/v8/v8@refs/changes/124/45/6', |
| ], |
| ) |
| ) |
| yield ( |
| api.test('origin_main') + |
| ci_build(revision='origin/main') |
| ) |
| |
| yield ( |
| api.test('revision_fallback_chain_set_output_commit') + ci_build() + |
| api.properties( |
| set_output_commit=True, |
| revision_fallback_chain=True, |
| ) + |
| # Don't set commit position properties so that the set_output_commit code |
| # attempts to do comparisons on the revision value |
| api.step_data( |
| 'bot_update (without patch)', |
| api.bot_update.output_json(patch_root='src', |
| first_sln='src', |
| revision_mapping={'got_revision': 'src'}, |
| commit_positions=False))) |
| |
| yield api.test( |
| 'upload_traces', |
| try_build(), |
| api.bot_update.fail_patch(True), |
| api.expect_status('FAILURE'), |
| ) |
| |
| yield api.test( |
| 'upload_traces_fail', |
| try_build(), |
| api.bot_update.fail_patch(True), |
| api.step_data( |
| 'upload git traces.gsutil upload', |
| retcode=1, |
| ), |
| api.expect_status('FAILURE'), |
| ) |
| |
| yield ( |
| api.test('revision_specifying_ref') + |
| ci_build() + |
| api.properties( |
| revisions={'src': 'refs/branch-heads/4000'}, |
| ) |
| ) |
| |
| yield ( |
| api.test('add_blamelists') + |
| ci_build() + |
| api.properties( |
| add_blamelists=True, |
| revisions={'src/v8': 'HEAD'}, |
| ) |
| ) |
| |
| yield api.test( |
| 'add_blamelists_bot_update_failure', |
| ci_build(), |
| api.properties( |
| add_blamelists=True, |
| revisions={'src/v8': 'HEAD'}, |
| ), |
| api.bot_update.fail_checkout(True), |
| api.expect_status('INFRA_FAILURE'), |
| ) |
| |
| yield api.test( |
| 'no_cp_checkout_a_specific_commit', |
| ci_build(revision='a' * 40), |
| api.bot_update.commit_positions(False), |
| ) |
| |
| yield api.test( |
| 'no_cp_checkout_main', |
| ci_build(revision=''), |
| api.bot_update.commit_positions(False), |
| ) |
| |
| yield api.test( |
| 'no_cp_checkout_a_branch_head', |
| ci_build(revision='', git_ref='refs/branch-heads/x'), |
| api.bot_update.commit_positions(False), |
| ) |
| |
| yield api.test( |
| 'no_cp_checkout_HEAD', |
| ci_build(revision='HEAD'), |
| api.bot_update.commit_positions(False), |
| ) |