Chromium Code Reviews| 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..7de1cd6e419854d1542f4f860f592c02771ad60b 100644 |
| --- a/scripts/slave/recipes/skia/swarm_trigger.py |
| +++ b/scripts/slave/recipes/skia/swarm_trigger.py |
| @@ -77,6 +77,65 @@ def swarm_dimensions(builder_cfg): |
| return dimensions |
| +def trigger_task(api, task_name, builder, builder_cfg, got_revision, |
| + infrabots_dir, store_output=False, 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 |
| + # Kitchen. Once it's possible to track the state of a Buildbucket build, |
| + # we should switch to use the trigger recipe module instead. |
| + |
| + if not extra_isolate_hashes: |
| + extra_isolate_hashes = [] |
| + # Kitchen binaries. |
| + extra_isolate_hashes.append('8ba778e47df2a9b46355cf72c58b58fdb1a7f350') |
|
rmistry
2016/03/28 12:52:16
Document where you got this hash from?
|
| + |
| + 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'] |
| + |
| + idempotent = False |
| + store_output = True |
| + if task_name == 'compile': |
| + idempotent = True |
| + store_output = False |
| + |
| + extra_args = [ |
| + 'cook', |
| + '-repository', 'https://chromium.googlesource.com/chromium/tools/build', |
| + '-revision', '', |
| + '-recipe', 'skia/swarm_%s' % task_name, |
| + '-properties', json.dumps(properties), |
| + '-workdir', '../../..', |
| + ] |
| + |
| + isolate_base_dir = api.path['slave_build'] |
| + dimensions = swarm_dimensions(builder_cfg) |
| + isolate_blacklist = ['.git', 'out', '*.pyc'] |
| + isolate_vars = {} |
| + |
| + 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,7 +156,7 @@ 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): |
| builder_name = derive_compile_bot_name(api.properties['buildername'], |
| builder_cfg) |
| # Windows bots require a toolchain. |
| @@ -114,14 +173,13 @@ def compile_steps_swarm(api, infrabots_dir, builder_cfg): |
| 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'], |
| + task = trigger_task( |
| + api, |
| + 'compile', |
| + builder_name, |
| + builder_cfg, |
| + got_revision, |
| + infrabots_dir, |
| extra_isolate_hashes=extra_hashes) |
| # Wait for compile to finish, record the results hash. |
| @@ -140,26 +198,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, |
| + compile_hash): |
| """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=[compile_hash]) |
| def perf_steps_collect(api, task, upload_perf_results, got_revision, |
| @@ -200,27 +249,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, |
| + compile_hash): |
| """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=[compile_hash]) |
| def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot): |
| @@ -264,11 +303,11 @@ def RunSteps(api): |
| api.path['checkout'].join('infra', 'bots', 'tools', 'luci-go'), |
| swarming_rev='') |
| - compile_hash = compile_steps_swarm(api, infrabots_dir, builder_cfg) |
| + compile_hash = compile_steps_swarm(api, builder_cfg, got_revision, |
| + infrabots_dir) |
| 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 |
| @@ -281,11 +320,12 @@ def RunSteps(api): |
| 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, compile_hash) |
| 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, compile_hash) |
| + 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 +354,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', |