[recipes] Copy file, isolate, swarming, swarming_client from build.git

Rename swarming -> skia_swarming.
Some required heavy modification to remove other dependencies on modules
in build.git.

Expected changes:

- RECIPE_MODULE[build::<module>] -> RECIPE_MODULE[skia::<module>]
- No more runit; directly run through Python.

Bug: skia:6628
Change-Id: I1b1370ed387966222ce10731771dbde9020cf542
Reviewed-on: https://skia-review.googlesource.com/17448
Commit-Queue: Eric Boren <borenet@google.com>
Reviewed-by: Ravi Mistry <rmistry@google.com>
This commit is contained in:
Eric Boren 2017-05-22 08:35:36 -04:00 committed by Skia Commit-Bot
parent 66f6b1fb48
commit f94514b0ff
153 changed files with 9313 additions and 807 deletions

View File

@ -3,10 +3,10 @@
# found in the LICENSE file.
DEPS = [
'build/file',
'depot_tools/bot_update',
'depot_tools/gclient',
'depot_tools/tryserver',
'file',
'flavor',
'recipe_engine/context',
'recipe_engine/path',

View File

@ -3,8 +3,8 @@
# found in the LICENSE file.
DEPS = [
'build/file',
'depot_tools/gsutil',
'file',
'recipe_engine/path',
'recipe_engine/step',
'run',

View File

@ -3,7 +3,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/skps/slave0"
],

View File

@ -3,7 +3,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/skps/slave0"
],

View File

@ -0,0 +1,5 @@
dnj@chromium.org
iannucci@chromium.org
martiniss@chromium.org
nodir@chromium.org
phajdan.jr@chromium.org

View File

@ -0,0 +1,16 @@
# Copyright 2014 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.
# TODO(borenet): This module belongs in the recipe engine. Remove it from this
# repo once it has been moved.
DEPS = [
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/python',
'recipe_engine/raw_io',
'recipe_engine/step',
]

View File

@ -0,0 +1,204 @@
# Copyright 2014 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.
# TODO(borenet): This module belongs in the recipe engine. Remove it from this
# repo once it has been moved.
from recipe_engine import recipe_api
class FileApi(recipe_api.RecipeApi):
"""FileApi contains helper functions for reading and writing files."""
def __init__(self, **kwargs):
super(FileApi, self).__init__(**kwargs)
def _run_fileutil(self, name, fileutil_args, **kwargs):
# Failure to perform filesystem operations is considered an infrastructure
# failure.
kwargs = kwargs.copy()
kwargs.setdefault('infra_step', True)
self.m.python(
name,
self.resource('fileutil.py'),
args=fileutil_args,
**kwargs)
def copy(self, name, source, dest, step_test_data=None, **kwargs):
"""Copy a file."""
return self.m.python.inline(
name,
"""
import shutil
import sys
shutil.copy(sys.argv[1], sys.argv[2])
""",
args=[source, dest],
add_python_log=False,
step_test_data=step_test_data,
**kwargs
)
def copytree(self, name, source, dest, symlinks=False, **kwargs):
"""Run shutil.copytree in a step."""
return self.m.python.inline(
name,
"""
import shutil
import sys
shutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))
""",
args=[source, dest, int(symlinks)],
add_python_log=False,
**kwargs
)
def move(self, name, source, dest, **kwargs):
"""Run shutil.move in a step."""
return self.m.python.inline(
name,
"""
import shutil
import sys
shutil.move(sys.argv[1], sys.argv[2])
""",
args=[source, dest],
add_python_log=False,
**kwargs
)
def read(self, name, path, test_data=None, **kwargs):
"""Read a file and return its contents."""
step_test_data = None
if test_data is not None:
step_test_data = lambda: self.m.raw_io.test_api.output_text(test_data)
return self.copy(name, path, self.m.raw_io.output_text(),
step_test_data=step_test_data, **kwargs).raw_io.output_text
def write(self, name, path, data, **kwargs):
"""Write the given data to a file."""
return self.m.python.inline(
name,
"""
import shutil
import sys
shutil.copy(sys.argv[1], sys.argv[2])
""",
args=[self.m.raw_io.input_text(data), path],
add_python_log=False,
**kwargs
)
def glob(self, name, pattern, test_data=None, **kwargs):
"""Performs glob search on a directory.
Returns list of Path objects for all files found.
"""
step_test_data = None
if test_data is not None:
step_test_data = (
lambda: self.m.raw_io.test_api.output_text(
'\n'.join(map(str, test_data))))
step_result = self.m.python.inline(
name,
r"""
import glob
import sys
with open(sys.argv[1], 'w') as f:
f.write('\n'.join(glob.glob(sys.argv[2])))
""",
args=[self.m.raw_io.output_text(), pattern],
step_test_data=step_test_data,
add_python_log=False,
**kwargs
)
return map(self.m.path.abs_to_path,
step_result.raw_io.output_text.splitlines())
def remove(self, name, path, **kwargs):
"""Remove the given file."""
return self.m.python.inline(
name,
"""
import os
import sys
os.remove(sys.argv[1])
""",
args=[path],
**kwargs
)
def listdir(self, name, path, step_test_data=None, **kwargs):
"""Wrapper for os.listdir."""
return self.m.python.inline('listdir %s' % name,
"""
import json, os, sys
if os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):
with open(sys.argv[2], 'w') as f:
json.dump(os.listdir(sys.argv[1]), f)
""",
args=[path, self.m.json.output()],
step_test_data=(step_test_data or (
lambda: self.m.json.test_api.output(['file 1', 'file 2']))),
**kwargs
).json.output
def makedirs(self, name, path, mode=0777, **kwargs):
"""
Like os.makedirs, except that if the directory exists, then there is no
error.
"""
self.m.path.assert_absolute(path)
self.m.python.inline(
'makedirs ' + name,
"""
import sys, os
path = sys.argv[1]
mode = int(sys.argv[2])
if not os.path.isdir(path):
if os.path.exists(path):
print "%s exists but is not a dir" % path
sys.exit(1)
os.makedirs(path, mode)
""",
args=[path, str(mode)],
**kwargs
)
self.m.path.mock_add_paths(path)
def rmtree(self, name, path, **kwargs):
"""Wrapper for chromium_utils.RemoveDirectory."""
self.m.path.assert_absolute(path)
self._run_fileutil(
'rmtree ' + name,
['rmtree', path],
**kwargs)
def rmcontents(self, name, path, **kwargs):
"""
Similar to rmtree, but removes only contents not the directory.
This is useful e.g. when removing contents of current working directory.
Deleting current working directory makes all further getcwd calls fail
until chdir is called. chdir would be tricky in recipes, so we provide
a call that doesn't delete the directory itself.
"""
self.m.path.assert_absolute(path)
self._run_fileutil(
'rmcontents ' + name,
['rmcontents', path],
**kwargs)
def rmwildcard(self, pattern, path, **kwargs):
"""
Removes all files in the subtree of path matching the glob pattern.
"""
self.m.path.assert_absolute(path)
self._run_fileutil(
'rmwildcard %s in %s' % (pattern, path),
['rmwildcard', path, pattern],
**kwargs)

View File

@ -0,0 +1,301 @@
[
{
"cmd": [
"python",
"-u",
"\nimport json, os, sys\nif os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):\n with open(sys.argv[2], 'w') as f:\n json.dump(os.listdir(sys.argv[1]), f)\n",
"/fake/dir",
"/path/to/tmp/json"
],
"name": "listdir fake dir",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"file 1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"file 2\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@import json, os, sys@@@",
"@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):@@@",
"@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@",
"@@@STEP_LOG_LINE@python.inline@ json.dump(os.listdir(sys.argv[1]), f)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"some",
"command"
],
"name": "manipulate file 1"
},
{
"cmd": [
"some",
"command"
],
"name": "manipulate file 2"
},
{
"cmd": [
"python",
"-u",
"\nimport json, os, sys\nif os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):\n with open(sys.argv[2], 'w') as f:\n json.dump(os.listdir(sys.argv[1]), f)\n",
"/faker/dir",
"/path/to/tmp/json"
],
"name": "listdir other",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"aaa\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@import json, os, sys@@@",
"@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):@@@",
"@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@",
"@@@STEP_LOG_LINE@python.inline@ json.dump(os.listdir(sys.argv[1]), f)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"some",
"command"
],
"name": "manipulate aaa"
},
{
"cmd": [
"echo",
"[TMP_BASE]/prefix_a_tmp_1"
],
"name": "print prefix_a"
},
{
"cmd": [
"echo",
"[TMP_BASE]/prefix_b_tmp_2"
],
"name": "print prefix_b"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.move(sys.argv[1], sys.argv[2])\n",
"[START_DIR]/source",
"[START_DIR]/destination"
],
"name": "move"
},
{
"cmd": [
"python",
"-u",
"\nimport os\nimport sys\nos.remove(sys.argv[1])\n",
"[START_DIR]/some_file"
],
"name": "remove",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@import os@@@",
"@@@STEP_LOG_LINE@python.inline@import sys@@@",
"@@@STEP_LOG_LINE@python.inline@os.remove(sys.argv[1])@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmcontents",
"[START_DIR]/some_dir"
],
"infra_step": true,
"name": "rmcontents rmcontents"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmwildcard",
"[START_DIR]",
"*.o"
],
"infra_step": true,
"name": "rmwildcard *.o in [START_DIR]"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"abcde",
"tmp_file.txt"
],
"name": "write_simple"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"tmp_file.txt",
"/path/to/tmp/"
],
"name": "read_simple"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"! ~&&",
"tmp_file.txt"
],
"name": "write_symbols"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"tmp_file.txt",
"/path/to/tmp/"
],
"name": "read_symbols"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"abcde fgh",
"tmp_file.txt"
],
"name": "write_spaces"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"tmp_file.txt",
"/path/to/tmp/"
],
"name": "read_spaces"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"ab\ncd\nefg\n",
"tmp_file.txt"
],
"name": "write_multiline"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"tmp_file.txt",
"/path/to/tmp/"
],
"name": "read_multiline"
},
{
"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",
"[START_DIR]/copytree_example_tmp",
"511"
],
"name": "makedirs makedirs",
"~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",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"some file content",
"[START_DIR]/copytree_example_tmp/dummy_file"
],
"name": "write [START_DIR]/copytree_example_tmp/dummy_file"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n",
"[START_DIR]/copytree_example_tmp",
"[START_DIR]/copytree_example_tmp2",
"0"
],
"name": "copytree"
},
{
"cmd": [
"python",
"-u",
"\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
"[START_DIR]/copytree_example_tmp2/dummy_file",
"/path/to/tmp/"
],
"name": "read [START_DIR]/copytree_example_tmp2/dummy_file"
},
{
"cmd": [
"python",
"-u",
"\nimport glob\nimport sys\nwith open(sys.argv[1], 'w') as f:\n f.write('\\n'.join(glob.glob(sys.argv[2])))\n",
"/path/to/tmp/",
"[START_DIR]/copytree_example_tmp/*"
],
"name": "glob"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/copytree_example_tmp"
],
"infra_step": true,
"name": "rmtree cleanup"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/copytree_example_tmp2"
],
"infra_step": true,
"name": "rmtree cleanup2"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,101 @@
# Copyright 2014 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.
# TODO(borenet): This module belongs in the recipe engine. Remove it from this
# repo once it has been moved.
from recipe_engine.types import freeze
DEPS = [
'depot_tools/infra_paths',
'file',
'recipe_engine/path',
'recipe_engine/raw_io',
'recipe_engine/step',
]
TEST_CONTENTS = freeze({
'simple': 'abcde',
'spaces': 'abcde fgh',
'symbols': '! ~&&',
'multiline': '''ab
cd
efg
''',
})
def RunSteps(api):
# listdir demo.
result = api.file.listdir('fake dir', '/fake/dir')
for element in result:
api.step('manipulate %s' % str(element), ['some', 'command'])
result = api.file.listdir('other', '/faker/dir')
for element in result:
api.step('manipulate %s' % str(element), ['some', 'command'])
# mkdtemp demo.
for prefix in ('prefix_a', 'prefix_b'):
# Create temp dir.
temp_dir = api.path.mkdtemp(prefix)
assert api.path.exists(temp_dir)
# Make |temp_dir| surface in expectation files.
api.step('print %s' % prefix, ['echo', temp_dir])
# move demo
api.file.move(
'move',
api.path['start_dir'].join('source'),
api.path['start_dir'].join('destination'))
# remove demo
api.file.remove('remove', api.path['start_dir'].join('some_file'))
# rmcontents demo
api.file.rmcontents('rmcontents', api.path['start_dir'].join('some_dir'))
# rmwildcard demo
api.file.rmwildcard('*.o', api.path['start_dir'])
for name, content in TEST_CONTENTS.iteritems():
api.file.write('write_%s' % name, 'tmp_file.txt', content)
actual_content = api.file.read(
'read_%s' % name, 'tmp_file.txt',
test_data=content
)
msg = 'expected %s but got %s' % (content, actual_content)
assert actual_content == content, msg
try:
# copytree
content = 'some file content'
tmp_dir = api.path['start_dir'].join('copytree_example_tmp')
api.file.makedirs('makedirs', tmp_dir)
path = tmp_dir.join('dummy_file')
api.file.write('write %s' % path, path, content)
new_tmp = api.path['start_dir'].join('copytree_example_tmp2')
new_path = new_tmp.join('dummy_file')
api.file.copytree('copytree', tmp_dir, new_tmp)
actual_content = api.file.read('read %s' % new_path, new_path,
test_data=content)
assert actual_content == content
# glob.
files = api.file.glob(
'glob', tmp_dir.join('*'),
test_data=[tmp_dir.join('dummy_file')])
assert files == [tmp_dir.join('dummy_file')], files
finally:
api.file.rmtree('cleanup', tmp_dir)
api.file.rmtree('cleanup2', new_tmp)
def GenTests(api):
yield api.test('file_io') + api.file.listdir('other', ['aaa'])

View File

@ -0,0 +1,174 @@
#!/usr/bin/env python
# Copyright (c) 2012 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.
# TODO(borenet): This module belongs in the recipe engine. Remove it from this
# repo once it has been moved.
"""Utility exporting basic filesystem operations.
This file was cut from "scripts/common/chromium_utils.py" at:
91310531c31fa645256b4fb5d44b460c42b3e151
"""
import argparse
import errno
import fnmatch
import os
import shutil
import subprocess
import sys
import time
def _LocateFiles(pattern, root):
"""Yeilds files matching pattern found in root and its subdirectories.
An exception is thrown if root doesn't exist."""
for path, _, files in os.walk(os.path.abspath(root)):
for filename in fnmatch.filter(files, pattern):
yield os.path.join(path, filename)
def _RemoveFilesWildcards(file_wildcard, root):
"""Removes files matching 'file_wildcard' in root and its subdirectories, if
any exists.
An exception is thrown if root doesn't exist."""
for item in _LocateFiles(file_wildcard, root):
try:
os.remove(item)
except OSError, e:
if e.errno != errno.ENOENT:
raise
def _RemoveContents(path):
if os.path.exists(path):
for p in (os.path.join(path, x) for x in os.listdir(path)):
if os.path.isdir(p):
_RemoveDirectory(p)
else:
os.unlink(p)
def _RemoveDirectory(*path):
"""Recursively removes a directory, even if it's marked read-only.
Remove the directory located at *path, if it exists.
shutil.rmtree() doesn't work on Windows if any of the files or directories
are read-only, which svn repositories and some .svn files are. We need to
be able to force the files to be writable (i.e., deletable) as we traverse
the tree.
Even with all this, Windows still sometimes fails to delete a file, citing
a permission error (maybe something to do with antivirus scans or disk
indexing). The best suggestion any of the user forums had was to wait a
bit and try again, so we do that too. It's hand-waving, but sometimes it
works. :/
"""
file_path = os.path.join(*path)
if not os.path.exists(file_path):
return
if sys.platform == 'win32':
# Give up and use cmd.exe's rd command.
file_path = os.path.normcase(file_path)
for _ in xrange(3):
print 'RemoveDirectory running %s' % (' '.join(
['cmd.exe', '/c', 'rd', '/q', '/s', file_path]))
if not subprocess.call(['cmd.exe', '/c', 'rd', '/q', '/s', file_path]):
break
print ' Failed'
time.sleep(3)
return
def RemoveWithRetry_non_win(rmfunc, path):
if os.path.islink(path):
return os.remove(path)
else:
return rmfunc(path)
remove_with_retry = RemoveWithRetry_non_win
def RmTreeOnError(function, path, excinfo):
r"""This works around a problem whereby python 2.x on Windows has no ability
to check for symbolic links. os.path.islink always returns False. But
shutil.rmtree will fail if invoked on a symbolic link whose target was
deleted before the link. E.g., reproduce like this:
> mkdir test
> mkdir test\1
> mklink /D test\current test\1
> python -c "import chromium_utils; chromium_utils.RemoveDirectory('test')"
To avoid this issue, we pass this error-handling function to rmtree. If
we see the exact sort of failure, we ignore it. All other failures we re-
raise.
"""
exception_type = excinfo[0]
exception_value = excinfo[1]
# If shutil.rmtree encounters a symbolic link on Windows, os.listdir will
# fail with a WindowsError exception with an ENOENT errno (i.e., file not
# found). We'll ignore that error. Note that WindowsError is not defined
# for non-Windows platforms, so we use OSError (of which it is a subclass)
# to avoid lint complaints about an undefined global on non-Windows
# platforms.
if (function is os.listdir) and issubclass(exception_type, OSError):
if exception_value.errno == errno.ENOENT:
# File does not exist, and we're trying to delete, so we can ignore the
# failure.
print 'WARNING: Failed to list %s during rmtree. Ignoring.\n' % path
else:
raise
else:
raise
for root, dirs, files in os.walk(file_path, topdown=False):
# For POSIX: making the directory writable guarantees removability.
# Windows will ignore the non-read-only bits in the chmod value.
os.chmod(root, 0770)
for name in files:
remove_with_retry(os.remove, os.path.join(root, name))
for name in dirs:
remove_with_retry(lambda p: shutil.rmtree(p, onerror=RmTreeOnError),
os.path.join(root, name))
remove_with_retry(os.rmdir, file_path)
def main(args):
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
# Subcommand: rmtree
subparser = subparsers.add_parser('rmtree',
help='Recursively remove a directory.')
subparser.add_argument('path', nargs='+', help='A path to remove.')
subparser.set_defaults(func=lambda opts: _RemoveDirectory(*opts.path))
# Subcommand: rmcontents
subparser = subparsers.add_parser('rmcontents',
help='Recursively remove the contents of a directory.')
subparser.add_argument('path', help='The target directory.')
subparser.set_defaults(func=lambda opts: _RemoveContents(opts.path))
# Subcommand: rmwildcard
subparser = subparsers.add_parser('rmwildcard',
help='Recursively remove the contents of a directory.')
subparser.add_argument('root', help='The directory to search through.')
subparser.add_argument('wildcard', help='The wildcard expression to remove.')
subparser.set_defaults(func=lambda opts:
_RemoveFilesWildcards(opts.wildcard, opts.root))
# Parse arguments.
opts = parser.parse_args(args)
opts.func(opts)
if __name__ == '__main__':
main(sys.argv[1:])

View File

@ -0,0 +1,18 @@
# Copyright 2014 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.
# TODO(borenet): This module belongs in the recipe engine. Remove it from this
# repo once it has been moved.
from recipe_engine import recipe_test_api
class FileTestApi(recipe_test_api.RecipeTestApi):
def listdir(self, dirname, files):
return self.step_data(
'listdir %s' % dirname,
self.m.json.output(files))

View File

@ -3,10 +3,9 @@
# found in the LICENSE file.
DEPS = [
'build/adb',
'build/file',
'builder_name_schema',
'depot_tools/bot_update',
'file',
'recipe_engine/context',
'recipe_engine/path',
'recipe_engine/platform',

View File

@ -17,7 +17,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/flutter/src/out/android_release"
],

View File

@ -67,7 +67,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],

View File

@ -99,7 +99,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],

View File

@ -107,7 +107,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],

View File

@ -50,7 +50,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],
@ -87,7 +87,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"device_results_dir"
],

View File

@ -50,7 +50,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],
@ -87,7 +87,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"device_results_dir"
],

View File

@ -50,7 +50,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],
@ -87,7 +87,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"device_results_dir"
],

View File

@ -50,7 +50,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],
@ -87,7 +87,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"device_results_dir"
],

View File

@ -50,7 +50,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],
@ -87,7 +87,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"device_results_dir"
],

View File

@ -97,7 +97,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],

View File

@ -67,7 +67,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],

View File

@ -67,7 +67,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"results_dir"
],

View File

@ -0,0 +1,3 @@
dpranke@chromium.org
mcgreevy@chromium.org
tansell@chromium.org

View File

@ -0,0 +1,23 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
DEPS = [
'file',
'depot_tools/git',
'depot_tools/gsutil',
'recipe_engine/context',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/step',
'recipe_engine/tempfile',
'swarming_client',
]

View File

@ -0,0 +1,253 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
import itertools
from recipe_engine import recipe_api
class IsolateApi(recipe_api.RecipeApi):
"""APIs for interacting with isolates."""
def __init__(self, **kwargs):
super(IsolateApi, self).__init__(**kwargs)
self._isolate_server = 'https://isolateserver.appspot.com'
self._isolated_tests = {}
@property
def isolate_server(self):
"""URL of Isolate server to use, default is a production one."""
return self._isolate_server
@isolate_server.setter
def isolate_server(self, value):
"""Changes URL of Isolate server to use."""
self._isolate_server = value
def clean_isolated_files(self, build_dir):
"""Cleans out all *.isolated files from the build directory in
preparation for the compile. Needed in order to ensure isolates
are rebuilt properly because their dependencies are currently not
completely described to gyp.
"""
self.m.python(
'clean isolated files',
self.resource('find_isolated_tests.py'),
[
'--build-dir', build_dir,
'--clean-isolated-files'
])
def find_isolated_tests(self, build_dir, targets=None, **kwargs):
"""Returns a step which finds all *.isolated files in a build directory.
Useful only with 'archive' isolation mode.
In 'prepare' mode use 'isolate_tests' instead.
Assigns the dict {target name -> *.isolated file hash} to the swarm_hashes
build property. This implies this step can currently only be run once
per recipe.
If |targets| is None, the step will use all *.isolated files it finds.
Otherwise, it will verify that all |targets| are found and will use only
them. If some expected targets are missing, will abort the build.
"""
step_result = self.m.python(
'find isolated tests',
self.resource('find_isolated_tests.py'),
[
'--build-dir', build_dir,
'--output-json', self.m.json.output(),
],
step_test_data=lambda: (self.test_api.output_json(targets)),
**kwargs)
assert isinstance(step_result.json.output, dict)
self._isolated_tests = step_result.json.output
if targets is not None and (
step_result.presentation.status != self.m.step.FAILURE):
found = set(step_result.json.output)
expected = set(targets)
if found >= expected: # pragma: no cover
# Limit result only to |expected|.
self._isolated_tests = {
target: step_result.json.output[target] for target in expected
}
else:
# Some expected targets are missing? Fail the step.
step_result.presentation.status = self.m.step.FAILURE
step_result.presentation.logs['missing.isolates'] = (
['Failed to find *.isolated files:'] + list(expected - found))
step_result.presentation.properties['swarm_hashes'] = self._isolated_tests
# No isolated files found? That looks suspicious, emit warning.
if (not self._isolated_tests and
step_result.presentation.status != self.m.step.FAILURE):
step_result.presentation.status = self.m.step.WARNING
def isolate_tests(self, build_dir, targets=None, verbose=False,
set_swarm_hashes=True, always_use_exparchive=False,
**kwargs):
"""Archives prepared tests in |build_dir| to isolate server.
src/tools/isolate_driver.py is invoked by ninja during compilation
to produce *.isolated.gen.json files that describe how to archive tests.
This step then uses *.isolated.gen.json files to actually performs the
archival. By archiving all tests at once it is able to reduce the total
amount of work. Tests share many common files, and such files are processed
only once.
Assigns the dict {target name -> *.isolated file hash} to the swarm_hashes
build property (also accessible as 'isolated_tests' property). This implies
this step can currently only be run once per recipe.
"""
# TODO(tansell): Make all steps in this function nested under one overall
# 'isolate tests' master step.
# TODO(vadimsh): Always require |targets| to be passed explicitly. Currently
# chromium_trybot, blink_trybot and swarming/canary recipes rely on targets
# autodiscovery. The code path in chromium_trybot that needs it is being
# deprecated in favor of to *_ng builders, that pass targets explicitly.
if targets is None:
# Ninja builds <target>.isolated.gen.json files via isolate_driver.py.
paths = self.m.file.glob(
'find isolated targets',
build_dir.join('*.isolated.gen.json'),
test_data=[
build_dir.join('dummy_target_%d.isolated.gen.json' % i)
for i in (1, 2)
])
targets = []
for p in paths:
name = self.m.path.basename(p)
assert name.endswith('.isolated.gen.json'), name
targets.append(name[:-len('.isolated.gen.json')])
# No isolated tests found.
if not targets: # pragma: no cover
return
batch_targets = []
exparchive_targets = []
for t in targets:
if t.endswith('_exparchive') or always_use_exparchive:
exparchive_targets.append(t)
else:
batch_targets.append(t)
isolate_steps = []
try:
args = [
self.m.swarming_client.path,
'exparchive',
'--dump-json', self.m.json.output(),
'--isolate-server', self._isolate_server,
'--eventlog-endpoint', 'prod',
] + (['--verbose'] if verbose else [])
for target in exparchive_targets:
isolate_steps.append(
self.m.python(
'isolate %s' % target,
self.resource('isolate.py'),
args + [
'--isolate', build_dir.join('%s.isolate' % target),
'--isolated', build_dir.join('%s.isolated' % target),
],
step_test_data=lambda: self.test_api.output_json([target]),
**kwargs))
if batch_targets:
# TODO(vadimsh): Differentiate between bad *.isolate and upload errors.
# Raise InfraFailure on upload errors.
args = [
self.m.swarming_client.path,
'batcharchive',
'--dump-json', self.m.json.output(),
'--isolate-server', self._isolate_server,
] + (['--verbose'] if verbose else []) + [
build_dir.join('%s.isolated.gen.json' % t) for t in batch_targets
]
isolate_steps.append(
self.m.python(
'isolate tests', self.resource('isolate.py'), args,
step_test_data=lambda: self.test_api.output_json(batch_targets),
**kwargs))
# TODO(tansell): Change this to return a dummy "isolate results" or the
# top level master step.
return isolate_steps[-1]
finally:
step_result = self.m.step.active_result
swarm_hashes = {}
for step in isolate_steps:
if not step.json.output:
continue # pragma: no cover
for k, v in step.json.output.iteritems():
# TODO(tansell): Raise an error here when it can't clobber an
# existing error. This code is currently inside a finally block,
# meaning it could be executed when an existing error is occurring.
# See https://chromium-review.googlesource.com/c/437024/
#assert k not in swarm_hashes or swarm_hashes[k] == v, (
# "Duplicate hash for target %s was found at step %s."
# "Existing hash: %s, New hash: %s") % (
# k, step, swarm_hashes[k], v)
swarm_hashes[k] = v
if swarm_hashes:
self._isolated_tests = swarm_hashes
if set_swarm_hashes:
step_result.presentation.properties['swarm_hashes'] = swarm_hashes
missing = sorted(
t for t, h in self._isolated_tests.iteritems() if not h)
if missing:
step_result.presentation.logs['failed to isolate'] = (
['Failed to isolate following targets:'] +
missing +
['', 'See logs for more information.']
)
for k in missing:
self._isolated_tests.pop(k)
@property
def isolated_tests(self):
"""The dictionary of 'target name -> isolated hash' for this run.
These come either from the incoming swarm_hashes build property,
or from calling find_isolated_tests, above, at some point during the run.
"""
hashes = self.m.properties.get('swarm_hashes', self._isolated_tests)
# Be robust in the case where swarm_hashes is an empty string
# instead of an empty dictionary, or similar.
if not hashes:
return {} # pragma: no covergae
return {
k.encode('ascii'): v.encode('ascii')
for k, v in hashes.iteritems()
}
@property
def _run_isolated_path(self):
"""Returns the path to run_isolated.py."""
return self.m.swarming_client.path.join('run_isolated.py')
def run_isolated(self, name, isolate_hash, args=None, **kwargs):
"""Runs an isolated test."""
cmd = [
'--isolated', isolate_hash,
'-I', self.isolate_server,
'--verbose',
]
if args:
cmd.append('--')
cmd.extend(args)
self.m.python(name, self._run_isolated_path, cmd, **kwargs)

View File

@ -0,0 +1,208 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\", \"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolated"
],
"name": "isolate test_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test1.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated"
],
"name": "isolate test1",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test2.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated"
],
"name": "isolate test2",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\", \"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,151 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated.gen.json",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,124 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@null@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"dummy_target_1\": \"[dummy hash for dummy_target_1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"dummy_target_2\": \"[dummy hash for dummy_target_2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"dummy_target_1\": \"[dummy hash for dummy_target_1]\", \"dummy_target_2\": \"[dummy hash for dummy_target_2]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,187 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@missing.isolates@Failed to find *.isolated files:@@@",
"@@@STEP_LOG_LINE@missing.isolates@test2@@@",
"@@@STEP_LOG_END@missing.isolates@@@",
"@@@STEP_FAILURE@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolated"
],
"name": "isolate test_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated.gen.json",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": null@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@failed to isolate@Failed to isolate following targets:@@@",
"@@@STEP_LOG_LINE@failed to isolate@test2@@@",
"@@@STEP_LOG_LINE@failed to isolate@@@@",
"@@@STEP_LOG_LINE@failed to isolate@See logs for more information.@@@",
"@@@STEP_LOG_END@failed to isolate@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,187 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@missing.isolates@Failed to find *.isolated files:@@@",
"@@@STEP_LOG_LINE@missing.isolates@test_exparchive@@@",
"@@@STEP_LOG_END@missing.isolates@@@",
"@@@STEP_FAILURE@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolated"
],
"name": "isolate test_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": null@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated.gen.json",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@failed to isolate@Failed to isolate following targets:@@@",
"@@@STEP_LOG_LINE@failed to isolate@test_exparchive@@@",
"@@@STEP_LOG_LINE@failed to isolate@@@@",
"@@@STEP_LOG_LINE@failed to isolate@See logs for more information.@@@",
"@@@STEP_LOG_END@failed to isolate@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,179 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\", \"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolated"
],
"name": "isolate test_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated.gen.json",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\", \"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,159 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@missing.isolates@Failed to find *.isolated files:@@@",
"@@@STEP_LOG_LINE@missing.isolates@test_exparchive@@@",
"@@@STEP_LOG_END@missing.isolates@@@",
"@@@STEP_FAILURE@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolated"
],
"name": "isolate test_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": null@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@failed to isolate@Failed to isolate following targets:@@@",
"@@@STEP_LOG_LINE@failed to isolate@test_exparchive@@@",
"@@@STEP_LOG_LINE@failed to isolate@@@@",
"@@@STEP_LOG_LINE@failed to isolate@See logs for more information.@@@",
"@@@STEP_LOG_END@failed to isolate@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,188 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1_exparchive\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1_exparchive\": \"[dummy hash for test1_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@missing.isolates@Failed to find *.isolated files:@@@",
"@@@STEP_LOG_LINE@missing.isolates@test2_exparchive@@@",
"@@@STEP_LOG_END@missing.isolates@@@",
"@@@STEP_FAILURE@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1_exparchive\": \"[dummy hash for test1_exparchive]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test1_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test1_exparchive.isolated"
],
"name": "isolate test1_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1_exparchive\": \"[dummy hash for test1_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test2_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test2_exparchive.isolated"
],
"name": "isolate test2_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test2_exparchive\": null@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@failed to isolate@Failed to isolate following targets:@@@",
"@@@STEP_LOG_LINE@failed to isolate@test2_exparchive@@@",
"@@@STEP_LOG_LINE@failed to isolate@@@@",
"@@@STEP_LOG_LINE@failed to isolate@See logs for more information.@@@",
"@@@STEP_LOG_END@failed to isolate@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1_exparchive\": \"[dummy hash for test1_exparchive]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,180 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1_exparchive\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1_exparchive\": \"[dummy hash for test1_exparchive]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2_exparchive\": \"[dummy hash for test2_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1_exparchive\": \"[dummy hash for test1_exparchive]\", \"test2_exparchive\": \"[dummy hash for test2_exparchive]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test1_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test1_exparchive.isolated"
],
"name": "isolate test1_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1_exparchive\": \"[dummy hash for test1_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test2_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test2_exparchive.isolated"
],
"name": "isolate test2_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test2_exparchive\": \"[dummy hash for test2_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1_exparchive\": \"[dummy hash for test1_exparchive]\", \"test2_exparchive\": \"[dummy hash for test2_exparchive]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,152 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"exparchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--eventlog-endpoint",
"prod",
"--isolate",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolate",
"--isolated",
"RECIPE_PACKAGE_REPO[skia]/test_exparchive.isolated"
],
"name": "isolate test_exparchive",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test_exparchive\": \"[dummy hash for test_exparchive]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_exparchive\": \"[dummy hash for test_exparchive]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,152 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"extra_test\": \"[dummy hash for extra_test]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated.gen.json",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": \"[dummy hash for test2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\", \"test2\": \"[dummy hash for test2]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,159 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@[@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\"@@@",
"@@@STEP_LOG_LINE@json.output@]@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@missing.isolates@Failed to find *.isolated files:@@@",
"@@@STEP_LOG_LINE@missing.isolates@test2@@@",
"@@@STEP_LOG_END@missing.isolates@@@",
"@@@STEP_FAILURE@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\"}@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"RECIPE_PACKAGE_REPO[skia]/test1.isolated.gen.json",
"RECIPE_PACKAGE_REPO[skia]/test2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"test1\": \"[dummy hash for test1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"test2\": null@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@failed to isolate@Failed to isolate following targets:@@@",
"@@@STEP_LOG_LINE@failed to isolate@test2@@@",
"@@@STEP_LOG_LINE@failed to isolate@@@@",
"@@@STEP_LOG_LINE@failed to isolate@See logs for more information.@@@",
"@@@STEP_LOG_END@failed to isolate@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test1\": \"[dummy hash for test1]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,122 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"cat"
],
"name": "read test spec",
"stdout": "/path/to/tmp/json",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@null@@@",
"@@@STEP_LOG_END@json.output@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"RECIPE_PACKAGE_REPO[skia]",
"--output-json",
"/path/to/tmp/json"
],
"name": "find isolated tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_WARNINGS@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,147 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
from recipe_engine.recipe_api import Property
DEPS = [
'isolate',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/step',
'swarming_client',
]
PROPERTIES = {
'always_use_exparchive': Property(
kind=bool, help="Force usage of exparchive.", default=False),
}
def RunSteps(api, always_use_exparchive):
# 'isolate_tests' step needs swarming checkout.
api.swarming_client.checkout('master')
# Code coverage for isolate_server property.
api.isolate.isolate_server = 'https://isolateserver-dev.appspot.com'
assert api.isolate.isolate_server == 'https://isolateserver-dev.appspot.com'
# That would read a list of files to search for, generated in GenTests.
step_result = api.step('read test spec', ['cat'], stdout=api.json.output())
expected_targets = step_result.stdout
build_path = api.isolate.package_repo_resource()
# Generates code coverage for find_isolated_tests corner cases.
# TODO(vadimsh): This step doesn't actually make any sense when the recipe
# is running for real via run_recipe.py.
api.isolate.find_isolated_tests(build_path, expected_targets)
# Code coverage for 'isolate_tests'. 'isolated_test' doesn't support discovery
# of isolated targets in build directory, so skip if 'expected_targets' is
# None.
if expected_targets is not None:
api.isolate.isolate_tests(
build_path, expected_targets,
always_use_exparchive=always_use_exparchive)
def GenTests(api):
def make_test(
name,
expected_batcharchive_targets,
expected_exparchive_targets,
discovered_targets):
if expected_batcharchive_targets or expected_exparchive_targets:
all_expected_targets = (
(expected_batcharchive_targets or []) +
(expected_exparchive_targets or []))
else:
all_expected_targets = None
missing = set(all_expected_targets or []) - set(discovered_targets or [])
output = (
api.test(name) +
api.step_data(
'read test spec',
stdout=api.json.output(all_expected_targets)) +
api.override_step_data(
'find isolated tests',
api.isolate.output_json(discovered_targets))
)
# See comment around 'if expected_targets is not None' above.
if all_expected_targets:
for target in sorted(expected_exparchive_targets):
output += api.override_step_data(
'isolate %s' % target,
api.isolate.output_json([target], missing))
if expected_batcharchive_targets:
output += api.override_step_data(
'isolate tests',
api.isolate.output_json(expected_batcharchive_targets, missing))
return output
# Expected targets == found targets.
yield make_test(
'basic', ['test1', 'test2'], [], ['test1', 'test2'])
# No expectations, just discovering what's there returned by default mock.
yield make_test(
'discover', None, None, None)
# Found more than expected.
yield make_test(
'extra', ['test1', 'test2'], [], ['test1', 'test2', 'extra_test'])
# Didn't find something.
yield (
make_test('missing', ['test1', 'test2'], [], ['test1']) +
api.properties.generic(buildername='Windows Swarm Test'))
# No expectations, and nothing has been found, produces warning.
yield make_test('none', None, None, [])
# Test the `exparchive` cases
# Only exparchive
yield make_test(
'exparchive', [], ['test_exparchive'], ['test_exparchive'])
yield make_test(
'exparchive-miss', [], ['test_exparchive'], [])
yield make_test(
'exparchive-multi',
[],
['test1_exparchive', 'test2_exparchive'],
['test1_exparchive', 'test2_exparchive'])
yield make_test(
'exparchive-multi-miss',
[],
['test1_exparchive', 'test2_exparchive'],
['test1_exparchive'])
# Mixed
yield make_test(
'exparchive-batch',
['test1', 'test2'],
['test_exparchive'],
['test1', 'test2', 'test_exparchive'])
yield make_test(
'exparchive-batch-bmiss',
['test1', 'test2'],
['test_exparchive'],
['test1', 'test_exparchive'])
yield make_test(
'exparchive-batch-emiss',
['test1', 'test2'],
['test_exparchive'],
['test1', 'test2'])
# Use force-exparchive
yield make_test(
'always-use-exparchive',
[],
['test_exparchive', 'test1', 'test2'],
['test_exparchive', 'test1', 'test2']) + api.properties(
always_use_exparchive=True)

View File

@ -0,0 +1,98 @@
#!/usr/bin/env python
# Copyright 2014 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.
"""Scans build output directory for .isolated files, calculates their SHA1
hashes and stores final list in JSON document.
Used to figure out what tests were build in isolated mode to trigger these
tests to run on swarming.
For more info see:
https://sites.google.com/a/chromium.org/dev/developers/testing/isolated-testing
"""
import glob
import hashlib
import json
import optparse
import os
import re
import sys
def hash_file(filepath):
"""Calculates the hash of a file without reading it all in memory at once."""
digest = hashlib.sha1()
with open(filepath, 'rb') as f:
while True:
chunk = f.read(1024*1024)
if not chunk:
break
digest.update(chunk)
return digest.hexdigest()
def main():
parser = optparse.OptionParser(
usage='%prog --build-dir <path> '
'[--output-json <path> | --clean-isolated-files]',
description=sys.modules[__name__].__doc__)
parser.add_option(
'--build-dir',
help='Path to a directory to search for *.isolated files.')
parser.add_option(
'--output-json',
help='File to dump JSON results into. '
'Mutually exclusive with --clean-isolated-files.')
parser.add_option(
'--clean-isolated-files',
action='store_true',
help='Whether to clean out all .isolated and .isolated.gen.json files. '
'Mutually exclusive with --output-json.')
options, _ = parser.parse_args()
if not options.build_dir:
parser.error('--build-dir option is required')
if not (options.output_json or options.clean_isolated_files):
parser.error('either --output-json or --clean-isolated-files is required')
if options.output_json and options.clean_isolated_files:
parser.error('only one of --output-json and '
'--clean-isolated-files is allowed')
result = {}
# Clean up generated *.isolated.gen.json files, produced by isolate_driver.py
# in test_isolation_mode='prepare'.
if options.clean_isolated_files:
pattern = os.path.join(options.build_dir, '*.isolated.gen.json')
for filepath in sorted(glob.glob(pattern)):
os.remove(filepath)
# Get the file hash values and output the pair.
pattern = os.path.join(options.build_dir, '*.isolated')
for filepath in sorted(glob.glob(pattern)):
test_name = os.path.splitext(os.path.basename(filepath))[0]
if re.match(r'^.+?\.\d$', test_name):
# It's a split .isolated file, e.g. foo.0.isolated. Ignore these.
continue
if options.clean_isolated_files:
# TODO(csharp): Remove deletion entirely once the isolate
# tracked dependencies are inputs for the isolated files.
# http://crbug.com/419031
os.remove(filepath)
else:
sha1_hash = hash_file(filepath)
result[test_name] = sha1_hash
if options.output_json:
with open(options.output_json, 'wb') as f:
json.dump(result, f)
return 0
if __name__ == '__main__':
sys.exit(main())

View File

@ -0,0 +1,37 @@
#!/usr/bin/env python
# Copyright 2015 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.
"""Calls the isolate Go executable in the checkout, failing if it cannot run.
"""
# TODO(djd): make the caller invoke the Go binary directly, kill this script.
import os
import subprocess
import sys
def try_go(path, args):
"""Tries to run the Go implementation of isolate.
"""
luci_go = os.path.join(os.path.dirname(path), 'luci-go')
if sys.platform == 'win32':
exe = os.path.join(luci_go, 'win64', 'isolate.exe')
elif sys.platform == 'darwin':
exe = os.path.join(luci_go, 'mac64', 'isolate')
else:
exe = os.path.join(luci_go, 'linux64', 'isolate')
return subprocess.call([exe] + args)
def main():
path = sys.argv[1]
args = sys.argv[2:]
return try_go(path, args)
if __name__ == '__main__':
sys.exit(main())

View File

@ -0,0 +1,30 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
from recipe_engine import recipe_test_api
class IsolateTestApi(recipe_test_api.RecipeTestApi):
def output_json(self, targets=None, missing=None):
"""Mocked output of 'find_isolated_tests' and 'isolate_tests' steps.
Deterministically synthesizes json.output test data for the given targets.
If |targets| is None, will emit test data with some dummy targets instead,
emulating find_isolated_tests.py finding some files.
If |missing| is given it's a subset of |targets| that wasn't isolated in
'isolate_tests' due to some error.
"""
missing = missing or ()
if targets is None:
targets = ['dummy_target_1', 'dummy_target_2']
return self.m.json.output({
target: None if target in missing else '[dummy hash for %s]' % target
for target in targets
})

View File

@ -0,0 +1,18 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/find_isolated_tests.py",
"--build-dir",
"None/out/Release",
"--clean-isolated-files"
],
"name": "clean isolated files"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,16 @@
# Copyright 2017 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.
DEPS = [
'isolate',
'recipe_engine/path',
]
def RunSteps(api):
api.isolate.clean_isolated_files(api.path['checkout'].join('out', 'Release'))
def GenTests(api):
yield api.test('basic')

View File

@ -0,0 +1,41 @@
[
{
"cmd": [
"python",
"-u",
"\nimport glob\nimport sys\nwith open(sys.argv[1], 'w') as f:\n f.write('\\n'.join(glob.glob(sys.argv[2])))\n",
"/path/to/tmp/",
"None/out/Release/*.isolated.gen.json"
],
"name": "find isolated targets"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"None/tools/swarming_client",
"batcharchive",
"--dump-json",
"/path/to/tmp/json",
"--isolate-server",
"https://isolateserver.appspot.com",
"None/out/Release/dummy_target_1.isolated.gen.json",
"None/out/Release/dummy_target_2.isolated.gen.json"
],
"name": "isolate tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"dummy_target_1\": \"[dummy hash for dummy_target_1]\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"dummy_target_2\": \"[dummy hash for dummy_target_2]\"@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@SET_BUILD_PROPERTY@swarm_hashes@{\"dummy_target_1\": \"[dummy hash for dummy_target_1]\", \"dummy_target_2\": \"[dummy hash for dummy_target_2]\"}@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,16 @@
# Copyright 2017 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.
DEPS = [
'isolate',
'recipe_engine/path',
]
def RunSteps(api):
api.isolate.isolate_tests(api.path['checkout'].join('out', 'Release'))
def GenTests(api):
yield api.test('basic')

View File

@ -0,0 +1,15 @@
[
{
"cmd": [],
"name": "isolated_tests",
"~followup_annotations": [
"@@@STEP_LOG_LINE@details@isolated_tests: {'base_unittests': 'ffffffffffffffffffffffffffffffffffffffff'}@@@",
"@@@STEP_LOG_END@details@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,27 @@
# Copyright 2017 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.
DEPS = [
'isolate',
'recipe_engine/properties',
'recipe_engine/step',
]
def RunSteps(api):
api.step('isolated_tests', [])
api.step.active_result.presentation.logs['details'] = [
'isolated_tests: %r' % api.isolate.isolated_tests
]
def GenTests(api):
yield (
api.test('basic') +
api.properties(
swarm_hashes={
'base_unittests': 'ffffffffffffffffffffffffffffffffffffffff',
}
)
)

View File

@ -0,0 +1,23 @@
[
{
"cmd": [
"python",
"-u",
"None/tools/swarming_client/run_isolated.py",
"--isolated",
"isolate_hash",
"-I",
"https://isolateserver.appspot.com",
"--verbose",
"--",
"some",
"args"
],
"name": "run_isolated"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,15 @@
# Copyright 2017 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.
DEPS = [
'isolate',
]
def RunSteps(api):
api.isolate.run_isolated('run_isolated', 'isolate_hash', ['some', 'args'])
def GenTests(api):
yield api.test('basic')

View File

@ -3,8 +3,8 @@
# found in the LICENSE file.
DEPS = [
'build/file',
'env',
'file',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/platform',

View File

@ -83,7 +83,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"mydir"
],

View File

@ -0,0 +1,19 @@
# 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.
DEPS = [
'depot_tools/depot_tools',
'file',
'isolate',
'recipe_engine/context',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/raw_io',
'recipe_engine/step',
'run',
'swarming',
'swarming_client',
]

View File

@ -0,0 +1,220 @@
# 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.
from recipe_engine import recipe_api
import shlex
DEFAULT_TASK_EXPIRATION = 20*60*60
DEFAULT_TASK_TIMEOUT = 4*60*60
DEFAULT_IO_TIMEOUT = 40*60
MILO_LOG_LINK = 'https://luci-milo.appspot.com/swarming/task/%s'
class SkiaSwarmingApi(recipe_api.RecipeApi):
"""Provides steps to run Skia tasks on swarming bots."""
@property
def swarming_temp_dir(self):
"""Path where artifacts like isolate file and json output will be stored."""
return self.m.path['start_dir'].join('swarming_temp_dir')
@property
def tasks_output_dir(self):
"""Directory where the outputs of the swarming tasks will be stored."""
return self.swarming_temp_dir.join('outputs')
def isolated_file_path(self, task_name):
"""Get the path to the given task's .isolated file."""
return self.swarming_temp_dir.join('skia-task-%s.isolated' % task_name)
def setup(self, luci_go_dir, swarming_rev=None):
"""Performs setup steps for swarming."""
self.m.swarming_client.checkout(revision=swarming_rev)
self.m.swarming.check_client_version(step_test_data=(0, 8, 6))
self.setup_go_isolate(luci_go_dir)
self.m.swarming.add_default_tag('allow_milo:1')
# TODO(rmistry): Remove once the Go binaries are moved to recipes or buildbot.
def setup_go_isolate(self, luci_go_dir):
"""Generates and puts in place the isolate Go binary."""
depot_tools_path = self.m.depot_tools.package_repo_resource()
env = {'PATH': self.m.path.pathsep.join([
str(depot_tools_path), '%(PATH)s'])}
with self.m.context(env=env):
self.m.step('download luci-go linux',
['download_from_google_storage', '--no_resume',
'--platform=linux*', '--no_auth',
'--bucket', 'chromium-luci',
'-d', luci_go_dir.join('linux64')])
self.m.step('download luci-go mac',
['download_from_google_storage', '--no_resume',
'--platform=darwin', '--no_auth',
'--bucket', 'chromium-luci',
'-d', luci_go_dir.join('mac64')])
self.m.step('download luci-go win',
['download_from_google_storage', '--no_resume',
'--platform=win32', '--no_auth', '--bucket',
'chromium-luci',
'-d', luci_go_dir.join('win64')])
# Copy binaries to the expected location.
dest = self.m.path['start_dir'].join('luci-go')
self.m.run.rmtree(dest)
self.m.file.copytree('Copy Go binary',
source=luci_go_dir,
dest=dest)
def create_isolated_gen_json(self, isolate_path, base_dir, os_type,
task_name, extra_variables, blacklist=None):
"""Creates an isolated.gen.json file (used by the isolate recipe module).
Args:
isolate_path: path obj. Path to the isolate file.
base_dir: path obj. Dir that is the base of all paths in the isolate file.
os_type: str. The OS type to use when archiving the isolate file.
Eg: linux.
task_name: str. The isolated.gen.json file will be suffixed by this str.
extra_variables: dict of str to str. The extra vars to pass to isolate.
Eg: {'SLAVE_NUM': '1', 'MASTER': 'ChromiumPerfFYI'}
blacklist: list of regular expressions indicating which files/directories
not to archive.
"""
self.m.file.makedirs('swarming tmp dir', self.swarming_temp_dir)
isolated_path = self.isolated_file_path(task_name)
isolate_args = [
'--isolate', isolate_path,
'--isolated', isolated_path,
'--config-variable', 'OS', os_type,
]
if blacklist:
for b in blacklist:
isolate_args.extend(['--blacklist', b])
for k, v in extra_variables.iteritems():
isolate_args.extend(['--extra-variable', k, v])
isolated_gen_dict = {
'version': 1,
'dir': base_dir,
'args': isolate_args,
}
isolated_gen_json = self.swarming_temp_dir.join(
'%s.isolated.gen.json' % task_name)
self.m.file.write(
'Write %s.isolated.gen.json' % task_name,
isolated_gen_json,
self.m.json.dumps(isolated_gen_dict, indent=4),
)
def batcharchive(self, targets):
"""Calls batcharchive on the skia.isolated.gen.json file.
Args:
targets: list of str. The suffixes of the isolated.gen.json files to
archive.
Returns:
list of tuples containing (task_name, swarming_hash).
"""
return self.m.isolate.isolate_tests(
verbose=True, # To avoid no output timeouts.
build_dir=self.swarming_temp_dir,
targets=targets).presentation.properties['swarm_hashes'].items()
def trigger_swarming_tasks(
self, swarm_hashes, dimensions, idempotent=False, store_output=True,
extra_args=None, expiration=None, hard_timeout=None, io_timeout=None,
cipd_packages=None):
"""Triggers swarming tasks using swarm hashes.
Args:
swarm_hashes: list of str. List of swarm hashes from the isolate server.
dimensions: dict of str to str. The dimensions to run the task on.
Eg: {'os': 'Ubuntu', 'gpu': '10de', 'pool': 'Skia'}
idempotent: bool. Whether or not to de-duplicate tasks.
store_output: bool. Whether task output should be stored.
extra_args: list of str. Extra arguments to pass to the task.
expiration: int. Task will expire if not picked up within this time.
DEFAULT_TASK_EXPIRATION is used if this argument is None.
hard_timeout: int. Task will timeout if not completed within this time.
DEFAULT_TASK_TIMEOUT is used if this argument is None.
io_timeout: int. Task will timeout if there is no output within this time.
DEFAULT_IO_TIMEOUT is used if this argument is None.
cipd_packages: CIPD packages which these tasks depend on.
Returns:
List of swarming.SwarmingTask instances.
"""
swarming_tasks = []
for task_name, swarm_hash in swarm_hashes:
swarming_task = self.m.swarming.task(
title=task_name,
cipd_packages=cipd_packages,
isolated_hash=swarm_hash)
if store_output:
swarming_task.task_output_dir = self.tasks_output_dir.join(task_name)
swarming_task.dimensions = dimensions
swarming_task.idempotent = idempotent
swarming_task.priority = 90
swarming_task.expiration = (
expiration if expiration else DEFAULT_TASK_EXPIRATION)
swarming_task.hard_timeout = (
hard_timeout if hard_timeout else DEFAULT_TASK_TIMEOUT)
swarming_task.io_timeout = (
io_timeout if io_timeout else DEFAULT_IO_TIMEOUT)
if extra_args:
swarming_task.extra_args = extra_args
revision = self.m.properties.get('revision')
if revision:
swarming_task.tags.add('revision:%s' % revision)
swarming_tasks.append(swarming_task)
step_results = self.m.swarming.trigger(swarming_tasks)
for step_result in step_results:
self._add_log_links(step_result, step_result.json.output)
return swarming_tasks
def collect_swarming_task(self, swarming_task):
"""Collects the specified swarming task.
Args:
swarming_task: An instance of swarming.SwarmingTask.
"""
try:
rv = self.m.swarming.collect_task(swarming_task)
except self.m.step.StepFailure as e: # pragma: no cover
step_result = self.m.step.active_result
# Change step result to Infra failure if the swarming task failed due to
# expiration, time outs, bot crashes or task cancelations.
# Infra failures have step.EXCEPTION.
states_infra_failure = (
self.m.swarming.State.EXPIRED, self.m.swarming.State.TIMED_OUT,
self.m.swarming.State.BOT_DIED, self.m.swarming.State.CANCELED)
summary = step_result.swarming.summary
if summary['shards'][0]['state'] in states_infra_failure:
step_result.presentation.status = self.m.step.EXCEPTION
raise self.m.step.InfraFailure(e.name, step_result)
raise
finally:
step_result = self.m.step.active_result
# Add log link.
self._add_log_links(step_result, step_result.swarming.summary)
return rv
def _add_log_links(self, step_result, summary):
"""Add Milo log links to all shards in the step."""
ids = []
shards = summary.get('shards')
if shards:
for shard in shards:
ids.append(shard['id'])
else:
for _, task in summary.get('tasks', {}).iteritems():
ids.append(task['task_id'])
for idx, task_id in enumerate(ids):
link = MILO_LOG_LINK % task_id
k = 'view steps on Milo'
if len(ids) > 1: # pragma: nocover
k += ' (shard index %d, %d total)' % (idx, len(ids))
step_result.presentation.links[k] = link

View File

@ -150,7 +150,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -207,7 +207,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -549,17 +549,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/task-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -630,17 +626,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/task-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -711,17 +703,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/task-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -792,17 +780,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/task-0",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -873,17 +857,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/task-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -0,0 +1,31 @@
# Copyright 2017 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.
DEPS = [
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/step',
'skia_swarming',
]
def RunSteps(api):
api.skia_swarming.setup('mydir', swarming_rev='abc123')
api.skia_swarming.create_isolated_gen_json(
'isolate_path', 'isolate_dir', 'linux', 'task', {'myvar': 'myval'},
blacklist=['*.pyc'])
tasks_to_hashes = api.skia_swarming.batcharchive(targets=[
'task-%s' % num for num in range(5)])
tasks = api.skia_swarming.trigger_swarming_tasks(
tasks_to_hashes, dimensions={'os': 'Linux'}, extra_args=['--extra'])
for t in tasks:
api.skia_swarming.collect_swarming_task(t)
def GenTests(api):
yield (
api.test('test') +
api.properties(revision='abc123')
)

View File

@ -0,0 +1,3 @@
maruel@chromium.org
tansell@chromium.org
vadimsh@chromium.org

View File

@ -1,19 +1,33 @@
# Copyright 2016 The Chromium Authors. All rights reserved.
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
DEPS = [
'build/file',
'build/isolate',
'build/swarming',
'build/swarming_client',
'depot_tools/depot_tools',
'isolate',
'recipe_engine/context',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/raw_io',
'recipe_engine/step',
'run',
'swarming_client',
]
from recipe_engine.recipe_api import Property
PROPERTIES = {
'show_shards_in_collect_step': Property(default=False, kind=bool),
'show_isolated_out_in_collect_step': Property(default=True, kind=bool),
}
# TODO(phajdan.jr): provide coverage (http://crbug.com/693058).
DISABLE_STRICT_COVERAGE = True

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,683 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"linux",
"--verbose"
],
"name": "archive for linux",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"mac",
"--verbose"
],
"name": "archive for mac",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"2",
"--task-name",
"hello_world/Ubuntu-14.04/hash_for_l",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Ubuntu-14.04",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_linux",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Ubuntu-14.04",
"--tag",
"os:linux",
"--tag",
"stepname:hello_world",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_linux"
],
"infra_step": true,
"name": "[trigger] hello_world",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Ubuntu-14.04/hash_for_l\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Ubuntu-14.04/hash_for_l:2:0\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }, @@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Ubuntu-14.04/hash_for_l:2:1\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 1, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10100\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10100\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@",
"@@@STEP_LINK@shard #1@https://chromium-swarm-dev.appspot.com/user/task/10100@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Mac-10.9/hash_for_m",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Mac-10.9",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_mac",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Mac-10.9",
"--tag",
"os:mac",
"--tag",
"stepname:hello_world on Mac-10.9",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_mac"
],
"infra_step": true,
"name": "[trigger] hello_world on Mac-10.9",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Mac-10.9'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Mac-10.9/hash_for_m\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Mac-10.9/hash_for_m\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0000\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LINK@shard #0 isolated out@blah@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Ubuntu-14.04/hash_for_l\", \"tasks\": {\"hello_world/Ubuntu-14.04/hash_for_l:2:0\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}, \"hello_world/Ubuntu-14.04/hash_for_l:2:1\": {\"shard_index\": 1, \"task_id\": \"10100\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10100\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Ubuntu-14.04'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0000\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0100\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LINK@shard #0 isolated out@blah@@@",
"@@@STEP_LINK@shard #1 isolated out@blah@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Mac-10.9/hash_for_m\", \"tasks\": {\"hello_world/Mac-10.9/hash_for_m\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Mac-10.9",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Mac-10.9'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0000\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LINK@shard #0 isolated out@blah@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,297 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"rietveld:https://codereview.chromium.org/123/#ps1001",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0000\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,299 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"rietveld:https://codereview.chromium.org/123/#ps1001",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0000\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LINK@shard #0 isolated out@blah@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,281 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0100\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": \"EXPIRED\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LOG_LINE@no_results_exc@Infra Failure in Shard #0 failed: There isn't enough capacity to run your test@@@",
"@@@STEP_LOG_END@no_results_exc@@@",
"@@@STEP_EXCEPTION@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,281 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0100\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 48, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LOG_LINE@no_results_exc@Infra Failure in Shard #0 failed: There isn't enough capacity to run your test@@@",
"@@@STEP_LOG_END@no_results_exc@@@",
"@@@STEP_EXCEPTION@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,278 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0100\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": \"TIMED_OUT\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,278 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0100\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 64, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -0,0 +1,298 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"master"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.8.6@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"archive",
"--isolate",
"[START_DIR]/swarming.client/example/payload/hello_world.isolate",
"--isolated",
"[TMP_BASE]/hello_isolated_world_tmp_1/hello_world.isolated",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--config-variable",
"OS",
"win",
"--verbose"
],
"name": "archive for win",
"stdout": "/path/to/tmp/"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"trigger",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--isolate-server",
"https://isolateserver-dev.appspot.com",
"--priority",
"30",
"--shards",
"1",
"--task-name",
"hello_world/Windows-7-SP1/hash_for_w",
"--dump-json",
"/path/to/tmp/json",
"--expiration",
"3600",
"--io-timeout",
"1200",
"--hard-timeout",
"3600",
"--dimension",
"cpu",
"x86-64",
"--dimension",
"gpu",
"none",
"--dimension",
"os",
"Windows-7-SP1",
"--env",
"TESTING",
"1",
"--tag",
"data:hash_for_win",
"--tag",
"master:tryserver",
"--tag",
"name:hello_world",
"--tag",
"os:Windows-7-SP1",
"--tag",
"os:win",
"--tag",
"rietveld:https://codereview.chromium.org/123/#ps1001",
"--tag",
"stepname:hello_world on Windows-7-SP1",
"--verbose",
"--idempotent",
"--user",
"joe",
"--cipd-package",
"bin:super/awesome/pkg:git_revision:deadbeef",
"--isolated",
"hash_for_win"
],
"infra_step": true,
"name": "[trigger] hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'@@@",
"@@@STEP_LOG_LINE@json.output@{@@@",
"@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"hello_world/Windows-7-SP1/hash_for_w\": {@@@",
"@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@",
"@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@",
"@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@ }@@@",
"@@@STEP_LOG_LINE@json.output@}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LINK@shard #0@https://chromium-swarm-dev.appspot.com/user/task/10000@@@"
]
},
{
"cmd": [
"echo",
"running something locally"
],
"name": "local step"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[TMP_BASE]/hello_isolated_world_tmp_1/task_output_dir",
"--merge-script",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"collect",
"--swarming",
"https://chromium-swarm-dev.appspot.com",
"--decorate",
"--print-status-updates",
"--verbose",
"--json",
"{\"base_task_name\": \"hello_world/Windows-7-SP1/hash_for_w\", \"tasks\": {\"hello_world/Windows-7-SP1/hash_for_w\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm-dev.appspot.com/user/task/10000\"}}}",
"--task-summary-json",
"/path/to/tmp/json"
],
"name": "hello_world on Windows-7-SP1",
"~followup_annotations": [
"@@@STEP_TEXT@Run on OS: 'Windows-7-SP1'<br>swarming pending 71s@@@",
"@@@STEP_LOG_LINE@json.output@{}@@@",
"@@@STEP_LOG_END@json.output@@@",
"@@@STEP_LOG_LINE@swarming.summary@{@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"shards\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"abandoned_ts\": null, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"bot_id\": \"vm30\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"durations\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 5.7, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 31.5@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"exit_codes\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ 0@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"id\": \"148aa78d7aa0000\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"internal_failure\": false, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated_out\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolated\": \"abc123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"namespace\": \"default-gzip\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs\": [@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Heart beat succeeded on win32.\\n\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"Foo\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ], @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"outputs_ref\": {@@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"view_url\": \"blah\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"state\": 112, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"try_number\": 1, @@@",
"@@@STEP_LOG_LINE@swarming.summary@ \"user\": \"unknown\"@@@",
"@@@STEP_LOG_LINE@swarming.summary@ }@@@",
"@@@STEP_LOG_LINE@swarming.summary@ ]@@@",
"@@@STEP_LOG_LINE@swarming.summary@}@@@",
"@@@STEP_LOG_END@swarming.summary@@@",
"@@@STEP_LINK@shard #0 isolated out@blah@@@"
]
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[TMP_BASE]/hello_isolated_world_tmp_1"
],
"infra_step": true,
"name": "rmtree remove temp dir"
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -1,31 +1,242 @@
# Copyright 2017 The Chromium Authors. All rights reserved.
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
import json
DEPS = [
'file',
'isolate',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/raw_io',
'recipe_engine/step',
'swarming',
'swarming_client',
]
from recipe_engine.recipe_api import Property
def RunSteps(api):
api.swarming.setup('mydir', swarming_rev='abc123')
api.swarming.create_isolated_gen_json(
'isolate_path', 'isolate_dir', 'linux', 'task', {'myvar': 'myval'},
blacklist=['*.pyc'])
tasks_to_hashes = api.swarming.batcharchive(targets=[
'task-%s' % num for num in range(5)])
tasks = api.swarming.trigger_swarming_tasks(
tasks_to_hashes, dimensions={'os': 'Linux'}, extra_args=['--extra'])
for t in tasks:
api.swarming.collect_swarming_task(t)
PROPERTIES = {
'platforms': Property(default=('win',)),
'show_isolated_out_in_collect_step': Property(default=True),
'show_shards_in_collect_step': Property(default=False),
'gtest_task': Property(default=False),
#'isolated_script_task': Property(default=False),
'merge': Property(default=None),
}
def RunSteps(api, platforms, show_isolated_out_in_collect_step,
show_shards_in_collect_step, gtest_task, merge):
# Checkout swarming client.
api.swarming_client.checkout('master')
# Ensure swarming_client version is fresh enough.
api.swarming.check_client_version(step_test_data=(0, 8, 6))
# Configure isolate & swarming modules (this is optional).
api.isolate.isolate_server = 'https://isolateserver-dev.appspot.com'
api.swarming.swarming_server = 'https://chromium-swarm-dev.appspot.com'
api.swarming.add_default_tag('master:tryserver')
api.swarming.default_expiration = 60*60
api.swarming.default_hard_timeout = 60*60
api.swarming.default_io_timeout = 20*60
api.swarming.default_idempotent = True
api.swarming.default_priority = 30
api.swarming.default_user = 'joe'
api.swarming.set_default_env('TESTING', '1')
api.swarming.verbose = True
api.swarming.set_default_dimension('inexistent', None)
api.swarming.show_shards_in_collect_step = show_shards_in_collect_step
api.swarming.show_isolated_out_in_collect_step = (
show_isolated_out_in_collect_step)
try:
# Testing ReadOnlyDict.__setattr__() coverage.
api.swarming.default_dimensions['invalid'] = 'foo'
except TypeError:
pass
try:
api.swarming.default_env['invalid'] = 'foo'
except TypeError:
pass
# Create a temp dir to put *.isolated files into.
temp_dir = api.path.mkdtemp('hello_isolated_world')
# Prepare a bunch of swarming tasks to run hello_world on multiple platforms.
tasks = []
for platform in platforms:
# Isolate example hello_world.isolate from swarming client repo.
# TODO(vadimsh): Add a thin wrapper around isolate.py to 'isolate' module?
step_result = api.python(
'archive for %s' % platform,
api.swarming_client.path.join('isolate.py'),
[
'archive',
'--isolate', api.swarming_client.path.join(
'example', 'payload', 'hello_world.isolate'),
'--isolated', temp_dir.join('hello_world.isolated'),
'--isolate-server', api.isolate.isolate_server,
'--config-variable', 'OS', platform,
'--verbose',
], stdout=api.raw_io.output_text())
# TODO(vadimsh): Pass result from isolate.py though --output-json option.
isolated_hash = step_result.stdout.split()[0].strip()
# Create a task to run the isolated file on swarming, set OS dimension.
# Also generate code coverage for multi-shard case by triggering multiple
# shards on Linux.
task = api.swarming.task('hello_world', isolated_hash,
task_output_dir=temp_dir.join('task_output_dir'))
task.dimensions['os'] = api.swarming.prefered_os_dimension(platform)
task.shards = 2 if platform == 'linux' else 1
task.tags.add('os:' + platform)
if api.swarming_client.get_script_version('swarming.py') >= (0, 8, 6):
task.cipd_packages = [
('bin', 'super/awesome/pkg', 'git_revision:deadbeef')]
tasks.append(task)
# Launch all tasks.
for task in tasks:
step_result = api.swarming.trigger_task(task)
assert step_result.swarming_task in tasks
# Recipe can do something useful here locally while tasks are
# running on swarming.
api.step('local step', ['echo', 'running something locally'])
# Wait for all tasks to complete.
for task in tasks:
step_result = api.swarming.collect_task(task)
data = step_result.swarming.summary
state = data['shards'][0]['state']
if api.swarming.State.COMPLETED == state:
state_name = api.swarming.State.to_string(state)
assert 'Completed' == state_name, state_name
assert step_result.swarming_task in tasks
# Cleanup.
api.file.rmtree('remove temp dir', temp_dir)
def GenTests(api):
yield (
api.test('test') +
api.properties(revision='abc123')
)
api.test('basic') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.step_data(
'archive for linux',
stdout=api.raw_io.output_text(
'hash_for_linux hello_world.isolated')) +
api.step_data(
'archive for mac',
stdout=api.raw_io.output_text('hash_for_mac hello_world.isolated')) +
api.properties(platforms=('win', 'linux', 'mac')))
yield (
api.test('trybot') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.properties(
rietveld='https://codereview.chromium.org',
issue='123',
patchset='1001'))
yield (
api.test('show_shards_in_collect_step') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.properties(
rietveld='https://codereview.chromium.org',
issue='123',
patchset='1001',
show_shards_in_collect_step=True))
yield (
api.test('show_isolated_out_in_collect_step') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.properties(
rietveld='https://codereview.chromium.org',
issue='123',
patchset='1001',
show_isolated_out_in_collect_step=False))
data = {
'shards': [
{
'': '',
}
]
}
data = {
'shards': [
{
'abandoned_ts': '2014-09-25T01:41:00.123',
'bot_id': 'vm30',
'completed_ts': None,
'created_ts': '2014-09-25T01:41:00.123',
'durations': None,
'exit_codes': [],
'failure': False,
'id': '148aa78d7aa0100',
'internal_failure': False,
'isolated_out': None,
'modified_ts': '2014-09-25 01:42:00',
'name': 'heartbeat-canary-2014-09-25_01:41:55-os=Windows',
'outputs': [],
'started_ts': '2014-09-25T01:42:11.123',
'state': 0x30, # EXPIRED (old)
'try_number': None,
'user': 'unknown',
}
],
}
yield (
api.test('swarming_expired_old') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.step_data('hello_world on Windows-7-SP1', api.swarming.summary(data)))
data['shards'][0]['state'] = 'EXPIRED'
yield (
api.test('swarming_expired_new') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.step_data('hello_world on Windows-7-SP1', api.swarming.summary(data)))
data['shards'][0]['state'] = 0x40 # TIMED_OUT (old)
yield (
api.test('swarming_timeout_old') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.step_data('hello_world on Windows-7-SP1', api.swarming.summary(data)))
data['shards'][0]['state'] = 'TIMED_OUT' # TIMED_OUT (old)
yield (
api.test('swarming_timeout_new') +
api.step_data(
'archive for win',
stdout=api.raw_io.output_text('hash_for_win hello_world.isolated')) +
api.step_data('hello_world on Windows-7-SP1', api.swarming.summary(data)))

View File

@ -0,0 +1,159 @@
#!/usr/bin/env python
# Copyright 2017 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.
import argparse
import json
import logging
import os
import subprocess
import sys
def collect_task(
collect_cmd, merge_script, build_properties, merge_arguments,
task_output_dir, output_json):
"""Collect and merge the results of a task.
This is a relatively thin wrapper script around a `swarming.py collect`
command and a subsequent results merge to ensure that the recipe system
treats them as a single step. The results merge can either be the default
one provided by results_merger or a python script provided as merge_script.
Args:
collect_cmd: The `swarming.py collect` command to run. Should not contain
a --task-output-dir argument.
merge_script: A merge/postprocessing script that should be run to
merge the results. This script will be invoked as
<merge_script> \
[--build-properties <string JSON>] \
[merge arguments...] \
--summary-json <summary json> \
-o <merged json path> \
<shard json>...
where the merge arguments are the contents of merge_arguments_json.
build_properties: A string containing build information to
pass to the merge script in JSON form.
merge_arguments: A string containing additional arguments to pass to
the merge script in JSON form.
task_output_dir: A path to a directory in which swarming will write the
output of the task, including a summary JSON and all of the individual
shard results.
output_json: A path to a JSON file to which the merged results should be
written. The merged results should be in the JSON Results File Format
(https://www.chromium.org/developers/the-json-test-results-format)
and may optionally contain a top level "links" field that may contain a
dict mapping link text to URLs, for a set of links that will be included
in the buildbot output.
Returns:
The exit code of collect_cmd or merge_cmd.
"""
logging.debug('Using task_output_dir: %r', task_output_dir)
if os.path.exists(task_output_dir):
logging.warn('task_output_dir %r already exists!', task_output_dir)
existing_contents = []
try:
for p in os.listdir(task_output_dir):
existing_contents.append(os.path.join(task_output_dir, p))
except (OSError, IOError) as e:
logging.error('Error while examining existing task_output_dir: %s', e)
logging.warn('task_output_dir existing content: %r', existing_contents)
collect_cmd.extend(['--task-output-dir', task_output_dir])
logging.info('collect_cmd: %s', ' '.join(collect_cmd))
collect_result = subprocess.call(collect_cmd)
if collect_result != 0:
logging.warn('collect_cmd had non-zero return code: %s', collect_result)
task_output_dir_contents = []
try:
task_output_dir_contents.extend(
os.path.join(task_output_dir, p)
for p in os.listdir(task_output_dir))
except (OSError, IOError) as e:
logging.error('Error while processing task_output_dir: %s', e)
logging.debug('Contents of task_output_dir: %r', task_output_dir_contents)
if not task_output_dir_contents:
logging.warn(
'No files found in task_output_dir: %r',
task_output_dir)
task_output_subdirs = (
p for p in task_output_dir_contents
if os.path.isdir(p))
shard_json_files = [
os.path.join(subdir, 'output.json')
for subdir in task_output_subdirs]
extant_shard_json_files = [
f for f in shard_json_files if os.path.exists(f)]
if shard_json_files != extant_shard_json_files:
logging.warn(
'Expected output.json file missing: %r\nFound: %r\nExpected: %r\n',
set(shard_json_files) - set(extant_shard_json_files),
extant_shard_json_files,
shard_json_files)
if not extant_shard_json_files:
logging.warn(
'No shard json files found in task_output_dir: %r\nFound %r',
task_output_dir, task_output_dir_contents)
logging.debug('Found shard_json_files: %r', shard_json_files)
summary_json_file = os.path.join(task_output_dir, 'summary.json')
merge_result = 0
merge_cmd = [sys.executable, merge_script]
if build_properties:
merge_cmd.extend(('--build-properties', build_properties))
if os.path.exists(summary_json_file):
merge_cmd.extend(('--summary-json', summary_json_file))
else:
logging.warn('Summary json file missing: %r', summary_json_file)
if merge_arguments:
merge_cmd.extend(json.loads(merge_arguments))
merge_cmd.extend(('-o', output_json))
merge_cmd.extend(extant_shard_json_files)
logging.info('merge_cmd: %s', ' '.join(merge_cmd))
merge_result = subprocess.call(merge_cmd)
if merge_result != 0:
logging.warn('merge_cmd had non-zero return code: %s', merge_result)
if not os.path.exists(output_json):
logging.warn(
'merge_cmd did not create output_json file: %r', output_json)
return collect_result or merge_result
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--build-properties')
parser.add_argument('--merge-additional-args')
parser.add_argument('--merge-script', required=True)
parser.add_argument('--task-output-dir', required=True)
parser.add_argument('-o', '--output-json', required=True)
parser.add_argument('--verbose', action='store_true')
parser.add_argument('collect_cmd', nargs='+')
args = parser.parse_args()
if args.verbose:
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
return collect_task(
args.collect_cmd,
args.merge_script, args.build_properties, args.merge_additional_args,
args.task_output_dir, args.output_json)
if __name__ == '__main__':
sys.exit(main())

View File

@ -0,0 +1,46 @@
#!/usr/bin/env python
# Copyright 2017 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.
import argparse
import json
import shutil
import sys
def noop_merge(output_json, jsons_to_merge):
"""Use the first supplied JSON as the output JSON.
Primarily intended for unsharded tasks.
Args:
output_json: A path to a JSON file to which the results should be written.
jsons_to_merge: A list of paths to JSON files.
"""
if len(jsons_to_merge) > 1:
print >> sys.stderr, (
'Multiple JSONs provided: %s' % ','.join(jsons_to_merge))
return 1
if jsons_to_merge:
shutil.copyfile(jsons_to_merge[0], output_json)
else:
with open(output_json, 'w') as f:
json.dump({}, f)
return 0
def main(raw_args):
parser = argparse.ArgumentParser()
parser.add_argument('--build-properties', help=argparse.SUPPRESS)
parser.add_argument('--summary-json', help=argparse.SUPPRESS)
parser.add_argument('-o', '--output-json', required=True)
parser.add_argument('jsons_to_merge', nargs='*')
args = parser.parse_args(raw_args)
return noop_merge(args.output_json, args.jsons_to_merge)
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))

View File

@ -0,0 +1,278 @@
# 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.
import copy
import json
import sys
# These fields must appear in the test result output
REQUIRED = {
'interrupted',
'num_failures_by_type',
'seconds_since_epoch',
'tests',
}
# These fields are optional, but must have the same value on all shards
OPTIONAL_MATCHING = (
'builder_name',
'build_number',
'chromium_revision',
'has_pretty_patch',
'has_wdiff',
'path_delimiter',
'pixel_tests_enabled',
'random_order_seed',
)
OPTIONAL_IGNORED = (
'layout_tests_dir',
)
# These fields are optional and will be summed together
OPTIONAL_COUNTS = (
'fixable',
'num_flaky',
'num_passes',
'num_regressions',
'skipped',
'skips',
)
class MergeException(Exception):
pass
def merge_test_results(shard_results_list):
""" Merge list of results.
Args:
shard_results_list: list of results to merge. All the results must have the
same format. Supported format are simplified JSON format & Chromium JSON
test results format version 3 (see
https://www.chromium.org/developers/the-json-test-results-format)
Returns:
a dictionary that represent the merged results. Its format follow the same
format of all results in |shard_results_list|.
"""
if not shard_results_list:
return {}
if 'seconds_since_epoch' in shard_results_list[0]:
return _merge_json_test_result_format(shard_results_list)
else:
return _merge_simplified_json_format(shard_results_list)
def _merge_simplified_json_format(shard_results_list):
# This code is specialized to the "simplified" JSON format that used to be
# the standard for recipes.
# These are the only keys we pay attention to in the output JSON.
merged_results = {
'successes': [],
'failures': [],
'valid': True,
}
for result_json in shard_results_list:
successes = result_json.get('successes', [])
failures = result_json.get('failures', [])
valid = result_json.get('valid', True)
if (not isinstance(successes, list) or not isinstance(failures, list) or
not isinstance(valid, bool)):
raise MergeException(
'Unexpected value type in %s' % result_json) # pragma: no cover
merged_results['successes'].extend(successes)
merged_results['failures'].extend(failures)
merged_results['valid'] = merged_results['valid'] and valid
return merged_results
def _merge_json_test_result_format(shard_results_list):
# This code is specialized to the Chromium JSON test results format version 3:
# https://www.chromium.org/developers/the-json-test-results-format
# These are required fields for the JSON test result format version 3.
merged_results = {
'tests': {},
'interrupted': False,
'version': 3,
'seconds_since_epoch': float('inf'),
'num_failures_by_type': {
}
}
# To make sure that we don't mutate existing shard_results_list.
shard_results_list = copy.deepcopy(shard_results_list)
for result_json in shard_results_list:
# TODO(tansell): check whether this deepcopy is actually neccessary.
result_json = copy.deepcopy(result_json)
# Check the version first
version = result_json.pop('version', -1)
if version != 3:
raise MergeException( # pragma: no cover (covered by
# results_merger_unittest).
'Unsupported version %s. Only version 3 is supported' % version)
# Check the results for each shard have the required keys
missing = REQUIRED - set(result_json)
if missing:
raise MergeException( # pragma: no cover (covered by
# results_merger_unittest).
'Invalid json test results (missing %s)' % missing)
# Curry merge_values for this result_json.
merge = lambda key, merge_func: merge_value(
result_json, merged_results, key, merge_func)
# Traverse the result_json's test trie & merged_results's test tries in
# DFS order & add the n to merged['tests'].
merge('tests', merge_tries)
# If any were interrupted, we are interrupted.
merge('interrupted', lambda x,y: x|y)
# Use the earliest seconds_since_epoch value
merge('seconds_since_epoch', min)
# Sum the number of failure types
merge('num_failures_by_type', sum_dicts)
# Optional values must match
for optional_key in OPTIONAL_MATCHING:
if optional_key not in result_json:
continue
if optional_key not in merged_results:
# Set this value to None, then blindly copy over it.
merged_results[optional_key] = None
merge(optional_key, lambda src, dst: src)
else:
merge(optional_key, ensure_match)
# Optional values ignored
for optional_key in OPTIONAL_IGNORED:
if optional_key in result_json:
merged_results[optional_key] = result_json.pop(
# pragma: no cover (covered by
# results_merger_unittest).
optional_key)
# Sum optional value counts
for count_key in OPTIONAL_COUNTS:
if count_key in result_json: # pragma: no cover
# TODO(mcgreevy): add coverage.
merged_results.setdefault(count_key, 0)
merge(count_key, lambda a, b: a+b)
if result_json:
raise MergeException( # pragma: no cover (covered by
# results_merger_unittest).
'Unmergable values %s' % result_json.keys())
return merged_results
def merge_tries(source, dest):
""" Merges test tries.
This is intended for use as a merge_func parameter to merge_value.
Args:
source: A result json test trie.
dest: A json test trie merge destination.
"""
# merge_tries merges source into dest by performing a lock-step depth-first
# traversal of dest and source.
# pending_nodes contains a list of all sub-tries which have been reached but
# need further merging.
# Each element consists of a trie prefix, and a sub-trie from each of dest
# and source which is reached via that prefix.
pending_nodes = [('', dest, source)]
while pending_nodes:
prefix, dest_node, curr_node = pending_nodes.pop()
for k, v in curr_node.iteritems():
if k in dest_node:
if not isinstance(v, dict):
raise MergeException(
"%s:%s: %r not mergable, curr_node: %r\ndest_node: %r" % (
prefix, k, v, curr_node, dest_node))
pending_nodes.append(("%s:%s" % (prefix, k), dest_node[k], v))
else:
dest_node[k] = v
return dest
def ensure_match(source, dest):
""" Returns source if it matches dest.
This is intended for use as a merge_func parameter to merge_value.
Raises:
MergeException if source != dest
"""
if source != dest:
raise MergeException( # pragma: no cover (covered by
# results_merger_unittest).
"Values don't match: %s, %s" % (source, dest))
return source
def sum_dicts(source, dest):
""" Adds values from source to corresponding values in dest.
This is intended for use as a merge_func parameter to merge_value.
"""
for k, v in source.iteritems():
dest.setdefault(k, 0)
dest[k] += v
return dest
def merge_value(source, dest, key, merge_func):
""" Merges a value from source to dest.
The value is deleted from source.
Args:
source: A dictionary from which to pull a value, identified by key.
dest: The dictionary into to which the value is to be merged.
key: The key which identifies the value to be merged.
merge_func(src, dst): A function which merges its src into dst,
and returns the result. May modify dst. May raise a MergeException.
Raises:
MergeException if the values can not be merged.
"""
try:
dest[key] = merge_func(source[key], dest[key])
except MergeException as e:
e.message = "MergeFailure for %s\n%s" % (key, e.message)
e.args = tuple([e.message] + list(e.args[1:]))
raise
del source[key]
def main(files):
if len(files) < 2:
sys.stderr.write("Not enough JSON files to merge.\n")
return 1
sys.stderr.write('Starting with %s\n' % files[0])
result = json.load(open(files[0]))
for f in files[1:]:
sys.stderr.write('Merging %s\n' % f)
result = merge_test_results([result, json.load(open(f))])
print json.dumps(result)
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))

View File

@ -0,0 +1,198 @@
#!/usr/bin/env python
# Copyright 2017 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.
import argparse
import json
import os
import shutil
import sys
import tempfile
import traceback
from common import gtest_utils
from slave import annotation_utils
from slave import slave_utils
MISSING_SHARDS_MSG = r"""Missing results from the following shard(s): %s
This can happen in following cases:
* Test failed to start (missing *.dll/*.so dependency for example)
* Test crashed or hung
* Task expired because there are not enough bots available and are all used
* Swarming service experienced problems
Please examine logs to figure out what happened.
"""
def emit_warning(title, log=None):
print '@@@STEP_WARNINGS@@@'
print title
if log:
slave_utils.WriteLogLines(title, log.split('\n'))
def merge_shard_results(summary_json, jsons_to_merge):
"""Reads JSON test output from all shards and combines them into one.
Returns dict with merged test output on success or None on failure. Emits
annotations.
"""
# summary.json is produced by swarming.py itself. We are mostly interested
# in the number of shards.
try:
with open(summary_json) as f:
summary = json.load(f)
except (IOError, ValueError):
emit_warning(
'summary.json is missing or can not be read',
'Something is seriously wrong with swarming_client/ or the bot.')
return None
# Merge all JSON files together. Keep track of missing shards.
merged = {
'all_tests': set(),
'disabled_tests': set(),
'global_tags': set(),
'missing_shards': [],
'per_iteration_data': [],
'swarming_summary': summary,
}
for index, result in enumerate(summary['shards']):
if result is not None:
# Author note: this code path doesn't trigger convert_to_old_format() in
# client/swarming.py, which means the state enum is saved in its string
# name form, not in the number form.
state = result.get('state')
if state == u'BOT_DIED':
emit_warning('Shard #%d had a Swarming internal failure' % index)
elif state == u'EXPIRED':
emit_warning('There wasn\'t enough capacity to run your test')
elif state == u'TIMED_OUT':
emit_warning(
'Test runtime exceeded allocated time',
'Either it ran for too long (hard timeout) or it didn\'t produce '
'I/O for an extended period of time (I/O timeout)')
elif state == u'COMPLETED':
json_data, err_msg = load_shard_json(index, jsons_to_merge)
if json_data:
# Set-like fields.
for key in ('all_tests', 'disabled_tests', 'global_tags'):
merged[key].update(json_data.get(key), [])
# 'per_iteration_data' is a list of dicts. Dicts should be merged
# together, not the 'per_iteration_data' list itself.
merged['per_iteration_data'] = merge_list_of_dicts(
merged['per_iteration_data'],
json_data.get('per_iteration_data', []))
continue
else:
emit_warning('Task ran but no result was found: %s' % err_msg)
else:
emit_warning('Invalid Swarming task state: %s' % state)
merged['missing_shards'].append(index)
# If some shards are missing, make it known. Continue parsing anyway. Step
# should be red anyway, since swarming.py return non-zero exit code in that
# case.
if merged['missing_shards']:
as_str = ', '.join(map(str, merged['missing_shards']))
emit_warning(
'some shards did not complete: %s' % as_str,
MISSING_SHARDS_MSG % as_str)
# Not all tests run, combined JSON summary can not be trusted.
merged['global_tags'].add('UNRELIABLE_RESULTS')
# Convert to jsonish dict.
for key in ('all_tests', 'disabled_tests', 'global_tags'):
merged[key] = sorted(merged[key])
return merged
OUTPUT_JSON_SIZE_LIMIT = 100 * 1024 * 1024 # 100 MB
def load_shard_json(index, jsons_to_merge):
"""Reads JSON output of the specified shard.
Args:
output_dir: The directory in which to look for the JSON output to load.
index: The index of the shard to load data for.
Returns: A tuple containing:
* The contents of path, deserialized into a python object.
* An error string.
(exactly one of the tuple elements will be non-None).
"""
# 'output.json' is set in swarming/api.py, gtest_task method.
matching_json_files = [
j for j in jsons_to_merge
if (os.path.basename(j) == 'output.json'
and os.path.basename(os.path.dirname(j)) == str(index))]
if not matching_json_files:
print >> sys.stderr, 'shard %s test output missing' % index
return (None, 'shard %s test output was missing' % index)
elif len(matching_json_files) > 1:
print >> sys.stderr, 'duplicate test output for shard %s' % index
return (None, 'shard %s test output was duplicated' % index)
path = matching_json_files[0]
try:
filesize = os.stat(path).st_size
if filesize > OUTPUT_JSON_SIZE_LIMIT:
print >> sys.stderr, 'output.json is %d bytes. Max size is %d' % (
filesize, OUTPUT_JSON_SIZE_LIMIT)
return (None, 'shard %s test output exceeded the size limit' % index)
with open(path) as f:
return (json.load(f), None)
except (IOError, ValueError, OSError) as e:
print >> sys.stderr, 'Missing or invalid gtest JSON file: %s' % path
print >> sys.stderr, '%s: %s' % (type(e).__name__, e)
return (None, 'shard %s test output was missing or invalid' % index)
def merge_list_of_dicts(left, right):
"""Merges dicts left[0] with right[0], left[1] with right[1], etc."""
output = []
for i in xrange(max(len(left), len(right))):
left_dict = left[i] if i < len(left) else {}
right_dict = right[i] if i < len(right) else {}
merged_dict = left_dict.copy()
merged_dict.update(right_dict)
output.append(merged_dict)
return output
def standard_gtest_merge(
output_json, summary_json, jsons_to_merge):
output = merge_shard_results(summary_json, jsons_to_merge)
with open(output_json, 'wb') as f:
json.dump(output, f)
return 0
def main(raw_args):
parser = argparse.ArgumentParser()
parser.add_argument('--build-properties')
parser.add_argument('--summary-json')
parser.add_argument('-o', '--output-json', required=True)
parser.add_argument('jsons_to_merge', nargs='*')
args = parser.parse_args(raw_args)
return standard_gtest_merge(
args.output_json, args.summary_json, args.jsons_to_merge)
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))

View File

@ -0,0 +1,45 @@
#!/usr/bin/env python
# Copyright 2017 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.
import argparse
import json
import sys
import results_merger
def StandardIsolatedScriptMerge(output_json, jsons_to_merge):
"""Merge the contents of one or more results JSONs into a single JSON.
Args:
output_json: A path to a JSON file to which the merged results should be
written.
jsons_to_merge: A list of paths to JSON files that should be merged.
"""
shard_results_list = []
for j in jsons_to_merge:
with open(j) as f:
shard_results_list.append(json.load(f))
merged_results = results_merger.merge_test_results(shard_results_list)
with open(output_json, 'w') as f:
json.dump(merged_results, f)
return 0
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-o', '--output-json', required=True)
parser.add_argument('--build-properties', help=argparse.SUPPRESS)
parser.add_argument('--summary-json', help=argparse.SUPPRESS)
parser.add_argument('jsons_to_merge', nargs='*')
args = parser.parse_args()
return StandardIsolatedScriptMerge(args.output_json, args.jsons_to_merge)
if __name__ == '__main__':
sys.exit(main())

View File

@ -0,0 +1,46 @@
# Copyright 2017 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
class State(object):
"""Copied from appengine/swarming/server/task_result.py.
KEEP IN SYNC.
Used to parse the 'state' value in task result.
"""
RUNNING = 0x10 # 16
PENDING = 0x20 # 32
EXPIRED = 0x30 # 48
TIMED_OUT = 0x40 # 64
BOT_DIED = 0x50 # 80
CANCELED = 0x60 # 96
COMPLETED = 0x70 # 112
STATES = (
RUNNING, PENDING, EXPIRED, TIMED_OUT, BOT_DIED, CANCELED, COMPLETED)
STATES_RUNNING = (RUNNING, PENDING)
STATES_NOT_RUNNING = (EXPIRED, TIMED_OUT, BOT_DIED, CANCELED, COMPLETED)
STATES_DONE = (TIMED_OUT, COMPLETED)
STATES_ABANDONED = (EXPIRED, BOT_DIED, CANCELED)
_NAMES = {
RUNNING: 'Running',
PENDING: 'Pending',
EXPIRED: 'Expired',
TIMED_OUT: 'Execution timed out',
BOT_DIED: 'Bot died',
CANCELED: 'User canceled',
COMPLETED: 'Completed',
}
@classmethod
def to_string(cls, state):
"""Returns a user-readable string representing a State."""
return cls._NAMES[state]

View File

@ -0,0 +1,56 @@
# Copyright 2017 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
from recipe_engine import recipe_test_api
import state
class SwarmingTestApi(recipe_test_api.RecipeTestApi):
@recipe_test_api.placeholder_step_data
def summary(self, data):
return self.m.json.output(data)
def canned_summary_output(
self, shards=1, failure=False, internal_failure=False):
return self.summary({
'shards': [
{
'abandoned_ts': None,
'bot_id': 'vm30',
'completed_ts': '2014-09-25T01:42:00.123',
'created_ts': '2014-09-25T01:41:00.123',
'durations': [5.7, 31.5],
'exit_codes': [0, 0],
'failure': failure,
'id': '148aa78d7aa%02d00' % i,
'internal_failure': internal_failure,
'isolated_out': {
'isolated': 'abc123',
'isolatedserver': 'https://isolateserver.appspot.com',
'namespace': 'default-gzip',
'view_url': 'blah',
},
'modified_ts': '2014-09-25 01:42:00',
'name': 'heartbeat-canary-2014-09-25_01:41:55-os=Windows',
'outputs': [
'Heart beat succeeded on win32.\n',
'Foo',
],
'outputs_ref': {
'view_url': 'blah',
},
'started_ts': '2014-09-25T01:42:11.123',
'state': state.State.COMPLETED,
'try_number': 1,
'user': 'unknown',
} for i in xrange(shards)
],
})

View File

@ -0,0 +1,2 @@
martiniss@chromium.org
vadimsh@chromium.org

View File

@ -0,0 +1,18 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
DEPS = [
'depot_tools/git',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/raw_io',
'recipe_engine/step',
]

View File

@ -0,0 +1,135 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
from recipe_engine import recipe_api
class SwarmingClientApi(recipe_api.RecipeApi):
"""Code that both isolate and swarming recipe modules depend on.
Both swarming and isolate scripts live in a single repository called
'swarming client'. This module include common functionality like finding
existing swarming client checkout, fetching a new one, getting version of
a swarming script, etc.
"""
def __init__(self, **kwargs):
super(SwarmingClientApi, self).__init__(**kwargs)
self._client_path = None
self._script_version = {}
def checkout(self, revision=None, curl_trace_file=None, can_fail_build=True):
"""Returns a step to checkout swarming client into a separate directory.
Ordinarily swarming client is checked out via Chromium DEPS into
src/tools/swarming_client. This step configures recipe module to use
a separate checkout.
If |revision| is None, this requires the build property
'parent_got_swarming_client_revision' to be present, and raises an exception
otherwise. Fail-fast behavior is used because if machines silently fell back
to checking out the entire workspace, that would cause dramatic increases
in cycle time if a misconfiguration were made and it were no longer possible
for the bot to check out swarming_client separately.
"""
# If the following line throws an exception, it either means the
# bot is misconfigured, or, if you're testing locally, that you
# need to pass in some recent legal revision for this property.
if revision is None:
revision = self.m.properties['parent_got_swarming_client_revision']
self._client_path = self.m.path['start_dir'].join('swarming.client')
self.m.git.checkout(
url='https://chromium.googlesource.com/external/swarming.client.git',
ref=revision,
dir_path=self._client_path,
step_suffix='swarming_client',
curl_trace_file=curl_trace_file,
can_fail_build=can_fail_build)
@property
def path(self):
"""Returns path to a swarming client checkout.
It's subdirectory of Chromium src/ checkout or a separate directory if
'checkout_swarming_client' step was used.
"""
if self._client_path:
return self._client_path
# Default is swarming client path in chromium src/ checkout.
# TODO(vadimsh): This line assumes the recipe is working with
# Chromium checkout.
return self.m.path['checkout'].join('tools', 'swarming_client')
def query_script_version(self, script, step_test_data=None):
"""Yields a step to query a swarming script for its version.
Version tuple is later accessible via 'get_script_version' method. If
|step_test_data| is given, it is a tuple with version to use in expectation
tests by default.
Does nothing if script's version is already known.
"""
# Convert |step_test_data| from tuple of ints back to a version string.
if step_test_data:
assert isinstance(step_test_data, tuple)
assert all(isinstance(x, int) for x in step_test_data)
as_text = '.'.join(map(str, step_test_data))
step_test_data_cb = lambda: self.m.raw_io.test_api.stream_output(as_text)
else:
step_test_data_cb = None
if script not in self._script_version:
try:
self.m.python(
name='%s --version' % script,
script=self.path.join(script),
args=['--version'],
stdout=self.m.raw_io.output_text(),
step_test_data=step_test_data_cb)
finally:
step_result = self.m.step.active_result
version = step_result.stdout.strip()
step_result.presentation.step_text = version
self._script_version[script] = tuple(map(int, version.split('.')))
return step_result
def get_script_version(self, script):
"""Returns a version of some swarming script as a tuple (Major, Minor, Rev).
It should have been queried by 'query_script_version' step before. Raises
AssertionError if it wasn't.
"""
assert script in self._script_version, script
return self._script_version[script]
def ensure_script_version(self, script, min_version, step_test_data=None):
"""Yields steps to ensure a script version is not older than |min_version|.
Will abort recipe execution if it is.
"""
step_result = self.query_script_version(
script, step_test_data=step_test_data or min_version)
version = self.get_script_version(script)
if version < min_version:
expecting = '.'.join(map(str, min_version))
got = '.'.join(map(str, version))
abort_reason = 'Expecting at least v%s, got v%s' % (expecting, got)
# TODO(martiniss) remove once recipe 1.5 migration done
step_result = self.m.python.inline(
'%s is too old' % script,
'import sys; sys.exit(1)',
add_python_log=False)
# TODO(martiniss) get rid of this bare string.
step_result.presentation.status = self.m.step.FAILURE
step_result.presentation.step_text = abort_reason
raise self.m.step.StepFailure(abort_reason)

View File

@ -0,0 +1,136 @@
[
{
"cmd": [],
"name": "client path"
},
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
"--path",
"[START_DIR]/swarming.client",
"--url",
"https://chromium.googlesource.com/external/swarming.client.git"
],
"name": "git setup (swarming_client)"
},
{
"cmd": [
"git",
"retry",
"fetch",
"origin",
"sample_sha"
],
"cwd": "[START_DIR]/swarming.client",
"env": {
"PATH": "RECIPE_PACKAGE_REPO[depot_tools]:%(PATH)s"
},
"infra_step": true,
"name": "git fetch (swarming_client)"
},
{
"cmd": [
"git",
"checkout",
"-f",
"FETCH_HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git checkout (swarming_client)"
},
{
"cmd": [
"git",
"rev-parse",
"HEAD"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "read revision",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@"
]
},
{
"cmd": [
"git",
"clean",
"-f",
"-d",
"-x"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "git clean (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"sync"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule sync (swarming_client)"
},
{
"cmd": [
"git",
"submodule",
"update",
"--init",
"--recursive"
],
"cwd": "[START_DIR]/swarming.client",
"infra_step": true,
"name": "submodule update (swarming_client)"
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/swarming.py",
"--version"
],
"name": "swarming.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.4.4@@@"
]
},
{
"cmd": [
"python",
"-u",
"[START_DIR]/swarming.client/isolate.py",
"--version"
],
"name": "isolate.py --version",
"stdout": "/path/to/tmp/",
"~followup_annotations": [
"@@@STEP_TEXT@0.3.1@@@"
]
},
{
"cmd": [
"python",
"-u",
"import sys; sys.exit(1)"
],
"name": "swarming.py is too old",
"~followup_annotations": [
"@@@STEP_TEXT@Expecting at least v20.0.0, got v0.4.4@@@",
"@@@STEP_FAILURE@@@"
]
},
{
"name": "$result",
"reason": "Expecting at least v20.0.0, got v0.4.4",
"recipe_result": null,
"status_code": 1
}
]

View File

@ -0,0 +1,46 @@
# Copyright 2014 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.
# TODO(borenet): This module was copied from build.git and heavily modified to
# remove dependencies on other modules in build.git. It belongs in a different
# repo. Remove this once it has been moved.
DEPS = [
'recipe_engine/properties',
'recipe_engine/raw_io',
'recipe_engine/step',
'swarming_client',
]
def RunSteps(api):
# Code coverage for these methods.
api.step('client path', [])
api.step.active_result.step_text = api.swarming_client.path
api.swarming_client.checkout()
#api.swarming_client.checkout('master')
api.swarming_client.query_script_version('swarming.py')
api.swarming_client.ensure_script_version('swarming.py', (0, 4, 4))
# Coverage for |step_test_data| argument.
api.swarming_client.query_script_version(
'isolate.py', step_test_data=(0, 3, 1))
# 'master' had swarming.py at v0.4.4 at the moment of writing this example.
assert api.swarming_client.get_script_version('swarming.py') >= (0, 4, 4)
# Coverage for 'fail' path of ensure_script_version.
api.swarming_client.ensure_script_version('swarming.py', (20, 0, 0))
def GenTests(api):
yield (
api.test('basic') +
api.properties(parent_got_swarming_client_revision='sample_sha') +
api.step_data(
'swarming.py --version',
stdout=api.raw_io.output_text('0.4.4'))
)

View File

@ -164,7 +164,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/flutter/src/out/android_release"
],

View File

@ -168,7 +168,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/flutter/src/out/android_release"
],

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-CT_BENCH_10k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-CT_BENCH_10k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-CT_BENCH_10k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-CT_BENCH_10k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-CT_BENCH_10k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1425,17 +1421,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1575,17 +1567,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1725,17 +1713,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1875,17 +1859,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_100k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_100k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_100k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_100k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_100k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1356,17 +1352,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1437,17 +1429,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1518,17 +1506,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1599,17 +1583,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1356,17 +1352,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1437,17 +1429,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1518,17 +1506,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1599,17 +1583,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -398,7 +398,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -427,7 +427,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -441,7 +441,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave1"
],
@ -532,7 +532,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave2"
],
@ -623,7 +623,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave3"
],
@ -714,7 +714,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave4"
],
@ -805,7 +805,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_10k_SKPs/slave5"
],
@ -907,7 +907,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1299,17 +1299,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1380,17 +1376,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1461,17 +1453,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1542,17 +1530,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1623,17 +1607,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1356,17 +1352,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1437,17 +1429,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1518,17 +1506,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1599,17 +1583,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1360,17 +1356,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1441,17 +1433,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1526,17 +1514,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1607,17 +1591,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1356,17 +1352,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1437,17 +1429,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1522,17 +1510,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1603,17 +1587,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-dm-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_10k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_10k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_10k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_10k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_10k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1290,17 +1290,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1440,17 +1436,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1590,17 +1582,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1740,17 +1728,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1890,17 +1874,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_1k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_1k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_1k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_1k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_1k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1290,17 +1290,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1440,17 +1436,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1590,17 +1582,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1740,17 +1728,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1890,17 +1874,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-nanobench-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_100k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_100k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_100k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_100k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_100k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1356,17 +1352,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1437,17 +1429,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1518,17 +1506,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1599,17 +1583,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -394,7 +394,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -423,7 +423,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -437,7 +437,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave1"
],
@ -528,7 +528,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave2"
],
@ -619,7 +619,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave3"
],
@ -710,7 +710,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave4"
],
@ -801,7 +801,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave5"
],
@ -903,7 +903,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1275,17 +1275,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1356,17 +1352,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1437,17 +1429,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1518,17 +1506,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1599,17 +1583,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -398,7 +398,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/luci-go"
],
@ -427,7 +427,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[START_DIR]/swarming_temp_dir"
],
@ -441,7 +441,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave1"
],
@ -532,7 +532,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave2"
],
@ -623,7 +623,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave3"
],
@ -714,7 +714,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave4"
],
@ -805,7 +805,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_/_B_WORK]/skps/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_10k_SKPs/slave5"
],
@ -907,7 +907,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::isolate]/resources/isolate.py",
"RECIPE_MODULE[skia::isolate]/resources/isolate.py",
"[START_DIR]/swarming.client",
"batcharchive",
"--dump-json",
@ -1309,17 +1309,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-1",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1390,17 +1386,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-2",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1471,17 +1463,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-3",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1552,17 +1540,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-4",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",
@ -1633,17 +1617,13 @@
"cmd": [
"python",
"-u",
"RECIPE_PACKAGE_REPO[build]/scripts/tools/runit.py",
"--show-path",
"--",
"python",
"RECIPE_MODULE[build::swarming]/resources/collect_task.py",
"RECIPE_MODULE[skia::swarming]/resources/collect_task.py",
"-o",
"/path/to/tmp/json",
"--task-output-dir",
"[START_DIR]/swarming_temp_dir/outputs/ct-get_images_from_skps-5",
"--merge-script",
"RECIPE_MODULE[build::swarming]/resources/noop_merge.py",
"RECIPE_MODULE[skia::swarming]/resources/noop_merge.py",
"--merge-additional-args",
"[]",
"--",

View File

@ -7,8 +7,8 @@ import math
DEPS = [
'build/file',
'depot_tools/gsutil',
'file',
'recipe_engine/context',
'recipe_engine/json',
'recipe_engine/path',
@ -19,7 +19,7 @@ DEPS = [
'ct',
'flavor',
'run',
'swarming',
'skia_swarming',
'vars',
]
@ -83,7 +83,7 @@ def RunSteps(api):
api.run.copy_build_products(
api.flavor.out_dir,
isolate_dir)
api.swarming.setup(
api.skia_swarming.setup(
infrabots_dir.join('tools', 'luci-go'),
swarming_rev='')
@ -103,7 +103,7 @@ def RunSteps(api):
download_skps_link)
# Delete swarming_temp_dir to ensure it starts from a clean slate.
api.run.rmtree(api.swarming.swarming_temp_dir)
api.run.rmtree(api.skia_swarming.swarming_temp_dir)
num_per_slave = api.properties.get(
'num_per_slave',
@ -166,7 +166,7 @@ def RunSteps(api):
'CONFIGURATION': api.vars.configuration,
'BUILDER': buildername,
}
api.swarming.create_isolated_gen_json(
api.skia_swarming.create_isolated_gen_json(
isolate_path, isolate_dir, 'linux', 'ct-%s-%s' % (skia_tool, slave_num),
extra_variables, blacklist=blacklist_skps)
@ -186,7 +186,7 @@ def RunSteps(api):
tasks_to_swarm_hashes = []
for slave_start_num in xrange(1, ct_num_slaves+1, max_slaves_to_batcharchive):
m = min(max_slaves_to_batcharchive, ct_num_slaves)
batcharchive_output = api.swarming.batcharchive(
batcharchive_output = api.skia_swarming.batcharchive(
targets=['ct-' + skia_tool + '-%s' % num for num in range(
slave_start_num, slave_start_num + m)])
tasks_to_swarm_hashes.extend(batcharchive_output)
@ -197,7 +197,7 @@ def RunSteps(api):
dimensions={'os': 'Ubuntu-14.04', 'cpu': 'x86-64', 'pool': 'Chrome'}
if 'GPU' in buildername:
dimensions['gpu'] = '10de:104a'
tasks = api.swarming.trigger_swarming_tasks(
tasks = api.skia_swarming.trigger_swarming_tasks(
tasks_to_swarm_hashes, dimensions=dimensions, io_timeout=40*60)
# Now collect all tasks.
@ -205,10 +205,10 @@ def RunSteps(api):
failed_tasks = []
for task in tasks:
try:
api.swarming.collect_swarming_task(task)
api.skia_swarming.collect_swarming_task(task)
if skia_tool == 'nanobench':
output_dir = api.swarming.tasks_output_dir.join(
output_dir = api.skia_swarming.tasks_output_dir.join(
task.title).join('0')
utc = api.time.utcnow()
gs_dest_dir = 'ct/%s/%d/%02d/%02d/%02d/' % (

View File

@ -69,7 +69,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/data"
],

View File

@ -69,7 +69,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release/data"
],

View File

@ -69,7 +69,7 @@
"cmd": [
"python",
"-u",
"RECIPE_MODULE[build::file]/resources/fileutil.py",
"RECIPE_MODULE[skia::file]/resources/fileutil.py",
"rmtree",
"[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Ubuntu16-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release/data"
],

Some files were not shown because too many files have changed in this diff Show More