# 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 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(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') )