| 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..0e4b78b661ac0576ad497717958038766d187b8b
|
| --- /dev/null
|
| +++ b/infra/bots/recipes/swarmbucket_wrapper.py
|
| @@ -0,0 +1,121 @@
|
| +# 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):
|
| + """Run the steps to obtain a checkout of Skia."""
|
| + # Find the workdir and cache dir.
|
| + 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')
|
| +
|
| + # Set up gclient config.
|
| + 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'
|
| +
|
| + # Set up options for bot_update based on properties. In general, these will
|
| + # all take the default value.
|
| + 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
|
| +
|
| + # Run bot_update to sync the code and apply a patch if necessary.
|
| + 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)
|
| +
|
| + # Ensure that we ended up with the desired revision.
|
| + 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')
|
| + )
|
|
|