[testing] Add spec property to target serial:1

Bug: 41930
Change-Id: Idb13aeedf9582d8deb21f5fb51c1c8f753e9232a
diff --git a/recipe_modules/testing_requests/api.py b/recipe_modules/testing_requests/api.py
index 2b15e76..f5fe0bc 100644
--- a/recipe_modules/testing_requests/api.py
+++ b/recipe_modules/testing_requests/api.py
@@ -32,7 +32,8 @@
 
   def __init__(self, api, buildbucket_build, per_test_timeout_secs, pool,
                swarming_expiration_timeout_secs, swarming_io_timeout_secs,
-               timeout_secs, use_runtests, default_service_account):
+               timeout_secs, use_runtests, default_service_account,
+               targets_serial):
     self._api = api
     self._buildbucket_build = buildbucket_build
     self._per_test_timeout_secs = per_test_timeout_secs
@@ -42,6 +43,7 @@
     self._timeout_secs = timeout_secs
     self._use_runtests = use_runtests
     self._default_service_account = default_service_account
+    self._targets_serial = targets_serial
 
   def request(self, shard, build_results):
     # Copy since we modify it for each shard.
@@ -103,6 +105,8 @@
       # To take advantage of KVM, we execute QEMU-arm tasks on arm hardware.
       test_bot_cpu = build_results.target
     else:
+      if self._targets_serial:
+        dimensions['serial'] = '1'
       dimensions.update(shard.dimensions)
 
     image_manifest = '%s/%s' % (self._api.artifacts.image_url(), IMAGES_JSON)
@@ -265,7 +269,8 @@
       default_service_account=None,
       # TODO(garymm): Remove default value.
       # We should always get this from a spec.
-      timeout_secs=40 * 60):
+      timeout_secs=40 * 60,
+      targets_serial=False):
     """Returns a _ShardTaskRequest for each shard in build_artifact.shards.
 
     Args:
@@ -282,6 +287,8 @@
         test task with. This is required for fetching images from GCS.
       timeout_secs (int): The amount of seconds to wait for the tests to execute
         before giving up.
+      targets_serial (bool): Whether the task should target a bot with serial
+        enabled.
     """
     # Embed the authorized key into the appropriate ZBI. This enabled us to SSH
     # into QEMU, in which case we are unable to supply the key at pave-time (as
@@ -311,6 +318,7 @@
         timeout_secs=timeout_secs,
         use_runtests=use_runtests,
         default_service_account=default_service_account,
+        targets_serial=targets_serial,
     )
     shard_requests = []
     for s in shards:
diff --git a/recipe_modules/testing_requests/examples/full.py b/recipe_modules/testing_requests/examples/full.py
index d671ca9..6ed8e72 100644
--- a/recipe_modules/testing_requests/examples/full.py
+++ b/recipe_modules/testing_requests/examples/full.py
@@ -101,6 +101,7 @@
       per_test_timeout_secs=per_test_timeout_secs,
       use_runtests=use_runtests,
       default_service_account='default_service_account',
+      targets_serial=True,
   )
 
   if deprecated:
@@ -130,7 +131,8 @@
         build_results, api.buildbucket.build, test_spec.per_test_timeout_secs,
         test_spec.pool, shards, test_spec.swarming_expiration_timeout_secs,
         test_spec.swarming_io_timeout_secs, test_spec.use_runtests,
-        test_spec.default_service_account, test_spec.timeout_secs)
+        test_spec.default_service_account, test_spec.timeout_secs,
+        test_spec.targets_serial)
 
 
 def GenTests(api):
diff --git a/recipe_proto/infra/fuchsia.proto b/recipe_proto/infra/fuchsia.proto
index 6c8f5d0..f9c4f06 100644
--- a/recipe_proto/infra/fuchsia.proto
+++ b/recipe_proto/infra/fuchsia.proto
@@ -211,5 +211,9 @@
 
     // Whether or not to pave using images from GCS.
     bool pave_from_gcs = 18;
+
+    // Whether the test task needs to require a device with serial, QEMU
+    // conventionally always having 'serial' enabled.
+    bool targets_serial = 19;
   }
 }
diff --git a/recipes/fuchsia/build.expected/default.json b/recipes/fuchsia/build.expected/default.json
index 51b5aee..61eecc9 100644
--- a/recipes/fuchsia/build.expected/default.json
+++ b/recipes/fuchsia/build.expected/default.json
@@ -33,6 +33,7 @@
       "@@@STEP_LOG_LINE@textproto@  test_in_shards: true@@@",
       "@@@STEP_LOG_LINE@textproto@  timeout_secs: 1800@@@",
       "@@@STEP_LOG_LINE@textproto@  default_service_account: \"service_account\"@@@",
+      "@@@STEP_LOG_LINE@textproto@  targets_serial: true@@@",
       "@@@STEP_LOG_LINE@textproto@}@@@",
       "@@@STEP_LOG_LINE@textproto@gcs_bucket: \"fuchsia-infra\"@@@",
       "@@@STEP_LOG_LINE@textproto@artifact_gcs_bucket: \"fuchsia-infra-artifacts\"@@@",
@@ -2492,7 +2493,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_4/task_requests.json"
     ],
     "infra_step": true,
@@ -2529,6 +2530,10 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"grace_period_secs\": \"30\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@          \"dimensions\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"1\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"serial\"@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"fuchsia.tests\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"pool\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
diff --git a/recipes/fuchsia/build.expected/default_cq.json b/recipes/fuchsia/build.expected/default_cq.json
index e947d16..e777718 100644
--- a/recipes/fuchsia/build.expected/default_cq.json
+++ b/recipes/fuchsia/build.expected/default_cq.json
@@ -133,6 +133,7 @@
       "@@@STEP_LOG_LINE@textproto@  test_in_shards: true@@@",
       "@@@STEP_LOG_LINE@textproto@  timeout_secs: 1800@@@",
       "@@@STEP_LOG_LINE@textproto@  default_service_account: \"service_account\"@@@",
+      "@@@STEP_LOG_LINE@textproto@  targets_serial: true@@@",
       "@@@STEP_LOG_LINE@textproto@}@@@",
       "@@@STEP_LOG_LINE@textproto@artifact_gcs_bucket: \"fuchsia-infra-artifacts\"@@@",
       "@@@STEP_LOG_LINE@textproto@debug_symbol_gcs_bucket: \"debug-symbols\"@@@",
@@ -2357,7 +2358,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_5/task_requests.json"
     ],
     "infra_step": true,
@@ -2394,6 +2395,10 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"grace_period_secs\": \"30\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@          \"dimensions\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"1\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"serial\"@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"fuchsia.tests\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"pool\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
diff --git a/recipes/fuchsia/build.expected/non-numeric-parent-id.json b/recipes/fuchsia/build.expected/non-numeric-parent-id.json
index ae060b6..17893ca 100644
--- a/recipes/fuchsia/build.expected/non-numeric-parent-id.json
+++ b/recipes/fuchsia/build.expected/non-numeric-parent-id.json
@@ -33,6 +33,7 @@
       "@@@STEP_LOG_LINE@textproto@  test_in_shards: true@@@",
       "@@@STEP_LOG_LINE@textproto@  timeout_secs: 1800@@@",
       "@@@STEP_LOG_LINE@textproto@  default_service_account: \"service_account\"@@@",
+      "@@@STEP_LOG_LINE@textproto@  targets_serial: true@@@",
       "@@@STEP_LOG_LINE@textproto@}@@@",
       "@@@STEP_LOG_LINE@textproto@gcs_bucket: \"fuchsia-infra\"@@@",
       "@@@STEP_LOG_LINE@textproto@artifact_gcs_bucket: \"fuchsia-infra-artifacts\"@@@",
@@ -2456,7 +2457,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/not-a-number/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/not-a-number/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/not-a-number/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/not-a-number/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"fuchsia.googlesource.com\", \n              \"key\": \"INPUT_COMMIT_HOST\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"ci\", \n              \"key\": \"BUILDBUCKET_BUCKET\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"fuchsia\", \n              \"key\": \"INPUT_COMMIT_PROJECT\"\n            }, \n            {\n              \"value\": \"builder\", \n              \"key\": \"BUILDER_NAME\"\n            }, \n            {\n              \"value\": \"refs/heads/master\", \n              \"key\": \"INPUT_COMMIT_REF\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"1527292217\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_4/task_requests.json"
     ],
     "infra_step": true,
@@ -2493,6 +2494,10 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"grace_period_secs\": \"30\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@          \"dimensions\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"1\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"serial\"@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"fuchsia.tests\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"pool\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
diff --git a/recipes/fuchsia/build.expected/not_test_in_shards.json b/recipes/fuchsia/build.expected/not_test_in_shards.json
index fa0d107..868c7f9 100644
--- a/recipes/fuchsia/build.expected/not_test_in_shards.json
+++ b/recipes/fuchsia/build.expected/not_test_in_shards.json
@@ -30,6 +30,7 @@
       "@@@STEP_LOG_LINE@textproto@  swarming_io_timeout_secs: 300@@@",
       "@@@STEP_LOG_LINE@textproto@  timeout_secs: 1800@@@",
       "@@@STEP_LOG_LINE@textproto@  default_service_account: \"service_account\"@@@",
+      "@@@STEP_LOG_LINE@textproto@  targets_serial: true@@@",
       "@@@STEP_LOG_LINE@textproto@}@@@",
       "@@@STEP_LOG_LINE@textproto@artifact_gcs_bucket: \"fuchsia-infra-artifacts\"@@@",
       "@@@STEP_LOG_LINE@textproto@debug_symbol_gcs_bucket: \"debug-symbols\"@@@",
diff --git a/recipes/fuchsia/build.expected/spec_remote_cq.json b/recipes/fuchsia/build.expected/spec_remote_cq.json
index a1543fe..1778320 100644
--- a/recipes/fuchsia/build.expected/spec_remote_cq.json
+++ b/recipes/fuchsia/build.expected/spec_remote_cq.json
@@ -133,6 +133,7 @@
       "@@@STEP_LOG_LINE@textproto@  test_in_shards: true@@@",
       "@@@STEP_LOG_LINE@textproto@  timeout_secs: 1800@@@",
       "@@@STEP_LOG_LINE@textproto@  default_service_account: \"service_account\"@@@",
+      "@@@STEP_LOG_LINE@textproto@  targets_serial: true@@@",
       "@@@STEP_LOG_LINE@textproto@}@@@",
       "@@@STEP_LOG_LINE@textproto@artifact_gcs_bucket: \"fuchsia-infra-artifacts\"@@@",
       "@@@STEP_LOG_LINE@textproto@debug_symbol_gcs_bucket: \"debug-symbols\"@@@",
@@ -2379,7 +2380,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_5/task_requests.json"
     ],
     "infra_step": true,
@@ -2416,6 +2417,10 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"grace_period_secs\": \"30\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@          \"dimensions\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"1\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"serial\"@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"fuchsia.tests\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"pool\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
diff --git a/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json b/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
index 1ffa6f5..49cb77c 100644
--- a/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
+++ b/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
@@ -133,6 +133,7 @@
       "@@@STEP_LOG_LINE@textproto@  test_in_shards: true@@@",
       "@@@STEP_LOG_LINE@textproto@  timeout_secs: 1800@@@",
       "@@@STEP_LOG_LINE@textproto@  default_service_account: \"service_account\"@@@",
+      "@@@STEP_LOG_LINE@textproto@  targets_serial: true@@@",
       "@@@STEP_LOG_LINE@textproto@}@@@",
       "@@@STEP_LOG_LINE@textproto@artifact_gcs_bucket: \"fuchsia-infra-artifacts\"@@@",
       "@@@STEP_LOG_LINE@textproto@debug_symbol_gcs_bucket: \"debug-symbols\"@@@",
@@ -2379,7 +2380,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
+      "[\n  {\n    \"priority\": \"200\", \n    \"task_slices\": [\n      {\n        \"expiration_secs\": \"600\", \n        \"properties\": {\n          \"outputs\": [\n            \"syslog.txt\", \n            \"serial.txt\", \n            \"out.tar\"\n          ], \n          \"inputs_ref\": {\n            \"isolatedserver\": \"https://example.isolateserver.appspot.com\", \n            \"namespace\": \"default-gzip\", \n            \"isolated\": \"[dummy hash]\"\n          }, \n          \"io_timeout_secs\": \"300\", \n          \"cipd_input\": {\n            \"packages\": [\n              {\n                \"path\": \".\", \n                \"version\": \"latest\", \n                \"package_name\": \"infra/tools/luci-auth/${platform}\"\n              }\n            ]\n          }, \n          \"grace_period_secs\": \"30\", \n          \"dimensions\": [\n            {\n              \"value\": \"1\", \n              \"key\": \"serial\"\n            }, \n            {\n              \"value\": \"fuchsia.tests\", \n              \"key\": \"pool\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"device_type\"\n            }\n          ], \n          \"idempotent\": false, \n          \"command\": [\n            \"./luci-auth\", \n            \"context\", \n            \"--\", \n            \"./botanist\", \n            \"-level\", \n            \"debug\", \n            \"run\", \n            \"-images\", \n            \"gs://fuchsia-infra-artifacts/8945511751514863184/images/images.json\", \n            \"-timeout\", \n            \"1800s\", \n            \"-syslog\", \n            \"syslog.txt\", \n            \"-serial-log\", \n            \"serial.txt\", \n            \"-repo\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/8945511751514863184/repository\", \n            \"-blobs\", \n            \"http://$GCS_PROXY_HOST/fuchsia-infra-artifacts/blobs\", \n            \"-config\", \n            \"/etc/botanist/config.json\", \n            \"./testrunner\", \n            \"-archive\", \n            \"out.tar\", \n            \"tests.json\"\n          ], \n          \"env\": [\n            {\n              \"value\": \"products/core.gni\", \n              \"key\": \"BUILD_PRODUCT\"\n            }, \n            {\n              \"value\": \"${ISOLATED_OUTDIR}\", \n              \"key\": \"FUCHSIA_TEST_OUTDIR\"\n            }, \n            {\n              \"value\": \"8945511751514863184\", \n              \"key\": \"BUILDBUCKET_ID\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"LSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"UBSAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"x64\", \n              \"key\": \"BUILD_TARGET\"\n            }, \n            {\n              \"value\": \"llvm-symbolizer\", \n              \"key\": \"ASAN_SYMBOLIZER_PATH\"\n            }, \n            {\n              \"value\": \"Khadas Vim2 Max\", \n              \"key\": \"FUCHSIA_DEVICE_TYPE\"\n            }, \n            {\n              \"value\": \"boards/x64.gni\", \n              \"key\": \"BUILD_BOARD\"\n            }, \n            {\n              \"value\": \"0\", \n              \"key\": \"BUILD_CREATE_TIME\"\n            }, \n            {\n              \"value\": \"debug\", \n              \"key\": \"BUILD_TYPE\"\n            }\n          ], \n          \"containment\": {\n            \"lower_priority\": false, \n            \"limit_processes\": \"0\", \n            \"containment_type\": \"NONE\", \n            \"limit_total_committed_memory\": \"0\"\n          }, \n          \"execution_timeout_secs\": \"1800\", \n          \"env_prefixes\": []\n        }\n      }\n    ], \n    \"name\": \"Vim2\", \n    \"service_account\": \"service_account\", \n    \"tags\": [\n      \"test_environment_name:Khadas Vim2 Max-x64\"\n    ]\n  }\n]",
       "[CLEANUP]/test-orchestration-inputs_tmp_5/task_requests.json"
     ],
     "infra_step": true,
@@ -2416,6 +2417,10 @@
       "@@@STEP_LOG_LINE@task_requests.json@          \"grace_period_secs\": \"30\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@          \"dimensions\": [@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"1\", @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"serial\"@@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
+      "@@@STEP_LOG_LINE@task_requests.json@            {@@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"value\": \"fuchsia.tests\", @@@",
       "@@@STEP_LOG_LINE@task_requests.json@              \"key\": \"pool\"@@@",
       "@@@STEP_LOG_LINE@task_requests.json@            }, @@@",
diff --git a/recipes/fuchsia/build.py b/recipes/fuchsia/build.py
index c663a63..a272f63 100644
--- a/recipes/fuchsia/build.py
+++ b/recipes/fuchsia/build.py
@@ -256,7 +256,8 @@
           spec.test.swarming_io_timeout_secs,
           spec.test.use_runtests,
           default_service_account=spec.test.default_service_account,
-          timeout_secs=spec.test.timeout_secs)
+          timeout_secs=spec.test.timeout_secs,
+          targets_serial=spec.test.targets_serial)
     else:
       shard_requests = api.testing_requests.deprecated_shard_requests(
           build,
@@ -308,6 +309,7 @@
           swarming_expiration_timeout_secs=10 * 60,
           swarming_io_timeout_secs=5 * 60,
           default_service_account='service_account',
+          targets_serial=True,
       )
 
     spec = Fuchsia(