multi_roller: Initial commit
The multi_roller recipe launches and synchronizes multiple rollers.
The rollers to launch is specified via the input properties. The recipe will use the subbuild recipe_module to launch the rollers. Once each roller has created a roll CL, it will also output a property that exposes the gerrit host and change-id of that roll CL. The rollers will then wait for a Rolls-Synced label. Multi_roller watches over all the rollers and only sets the Rolls-Synced label on each roll CL once all of the roll CLs pass presubmit checks.
Bug: b/324426822
Change-Id: I1b37ce6bf010cf7e0b6aae2181a3fe13370330cb
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/194150
Reviewed-by: Rob Mohr <mohrr@google.com>
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Samuel Liu <slliu@google.com>
Pigweed-Auto-Submit: Samuel Liu <slliu@google.com>
diff --git a/recipes/multi_roller.expected/check for presubmit-verified timeout.json b/recipes/multi_roller.expected/check for presubmit-verified timeout.json
new file mode 100644
index 0000000..bfab65a
--- /dev/null
+++ b/recipes/multi_roller.expected/check for presubmit-verified timeout.json
@@ -0,0 +1,438 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Got all change ids: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0).got changes for 1000",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_LINK@change_host_1:11111111@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Waiting on Presubmit-Verified for: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
+ "@@@STEP_LOG_END@cipd.ensure@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0o777",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
+ "-ensure-file",
+ "infra/tools/luci/gerrit/${platform} version:pinned-version",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"NEW\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Check CL 11111111",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_SUMMARY_TEXT@Presubmit-Verified not set@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\", \"input\": {\"labels\": {\"Rolls-Synced\": -1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": -1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.expected/get change id timeout.json b/recipes/multi_roller.expected/get change id timeout.json
new file mode 100644
index 0000000..a54c208
--- /dev/null
+++ b/recipes/multi_roller.expected/get change id timeout.json
@@ -0,0 +1,374 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (1)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (1).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (2)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (2).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (3)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (3).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Failed to retrieve some change ids",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_FAILURE@@@"
+ ]
+ },
+ {
+ "failure": {
+ "failure": {},
+ "humanReason": "Failed to retrieve some change ids"
+ },
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.expected/presubmit fails.json b/recipes/multi_roller.expected/presubmit fails.json
new file mode 100644
index 0000000..92a8843
--- /dev/null
+++ b/recipes/multi_roller.expected/presubmit fails.json
@@ -0,0 +1,440 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Got all change ids: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0).got changes for 1000",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_LINK@change_host_1:11111111@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Waiting on Presubmit-Verified for: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
+ "@@@STEP_LOG_END@cipd.ensure@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0o777",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
+ "-ensure-file",
+ "infra/tools/luci/gerrit/${platform} version:pinned-version",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"rejected\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"NEW\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Check CL 11111111",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_SUMMARY_TEXT@Presubmit checks failed@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\", \"input\": {\"labels\": {\"Rolls-Synced\": -1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": -1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.expected/presubmit-verified label does not exist.json b/recipes/multi_roller.expected/presubmit-verified label does not exist.json
new file mode 100644
index 0000000..d0bebfc
--- /dev/null
+++ b/recipes/multi_roller.expected/presubmit-verified label does not exist.json
@@ -0,0 +1,436 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Got all change ids: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0).got changes for 1000",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_LINK@change_host_1:11111111@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Waiting on Presubmit-Verified for: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
+ "@@@STEP_LOG_END@cipd.ensure@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0o777",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
+ "-ensure-file",
+ "infra/tools/luci/gerrit/${platform} version:pinned-version",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {},@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"NEW\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Check CL 11111111",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_SUMMARY_TEXT@f{PRESUBMIT_VERIFIED_LABEL} does not exist@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\", \"input\": {\"labels\": {\"Rolls-Synced\": -1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": -1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.expected/roll CL manually abandoned.json b/recipes/multi_roller.expected/roll CL manually abandoned.json
new file mode 100644
index 0000000..80a73ea
--- /dev/null
+++ b/recipes/multi_roller.expected/roll CL manually abandoned.json
@@ -0,0 +1,439 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Got all change ids: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0).got changes for 1000",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_LINK@change_host_1:11111111@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Waiting on Presubmit-Verified for: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
+ "@@@STEP_LOG_END@cipd.ensure@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0o777",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
+ "-ensure-file",
+ "infra/tools/luci/gerrit/${platform} version:pinned-version",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"approved\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"ABANDONED\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Roll CL 11111111 was manually abandoned.",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\", \"input\": {\"labels\": {\"Rolls-Synced\": -1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": -1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.expected/roll CL manually merged.json b/recipes/multi_roller.expected/roll CL manually merged.json
new file mode 100644
index 0000000..0439642
--- /dev/null
+++ b/recipes/multi_roller.expected/roll CL manually merged.json
@@ -0,0 +1,439 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Got all change ids: [GerritChange(host='change_host_1', change_id='11111111')]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0).got changes for 1000",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_LINK@change_host_1:11111111@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@All roll CLs have Presubmit-Verified@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
+ "@@@STEP_LOG_END@cipd.ensure@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0o777",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
+ "-ensure-file",
+ "infra/tools/luci/gerrit/${platform} version:pinned-version",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"approved\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"MERGED\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Roll CL 11111111 was manually merged.",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\", \"input\": {\"labels\": {\"Rolls-Synced\": 1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": 1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.expected/success with two sub-rollers.json b/recipes/multi_roller.expected/success with two sub-rollers.json
new file mode 100644
index 0000000..92ce474
--- /dev/null
+++ b/recipes/multi_roller.expected/success with two sub-rollers.json
@@ -0,0 +1,802 @@
+[
+ {
+ "cmd": [],
+ "name": "Launching Rollers",
+ "~followup_annotations": [
+ "@@@STEP_LINK@roller-1@https://ci.chromium.org/b/1000@@@",
+ "@@@STEP_LINK@roller-2@https://ci.chromium.org/b/1001@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-1\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"ci\", \"builder\": \"roller-2\", \"project\": \"fuchsia\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gitilesCommit\": {\"host\": \"fuchsia.googlesource.com\", \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\", \"project\": \"fuchsia\", \"ref\": \"refs/heads/main\"}, \"properties\": {\"override_auto_roller_options\": {\"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"}}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"hide-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"skip-retry-in-gerrit\", \"value\": \"subbuild\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-2\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1001\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"roller-2\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"experiments\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"luci.buildbucket.parent_tracking\": false@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"host\": \"fuchsia.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"override_auto_roller_options\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"push_options\": \"topic=pigweed-s5400-roller-8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"hide-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"parent_buildbucket_id\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"8945511751514863184\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"skip-retry-in-gerrit\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"subbuild\"@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@",
+ "@@@STEP_LINK@1001@https://cr-buildbucket.appspot.com/build/1001@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (0).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1000\"}}, {\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1001\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-1\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1000\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1000\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_1\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-2\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1001\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1001\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1000\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ },@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1001\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1000@https://cr-buildbucket.appspot.com/build/1000@@@",
+ "@@@STEP_LINK@1001@https://cr-buildbucket.appspot.com/build/1001@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (0).got changes for 1000",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1000@https://ci.chromium.org/ui/b/1000@@@",
+ "@@@STEP_LINK@change_host_1:11111111@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (1)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Got all change ids: [GerritChange(host='change_host_1', change_id='11111111'), GerritChange(host='change_host_2', change_id='22222222')]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Get sub-roller change IDs (1).buildbucket.get_multi",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"id\": \"1001\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"bucket\": \"ci\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": \"roller-2\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createTime\": \"2018-05-25T23:50:17Z\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"createdBy\": \"user:luci-scheduler@appspot.gserviceaccount.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"1001\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"infra\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"backend\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"abc123\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"resultdb\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"invocation\": \"invocations/build:1001\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"priority\": 30@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gitilesCommit\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"chromium.googlesource.com\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"id\": \"2d72510e447ab60a9728aeea2362d8be2cbd7789\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"project\": \"fuchsia\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"ref\": \"refs/heads/main\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"output\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"gerrit_changes\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"change_id\": \"22222222\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"host\": \"change_host_2\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\",@@@",
+ "@@@STEP_LOG_LINE@request@ \"id\": \"1001\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@1001@https://cr-buildbucket.appspot.com/build/1001@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Get sub-roller change IDs (1).got changes for 1001",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LINK@1001@https://ci.chromium.org/ui/b/1001@@@",
+ "@@@STEP_LINK@change_host_2:22222222@https://change_host_2-review.googlesource.com/q/22222222@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@Waiting on Presubmit-Verified for: [GerritChange(host='change_host_1', change_id='11111111'), GerritChange(host='change_host_2', change_id='22222222')]@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "RECIPE_MODULE[fuchsia::gerrit]/resources/cipd.ensure",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.get packages.read ensure file",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@cipd.ensure@infra/tools/luci/gerrit/${platform} version:pinned-version@@@",
+ "@@@STEP_LOG_END@cipd.ensure@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@3@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython3",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0o777",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure package directory",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07",
+ "-ensure-file",
+ "infra/tools/luci/gerrit/${platform} version:pinned-version",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).ensure infra/tools/luci/gerrit/${platform}.install infra/tools/luci/gerrit.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@4@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:pinned-v\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/gerrit/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"approved\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"NEW\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Check CL 11111111",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_SUMMARY_TEXT@Presubmit checks passed@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_2-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"22222222\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 22222222",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"NEW\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"22222222\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_2-review.googlesource.com/q/22222222@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Check CL 22222222",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_SUMMARY_TEXT@Presubmit-Verified not set@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (1)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_SUMMARY_TEXT@All roll CLs have Presubmit-Verified@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "change-detail",
+ "-host",
+ "https://change_host_2-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"22222222\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (1).Get CL details for CL 22222222",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_revision\": \"abc\",@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Presubmit-Verified\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"approved\": {}@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ },@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"NEW\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"22222222\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_2-review.googlesource.com/q/22222222@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Launching Rollers.Wait for Presubmit-Verified for roll CLs (1).Check CL 22222222",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_SUMMARY_TEXT@Presubmit checks passed@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_1-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"11111111\", \"input\": {\"labels\": {\"Rolls-Synced\": 1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 11111111",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"11111111\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": 1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_1-review.googlesource.com/q/11111111@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd_tool/infra/tools/luci/gerrit/0e548aa33f8113a45a5b3b62201e114e98e63d00f97296912380138f44597b07/gerrit",
+ "set-review",
+ "-host",
+ "https://change_host_2-review.googlesource.com",
+ "-input",
+ "{\"change_id\": \"22222222\", \"input\": {\"labels\": {\"Rolls-Synced\": 1}}, \"revision_id\": \"current\"}",
+ "-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "luci_context": {
+ "realm": {
+ "name": "fuchsia:ci"
+ },
+ "resultdb": {
+ "current_invocation": {
+ "name": "invocations/build:8945511751514863184",
+ "update_token": "token"
+ },
+ "hostname": "rdbhost"
+ }
+ },
+ "name": "Launching Rollers.Set Rolls-Synced Label on 22222222",
+ "timeout": 600,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@json.input@{@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"change_id\": \"22222222\",@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"labels\": {@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"Rolls-Synced\": 1@@@",
+ "@@@STEP_LOG_LINE@json.input@ }@@@",
+ "@@@STEP_LOG_LINE@json.input@ },@@@",
+ "@@@STEP_LOG_LINE@json.input@ \"revision_id\": \"current\"@@@",
+ "@@@STEP_LOG_LINE@json.input@}@@@",
+ "@@@STEP_LOG_END@json.input@@@",
+ "@@@STEP_LINK@gerrit link@https://change_host_2-review.googlesource.com/q/22222222@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/multi_roller.proto b/recipes/multi_roller.proto
new file mode 100644
index 0000000..21bf639
--- /dev/null
+++ b/recipes/multi_roller.proto
@@ -0,0 +1,42 @@
+// Copyright 2024 The Pigweed Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+syntax = "proto3";
+
+package recipes.pigweed.multi_roller;
+
+message Builder
+{
+ // Project of the builder to launch.
+ // TODO: b/245788264 - Support launching builders outside the current project.
+ string project = 1;
+
+ // Bucket of the builder to launch.
+ // TODO: b/245788264 - Support launching builders outside the current bucket.
+ string bucket = 2;
+
+ // Name of the builder to launch.
+ string builder = 3;
+}
+
+message InputProperties {
+ repeated Builder rollers_to_launch = 1;
+
+ // How often (in seconds) to poll gerrit or buildbucket
+ int32 poll_interval_secs = 2;
+
+ // Gerrit Label to indicate when a roll CL is synced with the other roll
+ // CLs in its multi_roller group.
+ string rolls_synced_label = 3;
+}
\ No newline at end of file
diff --git a/recipes/multi_roller.py b/recipes/multi_roller.py
new file mode 100644
index 0000000..4f80356
--- /dev/null
+++ b/recipes/multi_roller.py
@@ -0,0 +1,571 @@
+# Copyright 2024 The Pigweed Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+import attrs
+import itertools
+from typing import Any
+
+from google.protobuf import json_format
+from PB.go.chromium.org.luci.buildbucket.proto import (
+ build as build_pb2,
+ builds_service as builds_service_pb2,
+)
+from PB.recipes.pigweed.multi_roller import Builder, InputProperties
+
+DEPS = [
+ "fuchsia/buildbucket_util",
+ "fuchsia/gerrit",
+ "fuchsia/subbuild",
+ "recipe_engine/buildbucket",
+ "recipe_engine/json",
+ "recipe_engine/properties",
+ "recipe_engine/step",
+ "recipe_engine/time",
+]
+
+PROPERTIES = InputProperties
+
+LABEL_STATUSES = ("rejected", "approved", "disliked", "recommended")
+PRESUBMIT_VERIFIED_LABEL = "Presubmit-Verified"
+
+DEFAULT_POLL_INTERVAL_SECONDS = 5 * 60
+
+
+@attrs.define
+class GerritChange:
+ host: str
+ change_id: str
+
+ @property
+ def name(self):
+ return f'{self.host}:{self.change_id}'
+
+ @property
+ def url(self):
+ return f'https://{self.host}-review.googlesource.com/q/{self.change_id}'
+
+
+def RunSteps(api, props):
+ """The multi_roller recipe launches and synchronizes multiple rollers.
+
+ The rollers to launch is specified via the input properties. The recipe
+ will use the subbuild recipe_module to launch the rollers. Once each roller
+ has created a roll CL, it will also output a property that exposes the
+ gerrit host and change-id of that roll CL. The rollers will then wait for a
+ Rolls-Synced label. Multi_roller watches over all the rollers and only sets
+ the Rolls-Synced label on each roll CL once all of the roll CLs pass
+ presubmit checks.
+ """
+ # Launch each sub-roller.
+ with api.step.nest("Launching Rollers") as pres:
+ builders: list[str] = []
+ for builder_property in props.rollers_to_launch:
+ # TODO: b/245788264 - Support non-current project.
+ assert not builder_property.project
+ # TODO: b/245788264 - Support non-current bucket.
+ assert not builder_property.bucket
+ builders.append(builder_property.builder)
+
+ # Launch all sub-rollers with the same gerrit topic.
+ # Append the multi_roller's build id to the topic to make it unique.
+ launched_rollers: dict[str, api.subbuild.SubbuildResult] = (
+ api.subbuild.launch(
+ builders,
+ pres,
+ extra_properties={
+ "override_auto_roller_options": {
+ "push_options": (
+ f"topic=pigweed-s5400-roller-{api.buildbucket.build.id}"
+ )
+ }
+ },
+ )
+ )
+ roller_build_ids: list[int] = [
+ int(x.build_id) for x in launched_rollers.values()
+ ]
+
+ # Calculate how often to poll gerrit and buildbucket.
+ props.poll_interval_secs = (
+ props.poll_interval_secs or DEFAULT_POLL_INTERVAL_SECONDS
+ )
+
+ # Wait for sub-rollers to output the change ID of their roll CLs.
+ roller_changes = get_roller_changes(api, props, roller_build_ids)
+
+ # Wait for roll CLs to pass presubmits.
+ presubmits_passed = wait_for_presubmit(api, props, roller_changes)
+
+ # Add Rolls-Synced label value on roll CLs.
+ roll_sync_label_value = 1 if presubmits_passed else -1
+ for change in roller_changes:
+ api.gerrit.set_review(
+ name=f"Set {props.rolls_synced_label} Label on {change.change_id}",
+ change_id=change.change_id,
+ labels={props.rolls_synced_label: roll_sync_label_value},
+ host=change.host,
+ test_data=api.json.test_api.output({}),
+ )
+
+
+def _build_url(build_id):
+ return f"https://ci.chromium.org/ui/b/{build_id}"
+
+
+def get_roller_changes(api, props, build_ids: list[int]) -> list[GerritChange]:
+ """Uses buildbucket api to check the output property of builds.
+
+ All sub-roller builds will output an output property that contains the host
+ and change ID of their roll CL.
+
+ Returns
+ A list of GerritChange objects corresponding to the sub-roller CLs.
+ """
+ roller_changes: dict[str, list[GerritChange]] = {}
+ remaining_build_ids: list[str] = list(build_ids)
+ for i in itertools.count():
+ with api.step.nest(f"Get sub-roller change IDs ({i})") as pres:
+ roller_builds = api.buildbucket.get_multi(remaining_build_ids)
+ for build_id, build in roller_builds.items():
+ output_props = json_format.MessageToDict(
+ build.output.properties
+ )
+ if "gerrit_changes" in output_props:
+ with api.step.nest(
+ f"got changes for {build_id}"
+ ) as change_pres:
+ change_pres.links[build_id] = _build_url(build_id)
+ for chg in output_props["gerrit_changes"]:
+ change = GerritChange(
+ host=chg["host"], change_id=chg["change_id"]
+ )
+ change_pres.links[change.name] = change.url
+ roller_changes.setdefault(build_id, [])
+ roller_changes[build_id].append(change)
+ remaining_build_ids.remove(build_id)
+
+ if not remaining_build_ids:
+ result = list(
+ itertools.chain.from_iterable(roller_changes.values())
+ )
+ pres.step_summary_text = f"Got all change ids: {result}"
+ return result
+
+ if _on_last_iteration(api, props.poll_interval_secs):
+ break
+ api.time.sleep(props.poll_interval_secs)
+
+ with api.step.nest("Failed to retrieve some change ids") as pres:
+ for build_id in remaining_build_ids:
+ pres.links[build_id] = _build_url(build_id)
+ pres.status = "FAILURE"
+ raise api.step.StepFailure("Failed to retrieve some change ids")
+
+
+def wait_for_presubmit(api, props, roller_changes: list[GerritChange]):
+ """Wait for all sub-roller roll CLs to pass presubmit checks.
+
+ Returns:
+ Whether or not all sub-roller CLs passed presubmits.
+ """
+ success_status = {"approved"}
+ failure_status = set(LABEL_STATUSES) - success_status
+ remaining_rollers: list[GerritChange] = list(roller_changes)
+ for i in itertools.count():
+ with api.step.nest(
+ f"Wait for {PRESUBMIT_VERIFIED_LABEL} for roll CLs ({i})"
+ ) as pres:
+ pres.step_summary_text = (
+ f"Waiting on {PRESUBMIT_VERIFIED_LABEL} for: {remaining_rollers}"
+ )
+ for change in list(remaining_rollers):
+ step = api.gerrit.change_details(
+ f"Get CL details for CL {change.change_id}",
+ change.change_id,
+ host=change.host,
+ )
+ details = step.json.output
+
+ # If the roll CL was manually abandoned or merged, stop waiting.
+ if details["status"] == "ABANDONED":
+ api.step.empty(
+ f"Roll CL {change.change_id} was manually abandoned."
+ )
+ return False
+ if details["status"] == "MERGED":
+ api.step.empty(
+ f"Roll CL {change.change_id} was manually merged."
+ )
+ remaining_rollers.remove(change)
+ continue
+
+ with api.step.nest(
+ f"Check CL {change.change_id}"
+ ) as label_pres:
+ label_pres.step_summary_text = (
+ f"{PRESUBMIT_VERIFIED_LABEL} not set"
+ )
+ if PRESUBMIT_VERIFIED_LABEL not in details["labels"]:
+ label_pres.step_summary_text = (
+ "f{PRESUBMIT_VERIFIED_LABEL} does not exist"
+ )
+ return False
+
+ if failure_status.intersection(
+ details["labels"][PRESUBMIT_VERIFIED_LABEL]
+ ):
+ label_pres.step_summary_text = "Presubmit checks failed"
+ return False
+
+ if success_status.intersection(
+ details["labels"][PRESUBMIT_VERIFIED_LABEL]
+ ):
+ label_pres.step_summary_text = "Presubmit checks passed"
+ remaining_rollers.remove(change)
+
+ if not remaining_rollers:
+ pres.step_summary_text = (
+ f"All roll CLs have {PRESUBMIT_VERIFIED_LABEL}"
+ )
+ return True
+
+ # Don't sleep after the final check.
+ if _on_last_iteration(api, props.poll_interval_secs):
+ return False
+ api.time.sleep(props.poll_interval_secs)
+
+
+def _on_last_iteration(api, poll_interval_secs):
+ return _secs_remaining_in_build(api) < poll_interval_secs * 3 // 2
+
+
+def _secs_remaining_in_build(api):
+ current_time = api.time.time()
+ elapsed_time = current_time - api.buildbucket.build.start_time.seconds
+ return api.buildbucket.build.execution_timeout.seconds - elapsed_time
+
+
+def GenTests(api):
+ def test(*args, **kwargs):
+ kwargs.setdefault("execution_timeout", 100)
+ return (
+ api.buildbucket_util.test(*args, **kwargs)
+ + api.time.seed(0)
+ + api.time.step(1)
+ )
+
+ def builder(name):
+ return Builder(project="", bucket="", builder=name)
+
+ def result_ci(name, id, status="SUCCESS", **kwargs):
+ return api.subbuild.ci_build_message(
+ builder=name,
+ build_id=id,
+ status=status,
+ **kwargs,
+ )
+
+ def properties(*builders, **kwargs):
+ props = InputProperties(**kwargs)
+ props.rollers_to_launch.extend(list(builders))
+ props.poll_interval_secs = 5
+ props.rolls_synced_label = "Rolls-Synced"
+ return api.properties(props)
+
+ def simulate_subroller_launch(builds, launch_step="Launching Rollers"):
+ responses = []
+ for build in builds:
+ responses.append(
+ dict(schedule_build=dict(id=build.id, builder=build.builder))
+ )
+ return api.buildbucket.simulated_schedule_output(
+ step_name=f"{launch_step}.schedule",
+ batch_response=builds_service_pb2.BatchResponse(
+ responses=responses
+ ),
+ )
+
+ def simulate_get_multi(builds, launch_step):
+ return api.buildbucket.simulated_get_multi(
+ builds=builds,
+ step_name=f"{launch_step}.buildbucket.get_multi",
+ )
+
+ yield (
+ test("success with two sub-rollers")
+ + properties(builder("roller-1"), builder("roller-2"))
+ + simulate_subroller_launch(
+ builds=[
+ result_ci(name="roller-1", id=1000),
+ result_ci(name="roller-2", id=1001),
+ ],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_1", "change_id": "11111111"}
+ ]
+ },
+ ),
+ result_ci(
+ name="roller-2",
+ id=1001,
+ # output property not set yet!
+ output_props={},
+ ),
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-2",
+ id=1001,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_2", "change_id": "22222222"}
+ ]
+ },
+ ),
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (1)",
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "NEW",
+ "labels": {
+ "Presubmit-Verified": {"approved": {}},
+ },
+ }
+ ),
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 22222222",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "NEW",
+ "labels": {
+ # Presubmit-Verified label doesn't have a vote yet!
+ "Presubmit-Verified": {},
+ },
+ }
+ ),
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (1).Get CL details for CL 22222222",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "NEW",
+ "labels": {
+ "Presubmit-Verified": {"approved": {}},
+ },
+ }
+ ),
+ )
+ )
+
+ yield (
+ test("presubmit fails")
+ + properties(builder("roller-1"))
+ + simulate_subroller_launch(
+ builds=[result_ci(name="roller-1", id=1000)],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_1", "change_id": "11111111"}
+ ]
+ },
+ ),
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "NEW",
+ "labels": {
+ "Presubmit-Verified": {"rejected": {}},
+ },
+ }
+ ),
+ )
+ )
+
+ yield (
+ test("roll CL manually merged")
+ + properties(builder("roller-1"))
+ + simulate_subroller_launch(
+ builds=[result_ci(name="roller-1", id=1000)],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_1", "change_id": "11111111"}
+ ]
+ },
+ ),
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "MERGED",
+ "labels": {
+ "Presubmit-Verified": {"approved": {}},
+ },
+ }
+ ),
+ )
+ )
+
+ yield (
+ test("roll CL manually abandoned")
+ + properties(builder("roller-1"))
+ + simulate_subroller_launch(
+ builds=[result_ci(name="roller-1", id=1000)],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_1", "change_id": "11111111"}
+ ]
+ },
+ ),
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "ABANDONED",
+ "labels": {
+ "Presubmit-Verified": {"approved": {}},
+ },
+ }
+ ),
+ )
+ )
+
+ yield (
+ test("presubmit-verified label does not exist")
+ + properties(builder("roller-1"))
+ + simulate_subroller_launch(
+ builds=[result_ci(name="roller-1", id=1000)],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_1", "change_id": "11111111"}
+ ]
+ },
+ )
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "NEW",
+ "labels": {},
+ }
+ ),
+ )
+ )
+
+ yield (
+ test("get change id timeout", execution_timeout=10, status="FAILURE")
+ + properties(builder("roller-1"))
+ + simulate_subroller_launch(
+ builds=[result_ci(name="roller-1", id=1000)],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={},
+ )
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ )
+
+ yield (
+ test("check for presubmit-verified timeout", execution_timeout=6)
+ + properties(builder("roller-1"))
+ + simulate_subroller_launch(
+ builds=[result_ci(name="roller-1", id=1000)],
+ )
+ + simulate_get_multi(
+ builds=[
+ result_ci(
+ name="roller-1",
+ id=1000,
+ output_props={
+ "gerrit_changes": [
+ {"host": "change_host_1", "change_id": "11111111"}
+ ]
+ },
+ )
+ ],
+ launch_step="Launching Rollers.Get sub-roller change IDs (0)",
+ )
+ + api.step_data(
+ "Launching Rollers.Wait for Presubmit-Verified for roll CLs (0).Get CL details for CL 11111111",
+ api.json.output(
+ {
+ "current_revision": "abc",
+ "status": "NEW",
+ "labels": {
+ "Presubmit-Verified": {},
+ },
+ }
+ ),
+ )
+ )