| Index: scripts/slave/recipes/skia/swarm_trigger.py
|
| diff --git a/scripts/slave/recipes/skia/swarm_trigger.py b/scripts/slave/recipes/skia/swarm_trigger.py
|
| index 0d063c4c18752237d6ac50cded9f357c88a43393..b7ce85da3728ae9e0b9e045f9be3fb486e65435d 100644
|
| --- a/scripts/slave/recipes/skia/swarm_trigger.py
|
| +++ b/scripts/slave/recipes/skia/swarm_trigger.py
|
| @@ -77,6 +77,68 @@ def swarm_dimensions(builder_cfg):
|
| return dimensions
|
|
|
|
|
| +def isolate_recipes(api):
|
| + """Isolate the recipes."""
|
| + skia_recipes_dir = api.path['build'].join(
|
| + 'scripts', 'slave', 'recipes', 'skia')
|
| + api.skia_swarming.create_isolated_gen_json(
|
| + skia_recipes_dir.join('recipes.isolate'),
|
| + skia_recipes_dir,
|
| + 'linux',
|
| + 'isolate_recipes',
|
| + {})
|
| + return api.skia_swarming.batcharchive(['isolate_recipes'])[0][1]
|
| +
|
| +
|
| +def trigger_task(api, task_name, builder, builder_cfg, got_revision,
|
| + infrabots_dir, idempotent=False, store_output=True,
|
| + extra_isolate_hashes=None):
|
| + """Trigger the given bot to run as a Swarming task."""
|
| + # TODO(borenet): We're using Swarming directly to run the recipe through
|
| + # recipes.py. Once it's possible to track the state of a Buildbucket build,
|
| + # we should switch to use the trigger recipe module instead.
|
| +
|
| + properties = {
|
| + 'buildername': builder,
|
| + 'mastername': api.properties['mastername'],
|
| + 'buildnumber': api.properties['buildnumber'],
|
| + 'reason': 'Triggered by Skia swarm_trigger Recipe',
|
| + 'revision': got_revision,
|
| + 'slavename': api.properties['slavename'],
|
| + 'swarm_out_dir': '${ISOLATED_OUTDIR}',
|
| + }
|
| + if builder_cfg['is_trybot']:
|
| + properties['issue'] = str(api.properties['issue'])
|
| + properties['patchset'] = str(api.properties['patchset'])
|
| + properties['rietveld'] = api.properties['rietveld']
|
| +
|
| + extra_args = [
|
| + '--properties', json.dumps(properties),
|
| + '--workdir', '../../..',
|
| + 'skia/swarm_%s' % task_name,
|
| + ]
|
| +
|
| + isolate_base_dir = api.path['slave_build']
|
| + dimensions = swarm_dimensions(builder_cfg)
|
| + isolate_blacklist = ['.git', 'out', '*.pyc']
|
| + isolate_vars = {
|
| + 'BUILD': api.path['build'],
|
| + 'WORKDIR': api.path['slave_build'],
|
| + }
|
| +
|
| + return api.skia_swarming.isolate_and_trigger_task(
|
| + infrabots_dir.join('%s_skia.isolate' % task_name),
|
| + isolate_base_dir,
|
| + '%s_skia' % task_name,
|
| + isolate_vars,
|
| + dimensions,
|
| + isolate_blacklist=isolate_blacklist,
|
| + extra_isolate_hashes=extra_isolate_hashes,
|
| + idempotent=idempotent,
|
| + store_output=store_output,
|
| + extra_args=extra_args)
|
| +
|
| +
|
| def checkout_steps(api):
|
| """Run the steps to obtain a checkout of Skia."""
|
| gclient_cfg = api.gclient.make_config(CACHE_DIR=None)
|
| @@ -97,11 +159,12 @@ def checkout_steps(api):
|
| return got_revision
|
|
|
|
|
| -def compile_steps_swarm(api, infrabots_dir, builder_cfg):
|
| +def compile_steps_swarm(api, builder_cfg, got_revision, infrabots_dir,
|
| + extra_isolate_hashes):
|
| builder_name = derive_compile_bot_name(api.properties['buildername'],
|
| builder_cfg)
|
| # Windows bots require a toolchain.
|
| - extra_hashes = None
|
| + extra_hashes = extra_isolate_hashes[:]
|
| if 'Win' in builder_name:
|
| test_data = '''{
|
| "2013": "705384d88f80da637eb367e5acc6f315c0e1db2f",
|
| @@ -112,16 +175,17 @@ def compile_steps_swarm(api, infrabots_dir, builder_cfg):
|
| name='Read win_toolchain_hash.json',
|
| test_data=test_data).rstrip()
|
| hashes = json.loads(j)
|
| - extra_hashes = [hashes['2013']]
|
| -
|
| - # Isolate the inputs and trigger the task.
|
| - isolate_path = infrabots_dir.join('compile_skia.isolate')
|
| - isolate_vars = {'BUILDER_NAME': builder_name}
|
| - dimensions = swarm_dimensions(builder_cfg)
|
| - task = api.skia_swarming.isolate_and_trigger_task(
|
| - isolate_path, infrabots_dir, 'compile_skia', isolate_vars,
|
| - dimensions, idempotent=True, store_output=False,
|
| - isolate_blacklist=['.git', 'out', '*.pyc'],
|
| + extra_hashes.append(hashes['2013'])
|
| +
|
| + task = trigger_task(
|
| + api,
|
| + 'compile',
|
| + builder_name,
|
| + builder_cfg,
|
| + got_revision,
|
| + infrabots_dir,
|
| + idempotent=True,
|
| + store_output=False,
|
| extra_isolate_hashes=extra_hashes)
|
|
|
| # Wait for compile to finish, record the results hash.
|
| @@ -140,26 +204,17 @@ def download_skps(api, infrabots_dir):
|
| env=api.skia.gsutil_env('chromium-skia-gm.boto'))
|
|
|
|
|
| -def perf_steps_trigger(api, infrabots_dir, compile_hash, dimensions,
|
| - got_revision, is_trybot):
|
| +def perf_steps_trigger(api, builder_cfg, got_revision, infrabots_dir,
|
| + extra_hashes):
|
| """Trigger perf tests via Swarming."""
|
| - # Swarm the tests.
|
| - task_name = 'perf_skia'
|
| - isolate_path = infrabots_dir.join('%s.isolate' % task_name)
|
| - issue = str(api.properties['issue']) if is_trybot else ''
|
| - patchset = str(api.properties['patchset']) if is_trybot else ''
|
| - isolate_vars = {
|
| - 'MASTER_NAME': api.properties['mastername'],
|
| - 'BUILDER_NAME': api.properties['buildername'],
|
| - 'BUILD_NUMBER': str(api.properties['buildnumber']),
|
| - 'SLAVE_NAME': api.properties['slavename'],
|
| - 'REVISION': got_revision,
|
| - 'ISSUE': issue,
|
| - 'PATCHSET': patchset,
|
| - }
|
| - return api.skia_swarming.isolate_and_trigger_task(
|
| - isolate_path, infrabots_dir, task_name, isolate_vars, dimensions,
|
| - isolate_blacklist=['.git'], extra_isolate_hashes=[compile_hash])
|
| + return trigger_task(
|
| + api,
|
| + 'perf',
|
| + api.properties['buildername'],
|
| + builder_cfg,
|
| + got_revision,
|
| + infrabots_dir,
|
| + extra_isolate_hashes=extra_hashes)
|
|
|
|
|
| def perf_steps_collect(api, task, upload_perf_results, got_revision,
|
| @@ -200,27 +255,17 @@ def perf_steps_collect(api, task, upload_perf_results, got_revision,
|
| infra_step=True)
|
|
|
|
|
| -def test_steps_trigger(api, infrabots_dir, compile_hash, dimensions,
|
| - got_revision, is_trybot):
|
| +def test_steps_trigger(api, builder_cfg, got_revision, infrabots_dir,
|
| + extra_hashes):
|
| """Trigger DM via Swarming."""
|
| - # Swarm the tests.
|
| - task_name = 'test_skia'
|
| - isolate_path = infrabots_dir.join('%s.isolate' % task_name)
|
| - issue = str(api.properties['issue']) if is_trybot else ''
|
| - patchset = str(api.properties['patchset']) if is_trybot else ''
|
| - isolate_vars = {
|
| - 'MASTER_NAME': api.properties['mastername'],
|
| - 'BUILDER_NAME': api.properties['buildername'],
|
| - 'BUILD_NUMBER': str(api.properties['buildnumber']),
|
| - 'SLAVE_NAME': api.properties['slavename'],
|
| - 'REVISION': got_revision,
|
| - 'ISSUE': issue,
|
| - 'PATCHSET': patchset,
|
| - }
|
| -
|
| - return api.skia_swarming.isolate_and_trigger_task(
|
| - isolate_path, infrabots_dir, task_name, isolate_vars, dimensions,
|
| - isolate_blacklist=['.git'], extra_isolate_hashes=[compile_hash])
|
| + return trigger_task(
|
| + api,
|
| + 'test',
|
| + api.properties['buildername'],
|
| + builder_cfg,
|
| + got_revision,
|
| + infrabots_dir,
|
| + extra_isolate_hashes=extra_hashes)
|
|
|
|
|
| def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot):
|
| @@ -264,11 +309,14 @@ def RunSteps(api):
|
| api.path['checkout'].join('infra', 'bots', 'tools', 'luci-go'),
|
| swarming_rev='')
|
|
|
| - compile_hash = compile_steps_swarm(api, infrabots_dir, builder_cfg)
|
| + recipes_hash = isolate_recipes(api)
|
| +
|
| + compile_hash = compile_steps_swarm(api, builder_cfg, got_revision,
|
| + infrabots_dir, [recipes_hash])
|
| + extra_hashes = [recipes_hash, compile_hash]
|
|
|
| do_test_steps = builder_spec['do_test_steps']
|
| do_perf_steps = builder_spec['do_perf_steps']
|
| - is_trybot = builder_cfg['is_trybot']
|
|
|
| if not (do_test_steps or do_perf_steps):
|
| return
|
| @@ -276,16 +324,15 @@ def RunSteps(api):
|
| download_skps(api, infrabots_dir)
|
| download_images(api, infrabots_dir)
|
|
|
| - dimensions = swarm_dimensions(builder_cfg)
|
| -
|
| test_task = None
|
| perf_task = None
|
| if do_test_steps:
|
| - test_task = test_steps_trigger(api, infrabots_dir, compile_hash, dimensions,
|
| - got_revision, is_trybot)
|
| + test_task = test_steps_trigger(api, builder_cfg, got_revision,
|
| + infrabots_dir, extra_hashes)
|
| if do_perf_steps:
|
| - perf_task = perf_steps_trigger(api, infrabots_dir, compile_hash, dimensions,
|
| - got_revision, is_trybot)
|
| + perf_task = perf_steps_trigger(api, builder_cfg, got_revision,
|
| + infrabots_dir, extra_hashes)
|
| + is_trybot = builder_cfg['is_trybot']
|
| if test_task:
|
| test_steps_collect(api, test_task, builder_spec['upload_dm_results'],
|
| got_revision, is_trybot)
|
| @@ -314,10 +361,9 @@ def GenTests(api):
|
| test += api.properties(issue=500,
|
| patchset=1,
|
| rietveld='https://codereview.chromium.org')
|
| - if 'Win' in builder:
|
| - test += api.step_data(
|
| - 'upload new .isolated file for compile_skia',
|
| - stdout=api.raw_io.output('def456 XYZ.isolated'))
|
| + test += api.step_data(
|
| + 'upload new .isolated file for compile_skia',
|
| + stdout=api.raw_io.output('def456 XYZ.isolated'))
|
| if 'Test' in builder:
|
| test += api.step_data(
|
| 'upload new .isolated file for test_skia',
|
|
|