Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: scripts/slave/recipe_modules/chromium_tests/api.py

Issue 1185693002: Move builders.py and steps.py to chromium_tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Address review comments. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import contextlib 5 import contextlib
6 import copy 6 import copy
7 import json 7 import json
8 8
9 from infra.libs.infra_types import freeze, thaw 9 from infra.libs.infra_types import freeze, thaw
10 from recipe_engine import recipe_api 10 from recipe_engine import recipe_api
11 from recipe_engine import util as recipe_util 11 from recipe_engine import util as recipe_util
12 12
13 from . import builders
14 from . import steps
15
13 16
14 class ChromiumTestsApi(recipe_api.RecipeApi): 17 class ChromiumTestsApi(recipe_api.RecipeApi):
18 def __init__(self, *args, **kwargs):
19 super(ChromiumTestsApi, self).__init__(*args, **kwargs)
20 self._builders = {}
21 self.add_builders(builders.BUILDERS)
22
23 @property
24 def builders(self):
25 return self._builders
26
27 @property
28 def steps(self):
29 return steps
30
31 def add_builders(self, builders):
32 """Adds builders to our builder map"""
33 self._builders.update(builders)
34
15 def configure_build(self, mastername, buildername, override_bot_type=None, 35 def configure_build(self, mastername, buildername, override_bot_type=None,
16 ): 36 ):
17 master_dict = self.m.chromium.builders.get(mastername, {}) 37 master_dict = self.builders.get(mastername, {})
18 bot_config = master_dict.get('builders', {}).get(buildername) 38 bot_config = master_dict.get('builders', {}).get(buildername)
19 39
20 # Get the buildspec version. It can be supplied as a build property or as 40 # Get the buildspec version. It can be supplied as a build property or as
21 # a recipe config value. 41 # a recipe config value.
22 buildspec_version = (self.m.properties.get('buildspec_version') or 42 buildspec_version = (self.m.properties.get('buildspec_version') or
23 bot_config.get('buildspec_version')) 43 bot_config.get('buildspec_version'))
24 44
25 self.m.chromium.set_config( 45 self.m.chromium.set_config(
26 bot_config.get('chromium_config'), 46 bot_config.get('chromium_config'),
27 **bot_config.get('chromium_config_kwargs', {})) 47 **bot_config.get('chromium_config_kwargs', {}))
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 component_rev = self.m.properties.get('revision') or 'HEAD' 86 component_rev = self.m.properties.get('revision') or 'HEAD'
67 if bot_type == 'tester': 87 if bot_type == 'tester':
68 component_rev = self.m.properties.get( 88 component_rev = self.m.properties.get(
69 'parent_got_revision', component_rev) 89 'parent_got_revision', component_rev)
70 dep = bot_config.get('set_component_rev') 90 dep = bot_config.get('set_component_rev')
71 self.m.gclient.c.revisions[dep['name']] = dep['rev_str'] % component_rev 91 self.m.gclient.c.revisions[dep['name']] = dep['rev_str'] % component_rev
72 92
73 def prepare_checkout(self, mastername, buildername): 93 def prepare_checkout(self, mastername, buildername):
74 # Make an independent copy so that we don't overwrite global state 94 # Make an independent copy so that we don't overwrite global state
75 # with updates made dynamically based on the test specs. 95 # with updates made dynamically based on the test specs.
76 master_dict = thaw(self.m.chromium.builders.get(mastername, {})) 96 master_dict = thaw(self.builders.get(mastername, {}))
77 bot_config = master_dict.get('builders', {}).get(buildername) 97 bot_config = master_dict.get('builders', {}).get(buildername)
78 98
79 if self.m.platform.is_win: 99 if self.m.platform.is_win:
80 self.m.chromium.taskkill() 100 self.m.chromium.taskkill()
81 101
82 # Bot Update re-uses the gclient configs. 102 # Bot Update re-uses the gclient configs.
83 update_step = self.m.bot_update.ensure_checkout( 103 update_step = self.m.bot_update.ensure_checkout(
84 patch_root=bot_config.get('patch_root')) 104 patch_root=bot_config.get('patch_root'))
85 assert update_step.json.output['did_run'] 105 assert update_step.json.output['did_run']
86 # HACK(dnj): Remove after 'crbug.com/398105' has landed 106 # HACK(dnj): Remove after 'crbug.com/398105' has landed
(...skipping 26 matching lines...) Expand all
113 # TODO(phajdan.jr): Bots should have no generators instead. 133 # TODO(phajdan.jr): Bots should have no generators instead.
114 if bot_config.get('disable_tests'): 134 if bot_config.get('disable_tests'):
115 test_spec = {} 135 test_spec = {}
116 scripts_compile_targets = {} 136 scripts_compile_targets = {}
117 else: 137 else:
118 test_spec = self.read_test_spec(self.m, test_spec_file) 138 test_spec = self.read_test_spec(self.m, test_spec_file)
119 test_spec_path = self.m.path['checkout'].join('testing', 'buildbot', 139 test_spec_path = self.m.path['checkout'].join('testing', 'buildbot',
120 test_spec_file) 140 test_spec_file)
121 141
122 scripts_compile_targets = \ 142 scripts_compile_targets = \
123 self.m.chromium.get_compile_targets_for_scripts().json.output 143 self.get_compile_targets_for_scripts().json.output
124 144
125 for loop_buildername, builder_dict in master_dict.get( 145 for loop_buildername, builder_dict in master_dict.get(
126 'builders', {}).iteritems(): 146 'builders', {}).iteritems():
127 builder_dict['tests'] = self.generate_tests_from_test_spec( 147 builder_dict['tests'] = self.generate_tests_from_test_spec(
128 self.m, test_spec, builder_dict, 148 self.m, test_spec, builder_dict,
129 loop_buildername, mastername, enable_swarming, 149 loop_buildername, mastername, enable_swarming,
130 scripts_compile_targets, builder_dict.get('test_generators', [])) 150 scripts_compile_targets, builder_dict.get('test_generators', []))
131 151
132 if self.m.chromium.c.lto: 152 if self.m.chromium.c.lto:
133 self.m.chromium.download_lto_plugin() 153 self.m.chromium.download_lto_plugin()
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 build_archive_url=specified_url) 414 build_archive_url=specified_url)
395 415
396 if (self.m.chromium.c.TARGET_PLATFORM == 'android' and 416 if (self.m.chromium.c.TARGET_PLATFORM == 'android' and
397 bot_config.get('root_devices')): 417 bot_config.get('root_devices')):
398 self.m.adb.root_devices() 418 self.m.adb.root_devices()
399 419
400 # TODO(shinyak): bot_config.get('tests', []) sometimes return tuple. 420 # TODO(shinyak): bot_config.get('tests', []) sometimes return tuple.
401 tests = list(bot_config.get('tests', [])) 421 tests = list(bot_config.get('tests', []))
402 422
403 if bot_config.get('goma_canary'): 423 if bot_config.get('goma_canary'):
404 tests.insert(0, self.m.chromium.steps.DiagnoseGomaTest()) 424 tests.insert(0, steps.DiagnoseGomaTest())
405 425
406 if bot_type in ('tester', 'builder_tester'): 426 if bot_type in ('tester', 'builder_tester'):
407 isolated_targets = [t.isolate_target for t in tests if t.uses_swarming] 427 isolated_targets = [t.isolate_target for t in tests if t.uses_swarming]
408 if isolated_targets: 428 if isolated_targets:
409 self.m.isolate.find_isolated_tests(self.m.chromium.output_dir) 429 self.m.isolate.find_isolated_tests(self.m.chromium.output_dir)
410 430
411 return tests 431 return tests
412 432
413 def _make_legacy_build_url(self, master_config, mastername): 433 def _make_legacy_build_url(self, master_config, mastername):
414 return self.m.archive.legacy_download_url( 434 return self.m.archive.legacy_download_url(
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 master_config.get('build_gs_bucket'), 631 master_config.get('build_gs_bucket'),
612 extra_url_components=None) 632 extra_url_components=None)
613 elif (mastername == 'tryserver.chromium.perf' or 633 elif (mastername == 'tryserver.chromium.perf' or
614 (mastername == 'tryserver.chromium.linux' and 634 (mastername == 'tryserver.chromium.linux' and
615 buildername == 'linux_full_bisect_builder')): 635 buildername == 'linux_full_bisect_builder')):
616 return None 636 return None
617 else: 637 else:
618 return self.m.archive.legacy_upload_url( 638 return self.m.archive.legacy_upload_url(
619 master_config.get('build_gs_bucket'), 639 master_config.get('build_gs_bucket'),
620 extra_url_components=self.m.properties['mastername']) 640 extra_url_components=self.m.properties['mastername'])
641
642 def get_common_args_for_scripts(self):
643 args = []
644
645 args.extend(['--build-config-fs', self.m.chromium.c.build_config_fs])
646
647 paths = {}
648 for path in ('build', 'checkout'):
649 paths[path] = self.m.path[path]
650 args.extend(['--paths', self.m.json.input(paths)])
651
652 properties = {}
653 # TODO(phajdan.jr): Remove buildnumber when no longer used.
654
655 mastername = self.m.properties.get('mastername')
656 buildername = self.m.properties.get('buildername')
657 master_dict = self.builders.get(mastername, {})
658 bot_config = master_dict.get('builders', {}).get(buildername, {})
659
660 for name in ('buildername', 'slavename', 'buildnumber', 'mastername'):
661 properties[name] = self.m.properties[name]
662
663 # Optional properties
664 for name in ('perf-id', 'results-url'):
665 if bot_config.get(name):
666 properties[name] = bot_config[name]
667
668 properties['target_platform'] = self.m.chromium.c.TARGET_PLATFORM
669
670 args.extend(['--properties', self.m.json.input(properties)])
671
672 return args
673
674 def get_compile_targets_for_scripts(self):
675 return self.m.python(
676 name='get compile targets for scripts',
677 script=self.m.path['checkout'].join(
678 'testing', 'scripts', 'get_compile_targets.py'),
679 args=[
680 '--output', self.m.json.output(),
681 '--',
682 ] + self.get_common_args_for_scripts(),
683 step_test_data=lambda: self.m.json.test_api.output({}))
OLDNEW
« no previous file with comments | « scripts/slave/recipe_modules/chromium_tests/__init__.py ('k') | scripts/slave/recipe_modules/chromium_tests/builders.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698