diff options
-rw-r--r-- | infra/bots/recipe_modules/flavor/__init__.py | 1 | ||||
-rw-r--r-- | infra/bots/recipe_modules/flavor/android_flavor.py | 37 | ||||
-rw-r--r-- | infra/bots/recipe_modules/flavor/ios_flavor.py | 3 | ||||
-rw-r--r-- | infra/bots/recipe_modules/vars/api.py | 170 | ||||
-rw-r--r-- | infra/bots/recipes/swarm_trigger.py | 176 |
5 files changed, 169 insertions, 218 deletions
diff --git a/infra/bots/recipe_modules/flavor/__init__.py b/infra/bots/recipe_modules/flavor/__init__.py index 383e75bcee..b532b41f34 100644 --- a/infra/bots/recipe_modules/flavor/__init__.py +++ b/infra/bots/recipe_modules/flavor/__init__.py @@ -5,6 +5,7 @@ DEPS = [ 'build/adb', 'build/file', + 'builder_name_schema', 'recipe_engine/path', 'recipe_engine/platform', 'recipe_engine/properties', diff --git a/infra/bots/recipe_modules/flavor/android_flavor.py b/infra/bots/recipe_modules/flavor/android_flavor.py index 474ec81b69..85ccef3fb8 100644 --- a/infra/bots/recipe_modules/flavor/android_flavor.py +++ b/infra/bots/recipe_modules/flavor/android_flavor.py @@ -13,6 +13,38 @@ import default_flavor """Android flavor utils, used for building for and running tests on Android.""" +def get_device(api): + builder_cfg = api.builder_name_schema.DictForBuilderName( + api.vars.builder_name) + if 'Android' in builder_cfg.get('extra_config', ''): + # Compile bots. + if 'NoNeon' in builder_cfg['extra_config']: + return 'arm_v7' + return { + 'Arm64': 'arm64', + 'x86': 'x86', + 'x86_64': 'x86_64', + 'Mips': 'mips', + 'Mips64': 'mips64', + 'MipsDSP2': 'mips_dsp2', + }.get(builder_cfg['target_arch'], 'arm_v7_neon') + else: + # Test/Perf bots. + return { + 'AndroidOne': 'arm_v7_neon', + 'GalaxyS3': 'arm_v7_neon', + 'GalaxyS4': 'arm_v7_neon', + 'NVIDIA_Shield': 'arm64', + 'Nexus10': 'arm_v7_neon', + 'Nexus5': 'arm_v7_neon', + 'Nexus6': 'arm_v7_neon', + 'Nexus7': 'arm_v7_neon', + 'Nexus7v2': 'arm_v7_neon', + 'Nexus9': 'arm64', + 'NexusPlayer': 'x86', + }[builder_cfg['model']] + + class _ADBWrapper(object): """Wrapper for the ADB recipe module. @@ -64,7 +96,7 @@ class _ADBWrapper(object): class AndroidFlavorUtils(default_flavor.DefaultFlavorUtils): def __init__(self, m): super(AndroidFlavorUtils, self).__init__(m) - self.device = self.m.vars.builder_spec['device_cfg'] + self.device = get_device(m) self.android_bin = self.m.vars.skia_dir.join( 'platform_tools', 'android', 'bin') self._android_sdk_root = self.m.vars.slave_dir.join( @@ -273,7 +305,8 @@ class AndroidFlavorUtils(default_flavor.DefaultFlavorUtils): def cleanup_steps(self): """Run any device-specific cleanup steps.""" - if self.m.vars.do_test_steps or self.m.vars.do_perf_steps: + if self.m.vars.role in (self.m.builder_name_schema.BUILDER_ROLE_TEST, + self.m.builder_name_schema.BUILDER_ROLE_PERF): self._adb(name='final battery stats', serial=self.serial, cmd=['shell', 'dumpsys', 'batteryproperties'], diff --git a/infra/bots/recipe_modules/flavor/ios_flavor.py b/infra/bots/recipe_modules/flavor/ios_flavor.py index 806926a4b4..7708d5dccd 100644 --- a/infra/bots/recipe_modules/flavor/ios_flavor.py +++ b/infra/bots/recipe_modules/flavor/ios_flavor.py @@ -130,7 +130,8 @@ class iOSFlavorUtils(default_flavor.DefaultFlavorUtils): def cleanup_steps(self): """Run any device-specific cleanup steps.""" - if self.m.vars.do_test_steps or self.m.vars.do_perf_steps: + if self.m.vars.role in (self.m.builder_name_schema.BUILDER_ROLE_TEST, + self.m.builder_name_schema.BUILDER_ROLE_PERF): self.m.run( self.m.step, name='reboot', diff --git a/infra/bots/recipe_modules/vars/api.py b/infra/bots/recipe_modules/vars/api.py index 093cd87da7..7936602fc7 100644 --- a/infra/bots/recipe_modules/vars/api.py +++ b/infra/bots/recipe_modules/vars/api.py @@ -7,7 +7,6 @@ from recipe_engine import recipe_api -import os BOTO_CHROMIUM_SKIA_GM = 'chromium-skia-gm.boto' @@ -16,113 +15,6 @@ CONFIG_DEBUG = 'Debug' CONFIG_RELEASE = 'Release' -def device_cfg(builder_dict): - # Android. - if 'Android' in builder_dict.get('extra_config', ''): - if 'NoNeon' in builder_dict['extra_config']: - return 'arm_v7' - return { - 'Arm64': 'arm64', - 'x86': 'x86', - 'x86_64': 'x86_64', - 'Mips': 'mips', - 'Mips64': 'mips64', - 'MipsDSP2': 'mips_dsp2', - }.get(builder_dict['target_arch'], 'arm_v7_neon') - elif builder_dict.get('os') == 'Android': - return { - 'AndroidOne': 'arm_v7_neon', - 'GalaxyS3': 'arm_v7_neon', - 'GalaxyS4': 'arm_v7_neon', - 'NVIDIA_Shield': 'arm64', - 'Nexus10': 'arm_v7_neon', - 'Nexus5': 'arm_v7_neon', - 'Nexus6': 'arm_v7_neon', - 'Nexus7': 'arm_v7_neon', - 'Nexus7v2': 'arm_v7_neon', - 'Nexus9': 'arm64', - 'NexusPlayer': 'x86', - }[builder_dict['model']] - - # iOS. - if 'iOS' in builder_dict.get('os', ''): - return { - 'iPad4': 'iPad4,1', - }[builder_dict['model']] - - return None - - -def product_board(builder_dict): - if 'Android' in builder_dict.get('os', ''): - return { - 'AndroidOne': 'sprout', - 'GalaxyS3': 'm0', #'smdk4x12', Detected incorrectly by swarming? - 'GalaxyS4': None, # TODO(borenet,kjlubick) - 'NVIDIA_Shield': 'foster', - 'Nexus10': 'manta', - 'Nexus5': 'hammerhead', - 'Nexus6': 'shamu', - 'Nexus7': 'grouper', - 'Nexus7v2': 'flo', - 'Nexus9': 'flounder', - 'NexusPlayer': 'fugu', - }[builder_dict['model']] - return None - - -def get_builder_spec(api, builder_name): - builder_dict = api.builder_name_schema.DictForBuilderName(builder_name) - rv = { - 'builder_cfg': builder_dict, - } - device = device_cfg(builder_dict) - if device: - rv['device_cfg'] = device - board = product_board(builder_dict) - if board: - rv['product.board'] = board - - role = builder_dict['role'] - if role == api.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER: - configuration = CONFIG_RELEASE - else: - configuration = builder_dict.get('configuration', CONFIG_DEBUG) - arch = (builder_dict.get('arch') or builder_dict.get('target_arch')) - if ('Win' in builder_dict.get('os', '') and arch == 'x86_64'): - configuration += '_x64' - rv['configuration'] = configuration - if configuration == 'Coverage': - rv['do_compile_steps'] = False - rv['do_test_steps'] = role == api.builder_name_schema.BUILDER_ROLE_TEST - rv['do_perf_steps'] = role == api.builder_name_schema.BUILDER_ROLE_PERF - - # Do we upload perf results? - upload_perf_results = False - if (role == api.builder_name_schema.BUILDER_ROLE_PERF and - CONFIG_RELEASE in configuration): - upload_perf_results = True - rv['upload_perf_results'] = upload_perf_results - - # Do we upload correctness results? - skip_upload_bots = [ - 'ASAN', - 'Coverage', - 'MSAN', - 'TSAN', - 'UBSAN', - 'Valgrind', - ] - upload_dm_results = True - for s in skip_upload_bots: - if s in builder_name: - upload_dm_results = False - break - rv['upload_dm_results'] = upload_dm_results - - return rv - - class SkiaVarsApi(recipe_api.RecipeApi): def make_path(self, *path): @@ -131,26 +23,6 @@ class SkiaVarsApi(recipe_api.RecipeApi): self.m.path.c.base_paths[key] = tuple(path) return self.m.path[key] - def gsutil_env(self, boto_file): - """Environment variables for gsutil.""" - boto_path = None - if boto_file: - boto_path = self.m.path.join(self.home_dir, boto_file) - return {'AWS_CREDENTIAL_FILE': boto_path, - 'BOTO_CONFIG': boto_path} - - @property - def home_dir(self): - """Find the home directory.""" - home_dir = os.path.expanduser('~') - if self._test_data.enabled: - home_dir = '[HOME]' - return home_dir - - def get_builder_spec(self, builder_name): - """Return the builder_spec for the given builder name.""" - return get_builder_spec(self.m, builder_name) - def setup(self): """Prepare the variables.""" # Setup @@ -222,18 +94,19 @@ class SkiaVarsApi(recipe_api.RecipeApi): # Some bots also require a checkout of PDFium. self.need_pdfium_checkout = 'PDFium' in self.builder_name - # Obtain the spec for this builder. Use it to set more properties. - self.builder_spec = get_builder_spec(self.m, self.builder_name) - - self.builder_cfg = self.builder_spec['builder_cfg'] + self.builder_cfg = self.m.builder_name_schema.DictForBuilderName( + self.builder_name) self.role = self.builder_cfg['role'] + if self.role == self.m.builder_name_schema.BUILDER_ROLE_HOUSEKEEPER: + self.configuration = CONFIG_RELEASE + else: + self.configuration = self.builder_cfg.get('configuration', CONFIG_DEBUG) + arch = (self.builder_cfg.get('arch') or self.builder_cfg.get('target_arch')) + if ('Win' in self.builder_cfg.get('os', '') and arch == 'x86_64'): + self.configuration += '_x64' - self.configuration = self.builder_spec['configuration'] self.default_env.update({'SKIA_OUT': self.skia_out, 'BUILDTYPE': self.configuration}) - self.do_compile_steps = self.builder_spec.get('do_compile_steps', True) - self.do_test_steps = self.builder_spec['do_test_steps'] - self.do_perf_steps = self.builder_spec['do_perf_steps'] self.is_trybot = self.builder_cfg['is_trybot'] self.issue = None self.patchset = None @@ -242,9 +115,30 @@ class SkiaVarsApi(recipe_api.RecipeApi): self.issue = self.m.properties['issue'] self.patchset = self.m.properties['patchset'] self.rietveld = self.m.properties['rietveld'] - self.upload_dm_results = self.builder_spec['upload_dm_results'] - self.upload_perf_results = self.builder_spec['upload_perf_results'] self.dm_dir = self.m.path.join( self.swarming_out_dir, 'dm') self.perf_data_dir = self.m.path.join(self.swarming_out_dir, 'perfdata', self.builder_name, 'data') + + @property + def upload_dm_results(self): + # TODO(borenet): Move this into the swarm_test recipe. + skip_upload_bots = [ + 'ASAN', + 'Coverage', + 'MSAN', + 'TSAN', + 'UBSAN', + 'Valgrind', + ] + upload_dm_results = True + for s in skip_upload_bots: + if s in self.m.properties['buildername']: + upload_dm_results = False + break + return upload_dm_results + + @property + def upload_perf_results(self): + # TODO(borenet): Move this into the swarm_perf recipe. + return ('Release' in self.m.properties['buildername']) diff --git a/infra/bots/recipes/swarm_trigger.py b/infra/bots/recipes/swarm_trigger.py index 1cde51a3cd..7a6541c369 100644 --- a/infra/bots/recipes/swarm_trigger.py +++ b/infra/bots/recipes/swarm_trigger.py @@ -6,6 +6,7 @@ # Recipe module for Skia Swarming trigger. +import os import json @@ -66,22 +67,22 @@ def derive_compile_bot_name(api): if builder_cfg['role'] == 'Housekeeper': return 'Build-Ubuntu-GCC-x86_64-Release-Shared' if builder_cfg['role'] in ('Test', 'Perf'): - os = builder_cfg['os'] + task_os = builder_cfg['os'] extra_config = builder_cfg.get('extra_config') - if os == 'Android': + if task_os == 'Android': if extra_config == 'Vulkan': - extra_config = '%s_%s' % (os, 'Vulkan') + extra_config = '%s_%s' % (task_os, 'Vulkan') else: - extra_config = os - os = 'Ubuntu' - elif os == 'iOS': - extra_config = os - os = 'Mac' - elif 'Win' in os: - os = 'Win' + extra_config = task_os + task_os = 'Ubuntu' + elif task_os == 'iOS': + extra_config = task_os + task_os = 'Mac' + elif 'Win' in task_os: + task_os = 'Win' return api.builder_name_schema.MakeBuilderName( role=api.builder_name_schema.BUILDER_ROLE_BUILD, - os=os, + os=task_os, compiler=builder_cfg['compiler'], target_arch=builder_cfg['arch'], configuration=builder_cfg['configuration'], @@ -90,22 +91,35 @@ def derive_compile_bot_name(api): return builder_name -def swarm_dimensions(builder_spec): +def swarm_dimensions(builder_cfg): """Return a dict of keys and values to be used as Swarming bot dimensions.""" dimensions = { 'pool': 'Skia', } - builder_cfg = builder_spec['builder_cfg'] dimensions['os'] = builder_cfg.get('os', 'Ubuntu') if 'Win' in builder_cfg.get('os', ''): dimensions['os'] = 'Windows' if builder_cfg['role'] in ('Test', 'Perf'): if 'Android' in builder_cfg['os']: # For Android, the device type is a better dimension than CPU or GPU. - dimensions['device_type'] = builder_spec['product.board'] + dimensions['device_type'] = { + 'AndroidOne': 'sprout', + 'GalaxyS3': 'm0', #'smdk4x12', Detected incorrectly by swarming? + 'GalaxyS4': None, # TODO(borenet,kjlubick) + 'NVIDIA_Shield': 'foster', + 'Nexus10': 'manta', + 'Nexus5': 'hammerhead', + 'Nexus6': 'shamu', + 'Nexus7': 'grouper', + 'Nexus7v2': 'flo', + 'Nexus9': 'flounder', + 'NexusPlayer': 'fugu', + }[builder_cfg['model']] elif 'iOS' in builder_cfg['os']: # For iOS, the device type is a better dimension than CPU or GPU. - dimensions['device'] = builder_spec['device_cfg'] + dimensions['device'] = { + 'iPad4': 'iPad4,1', + }[builder_cfg['model']] # TODO(borenet): Replace this hack with something better. dimensions['os'] = 'iOS-9.2' elif builder_cfg['cpu_or_gpu'] == 'CPU': @@ -156,7 +170,7 @@ for r, _, files in os.walk(os.getcwd()): def trigger_task(api, task_name, builder, master, slave, buildnumber, - builder_spec, got_revision, infrabots_dir, idempotent=False, + builder_cfg, got_revision, infrabots_dir, idempotent=False, store_output=True, extra_isolate_hashes=None, expiration=None, hard_timeout=None, io_timeout=None, cipd_packages=None): """Trigger the given bot to run as a Swarming task.""" @@ -173,7 +187,6 @@ def trigger_task(api, task_name, builder, master, slave, buildnumber, 'slavename': slave, 'swarm_out_dir': '${ISOLATED_OUTDIR}', } - builder_cfg = builder_spec['builder_cfg'] if builder_cfg['is_trybot']: properties['issue'] = str(api.properties['issue']) properties['patchset'] = str(api.properties['patchset']) @@ -187,7 +200,7 @@ def trigger_task(api, task_name, builder, master, slave, buildnumber, extra_args.append('%s=%s' % (k, v)) isolate_base_dir = api.path['slave_build'] - dimensions = swarm_dimensions(builder_spec) + dimensions = swarm_dimensions(builder_cfg) isolate_blacklist = ['.git', 'out', '*.pyc', '.recipe_deps'] isolate_vars = { 'WORKDIR': api.path['slave_build'], @@ -239,7 +252,7 @@ def checkout_steps(api): return got_revision -def housekeeper_swarm(api, builder_spec, got_revision, infrabots_dir, +def housekeeper_swarm(api, builder_cfg, got_revision, infrabots_dir, extra_isolate_hashes): task = trigger_task( api, @@ -248,7 +261,7 @@ def housekeeper_swarm(api, builder_spec, got_revision, infrabots_dir, api.properties['mastername'], api.properties['slavename'], api.properties['buildnumber'], - builder_spec, + builder_cfg, got_revision, infrabots_dir, idempotent=False, @@ -257,7 +270,7 @@ def housekeeper_swarm(api, builder_spec, got_revision, infrabots_dir, return api.swarming.collect_swarming_task(task) -def recreate_skps_swarm(api, builder_spec, got_revision, infrabots_dir, +def recreate_skps_swarm(api, builder_cfg, got_revision, infrabots_dir, extra_isolate_hashes): task = trigger_task( api, @@ -266,7 +279,7 @@ def recreate_skps_swarm(api, builder_spec, got_revision, infrabots_dir, api.properties['mastername'], api.properties['slavename'], api.properties['buildnumber'], - builder_spec, + builder_cfg, got_revision, infrabots_dir, idempotent=False, @@ -276,13 +289,11 @@ def recreate_skps_swarm(api, builder_spec, got_revision, infrabots_dir, def infra_swarm(api, got_revision, infrabots_dir, extra_isolate_hashes): - # Fake the builder spec. - builder_spec = { - 'builder_cfg': { - 'role': 'Infra', - 'is_trybot': api.builder_name_schema.IsTrybot( - api.properties['buildername']) - } + # Fake the builder cfg. + builder_cfg = { + 'role': 'Infra', + 'is_trybot': api.builder_name_schema.IsTrybot( + api.properties['buildername']) } task = trigger_task( api, @@ -291,7 +302,7 @@ def infra_swarm(api, got_revision, infrabots_dir, extra_isolate_hashes): api.properties['mastername'], api.properties['slavename'], api.properties['buildnumber'], - builder_spec, + builder_cfg, got_revision, infrabots_dir, idempotent=False, @@ -300,14 +311,15 @@ def infra_swarm(api, got_revision, infrabots_dir, extra_isolate_hashes): return api.swarming.collect_swarming_task(task) -def compile_steps_swarm(api, builder_spec, got_revision, infrabots_dir, - extra_isolate_hashes, cipd_packages): +def compile_steps_swarm(api, builder_cfg, got_revision, infrabots_dir): builder_name = derive_compile_bot_name(api) - compile_builder_spec = builder_spec - if builder_name != api.properties['buildername']: - compile_builder_spec = api.vars.get_builder_spec(builder_name) + compile_builder_cfg = api.builder_name_schema.DictForBuilderName(builder_name) - extra_hashes = extra_isolate_hashes[:] + cipd_packages = [] + + # Android bots require a toolchain. + if 'Android' in api.properties['buildername']: + cipd_packages.append(cipd_pkg(api, infrabots_dir, 'android_sdk')) # Windows bots require a toolchain. if 'Win' in builder_name: @@ -334,12 +346,11 @@ def compile_steps_swarm(api, builder_spec, got_revision, infrabots_dir, master, slave, buildnumber, - compile_builder_spec, + compile_builder_cfg, got_revision, infrabots_dir, idempotent=True, store_output=False, - extra_isolate_hashes=extra_hashes, cipd_packages=cipd_packages) # Wait for compile to finish, record the results hash. @@ -362,12 +373,24 @@ def get_timeouts(builder_cfg): return expiration, hard_timeout, io_timeout -def perf_steps_trigger(api, builder_spec, got_revision, infrabots_dir, +def gsutil_env(api, boto_file): + """Environment variables for gsutil.""" + home_dir = os.path.expanduser('~') + if api.path._test_data.enabled: + home_dir = '[HOME]' + + boto_path = None + if boto_file: + boto_path = api.path.join(home_dir, boto_file) + return {'AWS_CREDENTIAL_FILE': boto_path, + 'BOTO_CONFIG': boto_path} + + +def perf_steps_trigger(api, builder_cfg, got_revision, infrabots_dir, extra_hashes, cipd_packages): """Trigger perf tests via Swarming.""" - expiration, hard_timeout, io_timeout = get_timeouts( - builder_spec['builder_cfg']) + expiration, hard_timeout, io_timeout = get_timeouts(builder_cfg) return trigger_task( api, 'perf', @@ -375,7 +398,7 @@ def perf_steps_trigger(api, builder_spec, got_revision, infrabots_dir, api.properties['mastername'], api.properties['slavename'], api.properties['buildnumber'], - builder_spec, + builder_cfg, got_revision, infrabots_dir, extra_isolate_hashes=extra_hashes, @@ -385,15 +408,14 @@ def perf_steps_trigger(api, builder_spec, got_revision, infrabots_dir, cipd_packages=cipd_packages) -def perf_steps_collect(api, task, upload_perf_results, got_revision, - is_trybot): +def perf_steps_collect(api, task, got_revision, is_trybot): """Wait for perf steps to finish and upload results.""" # Wait for nanobench to finish, download the results. api.run.rmtree(task.task_output_dir) api.swarming.collect_swarming_task(task) # Upload the results. - if upload_perf_results: + if api.vars.upload_perf_results: perf_data_dir = api.path['slave_build'].join( 'perfdata', api.properties['buildername'], 'data') git_timestamp = api.git.get_timestamp(test_data='1408633190', @@ -416,18 +438,17 @@ def perf_steps_collect(api, task, upload_perf_results, got_revision, if is_trybot: upload_args.append(api.properties['issue']) api.python( - 'Upload perf results', - script=api.core.resource('upload_bench_results.py'), - args=upload_args, - cwd=api.path['checkout'], - infra_step=True) + 'Upload perf results', + script=api.core.resource('upload_bench_results.py'), + args=upload_args, + cwd=api.path['checkout'], + infra_step=True) -def test_steps_trigger(api, builder_spec, got_revision, infrabots_dir, +def test_steps_trigger(api, builder_cfg, got_revision, infrabots_dir, extra_hashes, cipd_packages): """Trigger DM via Swarming.""" - expiration, hard_timeout, io_timeout = get_timeouts( - builder_spec['builder_cfg']) + expiration, hard_timeout, io_timeout = get_timeouts(builder_cfg) return trigger_task( api, 'test', @@ -435,7 +456,7 @@ def test_steps_trigger(api, builder_spec, got_revision, infrabots_dir, api.properties['mastername'], api.properties['slavename'], api.properties['buildnumber'], - builder_spec, + builder_cfg, got_revision, infrabots_dir, extra_isolate_hashes=extra_hashes, @@ -445,15 +466,14 @@ def test_steps_trigger(api, builder_spec, got_revision, infrabots_dir, cipd_packages=cipd_packages) -def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot, - builder_cfg): +def test_steps_collect(api, task, got_revision, is_trybot, builder_cfg): """Collect the test results from Swarming.""" # Wait for tests to finish, download the results. api.run.rmtree(task.task_output_dir) api.swarming.collect_swarming_task(task) # Upload the results. - if upload_dm_results: + if api.vars.upload_dm_results: dm_dir = api.path['slave_build'].join('dm') dm_src = task.task_output_dir.join('0', 'dm') api.run.rmtree(dm_dir) @@ -472,7 +492,7 @@ def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot, api.path['slave_build'].join('skia', 'common', 'py', 'utils'), ], cwd=api.path['checkout'], - env=api.vars.gsutil_env('chromium-skia-gm.boto'), + env=gsutil_env(api, 'chromium-skia-gm.boto'), infra_step=True) if builder_cfg['configuration'] == 'Coverage': @@ -526,7 +546,7 @@ def upload_coverage_results(api, task, got_revision, is_trybot): script=api.core.resource('upload_bench_results.py'), args=upload_args, cwd=api.path['checkout'], - env=api.vars.gsutil_env('chromium-skia-gm.boto'), + env=gsutil_env(api, 'chromium-skia-gm.boto'), infra_step=True) # Transform the coverage_by_line_${git_hash}.json file received from @@ -595,32 +615,28 @@ def RunSteps(api): extra_hashes = [] # Get ready to compile. - compile_cipd_deps = [] - extra_compile_hashes = [] - infrabots_dir = api.path['checkout'].join('infra', 'bots') if 'Infra' in api.properties['buildername']: return infra_swarm(api, got_revision, infrabots_dir, extra_hashes) - builder_spec = api.vars.get_builder_spec(api.properties['buildername']) - builder_cfg = builder_spec['builder_cfg'] + builder_cfg = api.builder_name_schema.DictForBuilderName( + api.properties['buildername']) if 'RecreateSKPs' in api.properties['buildername']: - recreate_skps_swarm(api, builder_spec, got_revision, infrabots_dir, + recreate_skps_swarm(api, builder_cfg, got_revision, infrabots_dir, extra_hashes) return - if 'Android' in api.properties['buildername']: - compile_cipd_deps.append(cipd_pkg(api, infrabots_dir, 'android_sdk')) # Compile. - do_compile_steps = builder_spec.get('do_compile_steps', True) + do_compile_steps = True + if 'Coverage' in api.properties['buildername']: + do_compile_steps = False if do_compile_steps: extra_hashes.append(compile_steps_swarm( - api, builder_spec, got_revision, infrabots_dir, extra_compile_hashes, - cipd_packages=compile_cipd_deps)) + api, builder_cfg, got_revision, infrabots_dir)) if builder_cfg['role'] == 'Housekeeper': - housekeeper_swarm(api, builder_spec, got_revision, infrabots_dir, + housekeeper_swarm(api, builder_cfg, got_revision, infrabots_dir, extra_hashes) return @@ -629,8 +645,10 @@ def RunSteps(api): # CIPD packages needed by test/perf. cipd_packages = [] - do_test_steps = builder_spec['do_test_steps'] - do_perf_steps = builder_spec['do_perf_steps'] + do_test_steps = ( + builder_cfg['role'] == api.builder_name_schema.BUILDER_ROLE_TEST) + do_perf_steps = ( + builder_cfg['role'] == api.builder_name_schema.BUILDER_ROLE_PERF) if not (do_test_steps or do_perf_steps): return @@ -643,17 +661,21 @@ def RunSteps(api): test_task = None perf_task = None if do_test_steps: - test_task = test_steps_trigger(api, builder_spec, got_revision, + test_task = test_steps_trigger(api, builder_cfg, got_revision, infrabots_dir, extra_hashes, cipd_packages) if do_perf_steps: - perf_task = perf_steps_trigger(api, builder_spec, got_revision, + perf_task = perf_steps_trigger(api, builder_cfg, got_revision, infrabots_dir, extra_hashes, cipd_packages) is_trybot = builder_cfg['is_trybot'] + + # Wait for results, then upload them if necessary. + if test_task: - test_steps_collect(api, test_task, builder_spec['upload_dm_results'], + test_steps_collect(api, test_task, got_revision, is_trybot, builder_cfg) + if perf_task: - perf_steps_collect(api, perf_task, builder_spec['upload_perf_results'], + perf_steps_collect(api, perf_task, got_revision, is_trybot) |