aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra/bots/recipe_modules/isolate/examples
diff options
context:
space:
mode:
authorGravatar Robert Iannucci <iannucci@google.com>2017-06-01 14:59:27 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-02 11:40:36 +0000
commitdec4c0b29843d5de7d06c3998d919b3e3abecdf2 (patch)
tree1ac4f6d597681a783d145b91ffb9a48eded68f9b /infra/bots/recipe_modules/isolate/examples
parentd5bee5d50c60eedda697ac305658d3817125e147 (diff)
Rename example.py -> examples/full.py for all modules
`example.py` is going away; examples folder can now hold multiple example recipes. R=borenet@google.com Bug: skia: Change-Id: Ib28910987342217bc52040d4d966444174ce27a3 Reviewed-on: https://skia-review.googlesource.com/18432 Commit-Queue: Eric Boren <borenet@google.com> Reviewed-by: Eric Boren <borenet@google.com>
Diffstat (limited to 'infra/bots/recipe_modules/isolate/examples')
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/always-use-exparchive.json208
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/basic.json151
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/discover.json124
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-bmiss.json187
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-emiss.json187
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch.json179
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-miss.json159
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi-miss.json188
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi.json180
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/exparchive.json152
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/extra.json152
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/missing.json159
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.expected/none.json122
-rw-r--r--infra/bots/recipe_modules/isolate/examples/full.py147
14 files changed, 2295 insertions, 0 deletions
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/always-use-exparchive.json b/infra/bots/recipe_modules/isolate/examples/full.expected/always-use-exparchive.json
new file mode 100644
index 0000000000..1f5ffa13e5
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/always-use-exparchive.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/basic.json b/infra/bots/recipe_modules/isolate/examples/full.expected/basic.json
new file mode 100644
index 0000000000..9ef2ef3e1f
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/basic.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/discover.json b/infra/bots/recipe_modules/isolate/examples/full.expected/discover.json
new file mode 100644
index 0000000000..d6ab964321
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/discover.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-bmiss.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-bmiss.json
new file mode 100644
index 0000000000..75d1af4b5f
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-bmiss.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-emiss.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-emiss.json
new file mode 100644
index 0000000000..142ebd592a
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch-emiss.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch.json
new file mode 100644
index 0000000000..e2d26d6f45
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-batch.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-miss.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-miss.json
new file mode 100644
index 0000000000..06eceaa787
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-miss.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi-miss.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi-miss.json
new file mode 100644
index 0000000000..02131c3553
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi-miss.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi.json
new file mode 100644
index 0000000000..871423dbd7
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive-multi.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive.json b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive.json
new file mode 100644
index 0000000000..33fadc15dd
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/exparchive.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/extra.json b/infra/bots/recipe_modules/isolate/examples/full.expected/extra.json
new file mode 100644
index 0000000000..3f1987d987
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/extra.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/missing.json b/infra/bots/recipe_modules/isolate/examples/full.expected/missing.json
new file mode 100644
index 0000000000..90e1e95dd7
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/missing.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.expected/none.json b/infra/bots/recipe_modules/isolate/examples/full.expected/none.json
new file mode 100644
index 0000000000..335b6227d1
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.expected/none.json
@@ -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>"
+ },
+ "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
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/isolate/examples/full.py b/infra/bots/recipe_modules/isolate/examples/full.py
new file mode 100644
index 0000000000..7dfa009f65
--- /dev/null
+++ b/infra/bots/recipe_modules/isolate/examples/full.py
@@ -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)