Add swarmbucket_wrapper recipe

BUG=skia:5581
NOTRY=true
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2185203003

Review-Url: https://codereview.chromium.org/2185203003
This commit is contained in:
borenet 2016-07-28 10:50:54 -07:00 committed by Commit bot
parent a0605bf9d1
commit f49d9d77bb
2 changed files with 239 additions and 0 deletions

View File

@ -0,0 +1,118 @@
[
{
"cmd": [
"python",
"-u",
"\nimport json\nimport sys\n\nwith open(sys.argv[1]) as f:\n content = json.load(f)\n\nprint json.dumps(content, indent=2)\n",
"{\"buildername\": \"Some-Builder\", \"buildnumber\": 5, \"mastername\": \"client.skia.fyi\", \"path_config\": \"swarmbucket\", \"recipe\": \"swarmbucket_wrapper\", \"slavename\": \"some-slave\"}"
],
"name": "print properties",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@import json@@@",
"@@@STEP_LOG_LINE@python.inline@import sys@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@",
"@@@STEP_LOG_LINE@python.inline@ content = json.load(f)@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@print json.dumps(content, indent=2)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"python",
"-u",
"\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
"[B]/work",
"511"
],
"name": "makedirs workdir",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
"@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
"@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
"@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
"@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
"@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
"@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
"--master",
"client.skia.fyi",
"--builder",
"Some-Builder",
"--slave",
"some-slave",
"--spec",
"cache_dir = '[B]/cache'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]",
"--root",
"skia",
"--revision_mapping_file",
"{\"skia\": \"got_revision\"}",
"--git-cache-dir",
"[B]/cache",
"--output_json",
"/path/to/tmp/json",
"--revision",
"skia@origin/master"
],
"cwd": "[B]/work",
"env": {
"PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]"
},
"name": "bot_update",
"~followup_annotations": [
"@@@STEP_TEXT@Some step text@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
"@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"skia\": \"origin/master\"@@@",
"@@@STEP_LOG_LINE@json.output@ }, @@@",
"@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
"@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"skia\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"got_revision\": \"9046e2e693bb92a76e972b694580e5d17ad10748\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"got_revision_cp\": \"refs/heads/master@{#164710}\"@@@",
"@@@STEP_LOG_LINE@json.output@ }, @@@",
"@@@STEP_LOG_LINE@json.output@ \"root\": \"skia\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@got_revision@\"9046e2e693bb92a76e972b694580e5d17ad10748\"@@@",
"@@@SET_BUILD_PROPERTY@got_revision_cp@\"refs/heads/master@{#164710}\"@@@"
]
},
{
"allow_subannotations": true,
"cmd": [
"python",
"[B]/work/skia/infra/bots/recipes.py",
"run",
"--workdir",
"[B]/work",
"swarm_trigger",
"path_config=kitchen",
"buildername=Some-Builder",
"recipe=swarmbucket_wrapper",
"mastername=client.skia.fyi",
"buildnumber=5",
"slavename=some-slave",
"path_config=swarmbucket"
],
"name": "run recipe"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -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')
)