Chromium Code Reviews| Index: infra/bots/recipes/swarmbucket_wrapper.py |
| diff --git a/infra/bots/recipes/swarmbucket_wrapper.py b/infra/bots/recipes/swarmbucket_wrapper.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a594a85250cfe8adaf25e1e76cdfac575f1a8154 |
| --- /dev/null |
| +++ b/infra/bots/recipes/swarmbucket_wrapper.py |
| @@ -0,0 +1,111 @@ |
| +# Copyright 2016 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. |
| + |
| + |
| +# Recipe wrapper used in SwarmBucket. |
| + |
| + |
| +DEPS = [ |
| + 'build/file', |
| + 'depot_tools/bot_update', |
| + 'depot_tools/gclient', |
| + 'recipe_engine/json', |
| + 'recipe_engine/path', |
| + 'recipe_engine/properties', |
| + 'recipe_engine/python', |
| + 'recipe_engine/step', |
| +] |
| + |
| + |
| +def checkout_steps(api): |
|
rmistry
2016/07/28 17:41:48
Can we add a bunch of documentation and line break
borenet
2016/07/28 17:46:00
Done. Honestly, I'm not sure what most of the opti
|
| + """Run the steps to obtain a checkout of Skia.""" |
| + workdir = api.path['b'].join('work') |
| + if not api.path.exists(workdir): |
| + api.file.makedirs('workdir', workdir, infra_step=True) |
| + cache_dir = api.path['b'].join('cache') |
| + api.gclient.use_mirror = True |
| + gclient_cfg = api.gclient.make_config(GIT_MODE=True, CACHE_DIR=cache_dir) |
| + soln = gclient_cfg.solutions.add() |
| + soln.name = 'skia' |
| + soln.url = 'https://skia.googlesource.com/skia.git' |
| + soln.revision = api.properties.get('revision', 'origin/master') |
| + api.gclient.c = gclient_cfg |
| + api.gclient.c.got_revision_mapping['skia'] = 'got_revision' |
| + patch = api.properties.get('patch', True) |
| + clobber = True if api.properties.get('clobber') else False |
| + force = True if api.properties.get('force') else False |
| + no_shallow = True if api.properties.get('no_shallow') else False |
| + output_manifest = api.properties.get('output_manifest', False) |
| + with_branch_heads = api.properties.get('with_branch_heads', False) |
| + refs = api.properties.get('refs', []) |
| + oauth2 = api.properties.get('oauth2', False) |
| + 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 |
| + api.bot_update.ensure_checkout(force=force, |
| + no_shallow=no_shallow, |
| + patch=patch, |
| + with_branch_heads=with_branch_heads, |
| + output_manifest=output_manifest, |
| + refs=refs, patch_oauth2=oauth2, |
| + clobber=clobber, |
| + root_solution_revision=root_solution_revision, |
| + suffix=suffix, |
| + gerrit_no_reset=gerrit_no_reset, |
| + cwd=workdir) |
| + got_revision = api.step.active_result.presentation.properties['got_revision'] |
| + if soln.revision != 'origin/master': # pragma: no cover |
| + assert got_revision == soln.revision |
| + return got_revision |
| + |
| + |
| +def forward_to_recipe_in_repo(api): |
| + workdir = api.path['b'].join('work') |
| + recipes_py = workdir.join('skia', 'infra', 'bots', 'recipes.py') |
| + cmd = ['python', recipes_py, 'run', |
| + '--workdir', workdir, |
| + 'swarm_trigger', 'path_config=kitchen'] |
| + for k, v in api.properties.iteritems(): |
| + cmd.append('%s=%s' % (k, v)) |
| + api.step('run recipe', cmd=cmd, allow_subannotations=True) |
| + |
| + |
| +def print_properties(api): |
| + """Dump out all properties for debugging purposes.""" |
| + props = {} |
| + for k, v in api.properties.iteritems(): |
| + props[k] = v |
| + api.python.inline( |
| + 'print properties', |
| + ''' |
| +import json |
| +import sys |
| + |
| +with open(sys.argv[1]) as f: |
| + content = json.load(f) |
| + |
| +print json.dumps(content, indent=2) |
| +''', |
| + args=[api.json.input(props)]) |
| + |
| + |
| +def RunSteps(api): |
| + api.path.c.base_paths['b'] = ('/', 'b') |
| + |
| + # TODO(borenet): Remove this once SwarmBucket is working. |
| + print_properties(api) |
| + |
| + checkout_steps(api) |
| + forward_to_recipe_in_repo(api) |
| + |
| + |
| +def GenTests(api): |
| + yield ( |
| + api.test('trigger_recipe') + |
| + api.properties(buildername='Some-Builder', |
| + buildnumber=5, |
| + mastername='client.skia.fyi', |
| + slavename='some-slave', |
| + path_config='swarmbucket') |
| + ) |