Reland "Update engine v2 archives api."

This changes allow to upload to different buckets and paths based using
monorepo logic, buildbucket buckets and a realm from the configuration
file.

This change will allow to test artifacts and migrate to engine v2 builds
using a single change to ci.yaml and build configuration files.

Change-Id: I28d7d67b084c918de83d809e9d66fa64ba00757b
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/39702
Reviewed-by: Yusuf Mohsinally <mohsinally@google.com>
Reviewed-by: Ricardo Amador <ricardoamador@google.com>
Commit-Queue: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipe_modules/archives/api.py b/recipe_modules/archives/api.py
index a5be00c..dab85a3 100644
--- a/recipe_modules/archives/api.py
+++ b/recipe_modules/archives/api.py
@@ -15,8 +15,11 @@
   remote = attr.ib(type=str)
 
 
-DEFAULT_BUCKET = 'flutter_archives_v2'
 ANDROID_ARTIFACTS_BUCKET = 'download.flutter.io'
+
+# Monorepo constant.
+MONOREPO = 'monorepo'
+
 # Used for mock paths
 DIRECTORY = 'DIRECTORY'
 
@@ -33,6 +36,33 @@
 )
 
 
+# Bucket + initial prefix for artifact destination.
+LUCI_TO_GCS_PREFIX = {
+    'flutter': 'flutter_infra_release/',
+    MONOREPO: 'flutter_archives_v2/monorepo/flutter_infra_release/',
+    'prod': 'flutter_infra_release/',
+    'staging': 'flutter_archives_v2/flutter_infra_release/',
+    'try': 'flutter_archives_v2/flutter_infra_release/'
+}
+
+# Bucket + initial prefix for artifact destination.
+LUCI_TO_ANDROID_GCS_PREFIX = {
+    'flutter': '',
+    MONOREPO: 'flutter_archives_v2/monorepo/',
+    'prod': '',
+    'staging': 'flutter_archives_v2/',
+    'try': 'flutter_archives_v2/'
+}
+
+# Subpath for realms. A realm is used to separate file destinations
+# within the same configuration. E.g. production environment with
+# an experimental realm and production environment with a production realm.
+REALM_TO_PATH = {
+    'production': '',
+    'experimental': 'experimental'
+}
+
+
 class ArchivesApi(recipe_api.RecipeApi):
   """Api to handle archives from engine_v2 recipes."""
 
@@ -79,7 +109,8 @@
       A tuple with the bucket as the first item and the path to the
       object as the second parameter.
     """
-    matches = re.match('gs://(\w+)/(.+)', dst)
+
+    matches = re.match('gs://([\w.]+)/(.+)', dst)
     return (matches.group(1), matches.group(2))
 
   def upload_artifact(self, src, dst, metadata=None):
@@ -120,34 +151,35 @@
         bucket, path, dst, name="download %s" % src
     )
 
-  def engine_v2_gcs_paths(self, checkout, archive_config, bucket=DEFAULT_BUCKET):
+  def engine_v2_gcs_paths(self, checkout, archive_config):
     """Calculates engine v2 GCS paths from an archive config.
 
     Args:
       checkout: (Path) the engine repository checkout folder.
       archive_config: (dict) the archive configuration for a recipes v2 build.
-      bucket: (str) the bucket used to calculate the object destination.
 
     Returns:
       A list of ArchivePaths with expected local and remote locations for the
       generated artifacts.
     """
     results = []
+    # Artifacts bucket is calculated using the LUCI bucket but we also use the realm to upload
+    # artifacts to the same bucket but different path when the build configurations use an experimental
+    # realm. Defaults to experimental.
+    artifact_realm = REALM_TO_PATH.get(archive_config.get('realm', ''), 'experimental')
     # Do not archive if the build is a try build or has no input commit
     if (self.m.buildbucket.build.input.gerrit_changes or
         not self.m.buildbucket.gitiles_commit.project):
       return results
 
-    file_list = self._full_path_list(checkout, archive_config)
     # Calculate prefix and commit.
-    is_monorepo = self.m.buildbucket.gitiles_commit.project == 'monorepo'
-
+    is_monorepo = self.m.buildbucket.gitiles_commit.project == MONOREPO
+    bucket = MONOREPO if is_monorepo else self.m.buildbucket.build.builder.bucket
+    file_list = self._full_path_list(checkout, archive_config)
     if is_monorepo:
       commit = self.m.repo_util.get_commit(checkout.join('../../monorepo'))
-      artifact_prefix = 'monorepo/'
     else:
       commit = self.m.repo_util.get_commit(checkout.join('flutter'))
-      artifact_prefix = ''
 
     for include_path in file_list:
       is_android_artifact = ANDROID_ARTIFACTS_BUCKET in include_path
@@ -160,17 +192,23 @@
       if is_android_artifact:
         # We are not using a slash in the first parameter becase artifact_prefix
         # already includes the slash.
-        artifact_path = '%s%s/%s' % (
-            artifact_prefix, rel_path, base_name)
+        artifact_path = '%s/%s' % (rel_path, base_name)
+        # Replace ANDROID_ARTIFACTS_BUCKET to include the realm.
+        old_location = '/'.join([ANDROID_ARTIFACTS_BUCKET, 'io', 'flutter'])
+        new_location = '/'.join(filter(
+            bool,
+            [ANDROID_ARTIFACTS_BUCKET, 'io', 'flutter', artifact_realm])
+        )
+        artifact_path = artifact_path.replace(old_location, new_location)
+        bucket_and_prefix = LUCI_TO_ANDROID_GCS_PREFIX.get(bucket)
       else:
-        final_rel_path = '%s/' % rel_path if rel_path else ''
-        artifact_path = '%sflutter_infra_release/flutter/%s/%s%s' % (
-            artifact_prefix, commit, final_rel_path, base_name)
+        bucket_and_prefix = LUCI_TO_GCS_PREFIX.get(bucket)
+        artifact_path = '/'.join(filter(bool, ['flutter', artifact_realm, commit, rel_path, base_name]))
 
       results.append(
           ArchivePaths(
               include_path,
-              'gs://%s/%s' % (bucket, artifact_path)
+              'gs://%s%s' % (bucket_and_prefix, artifact_path)
           )
       )
     return results
diff --git a/recipe_modules/archives/examples/engine_v2_gcs_paths.py b/recipe_modules/archives/examples/engine_v2_gcs_paths.py
index 5cb0b64..524478d 100644
--- a/recipe_modules/archives/examples/engine_v2_gcs_paths.py
+++ b/recipe_modules/archives/examples/engine_v2_gcs_paths.py
@@ -22,35 +22,46 @@
       "name": "android_profile",
       "type": "gcs",
       "base_path": "out/android_profile/zip_archives/",
+      "realm": "production",
       "include_paths": [
           "out/android_profile/zip_archives/artifact1.zip",
           "out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
           "out/android_profile/zip_archives/android-arm-profile/linux-x64.zip",
           "out/android_profile/zip_archives/android-arm-profile/symbols.zip",
-          "out/android_profile/zip_archives/download.flutter.io"
+          "out/android_profile/zip_archives/download.flutter.io",
+          "out/android_profile/zip_archives/sky_engine.zip"
       ]
   }
   results = api.archives.engine_v2_gcs_paths(checkout, config)
   expected_results = [
       ArchivePaths(
           local=str(api.path['start_dir'].join('out/android_profile/zip_archives/artifact1.zip')),
-          remote='gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/artifact1.zip'
+          remote='gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/artifact1.zip'
       ),
       ArchivePaths(
           local=str(api.path['start_dir'].join('out/android_profile/zip_archives/android-arm-profile/artifacts.zip')),
-          remote='gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip'),
+          remote='gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip'
+      ),
       ArchivePaths(
           local=str(api.path['start_dir'].join('out/android_profile/zip_archives/android-arm-profile/linux-x64.zip')),
-          remote='gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip'),
+          remote='gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip'
+      ),
       ArchivePaths(
           local=str(api.path['start_dir'].join('out/android_profile/zip_archives/android-arm-profile/symbols.zip')),
-          remote='gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip'),
+          remote='gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip'
+      ),
       ArchivePaths(
           local=str(api.path['start_dir'].join('out/android_profile/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar')),
-          remote='gs://flutter_archives_v2/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar'),
+          remote='gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar'
+      ),
       ArchivePaths(
           local=str(api.path['start_dir'].join('out/android_profile/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom')),
-          remote='gs://flutter_archives_v2/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom')
+          remote='gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+      ),
+      ArchivePaths(
+          local=str(api.path['start_dir'].join('out/android_profile/zip_archives/sky_engine.zip')),
+          remote='gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/sky_engine.zip'
+      )
   ]
   api.assertions.assertListEqual(expected_results, results)
 
diff --git a/recipe_modules/archives/examples/full.expected/failure.json b/recipe_modules/archives/examples/full.expected/failure.json
new file mode 100644
index 0000000..4ffeeba
--- /dev/null
+++ b/recipe_modules/archives/examples/full.expected/failure.json
@@ -0,0 +1,74 @@
+[
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[START_DIR]/out/android_profile/zip_archives/download.flutter.io",
+      "--recursive"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Expand directory",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/out/android_profile/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar@@@",
+      "@@@STEP_LOG_LINE@listdir@[START_DIR]/out/android_profile/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "git",
+      "rev-parse",
+      "HEAD"
+    ],
+    "cwd": "[START_DIR]/flutter",
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "git rev-parse"
+  },
+  {
+    "cmd": [],
+    "name": "RECIPE CRASH (Uncaught exception)",
+    "~followup_annotations": [
+      "@@@STEP_EXCEPTION@@@",
+      "The recipe has crashed at point 'Uncaught exception'!",
+      "",
+      "Traceback (most recent call last):",
+      "  File \"RECIPE_REPO[flutter]/recipe_modules/archives/examples/full.py\", line 25, in RunSteps",
+      "    assert False, 'Unexpected file generated %s' % result.remote",
+      "AssertionError('Unexpected file generated gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip')"
+    ]
+  },
+  {
+    "failure": {
+      "humanReason": "Uncaught Exception: AssertionError('Unexpected file generated gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip')"
+    },
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/flutter_pool_experimental_realm.json
similarity index 76%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/flutter_pool_experimental_realm.json
index a3b5f1b..060c036 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/flutter_pool_experimental_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -40,7 +40,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -62,12 +62,12 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,12 +88,12 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -116,12 +116,12 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -131,9 +131,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -145,13 +145,13 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/flutter_pool_production_realm.json
similarity index 76%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/flutter_pool_production_realm.json
index a3b5f1b..55d5627 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/flutter_pool_production_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -40,7 +40,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -62,12 +62,12 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,12 +88,12 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -116,12 +116,12 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -131,9 +131,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -145,13 +145,13 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart-internal:flutter"
       },
       "resultdb": {
         "current_invocation": {
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/monorepo_ci_experimental_realm.json
similarity index 74%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/monorepo_ci_experimental_realm.json
index a3b5f1b..9c6baae 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/monorepo_ci_experimental_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart:ci.sandbox"
       },
       "resultdb": {
         "current_invocation": {
@@ -36,11 +36,11 @@
       "rev-parse",
       "HEAD"
     ],
-    "cwd": "[START_DIR]/flutter",
+    "cwd": "[START_DIR]/../../monorepo",
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart:ci.sandbox"
       },
       "resultdb": {
         "current_invocation": {
@@ -62,12 +62,12 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart:ci.sandbox"
       },
       "resultdb": {
         "current_invocation": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,12 +88,12 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart:ci.sandbox"
       },
       "resultdb": {
         "current_invocation": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -121,7 +121,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart:ci.sandbox"
       },
       "resultdb": {
         "current_invocation": {
@@ -131,7 +131,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
       "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
     ]
@@ -145,13 +145,13 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "dart:ci.sandbox"
       },
       "resultdb": {
         "current_invocation": {
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/monorepo_try.json b/recipe_modules/archives/examples/full.expected/monorepo_try_experimental_realm.json
similarity index 100%
copy from recipe_modules/archives/examples/full.expected/monorepo_try.json
copy to recipe_modules/archives/examples/full.expected/monorepo_try_experimental_realm.json
diff --git a/recipe_modules/archives/examples/full.expected/monorepo_try.json b/recipe_modules/archives/examples/full.expected/monorepo_try_production_realm.json
similarity index 100%
rename from recipe_modules/archives/examples/full.expected/monorepo_try.json
rename to recipe_modules/archives/examples/full.expected/monorepo_try_production_realm.json
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/prod_pool_experimental_realm.json
similarity index 79%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/prod_pool_experimental_realm.json
index a3b5f1b..8ea5b54 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/prod_pool_experimental_realm.json
@@ -62,7 +62,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,7 +88,7 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -116,7 +116,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "infra_step": true,
     "luci_context": {
@@ -131,9 +131,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -145,7 +145,7 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/prod_pool_production_realm.json
similarity index 79%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/prod_pool_production_realm.json
index a3b5f1b..ee6785e 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/prod_pool_production_realm.json
@@ -62,7 +62,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,7 +88,7 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -116,7 +116,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "infra_step": true,
     "luci_context": {
@@ -131,9 +131,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -145,7 +145,7 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/staging_pool_experimental_realm.json
similarity index 78%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/staging_pool_experimental_realm.json
index a3b5f1b..97c28e9 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/staging_pool_experimental_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -40,7 +40,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -62,12 +62,12 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,12 +88,12 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -121,7 +121,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -131,7 +131,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
       "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
     ]
@@ -145,13 +145,13 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/staging_pool_production_realm.json
similarity index 95%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/staging_pool_production_realm.json
index a3b5f1b..ef6b6fb 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/staging_pool_production_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -40,7 +40,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -67,7 +67,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -93,7 +93,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -121,7 +121,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
@@ -151,7 +151,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:staging"
       },
       "resultdb": {
         "current_invocation": {
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/try_pool_experimental_realm.json
similarity index 78%
copy from recipe_modules/archives/examples/full.expected/basic.json
copy to recipe_modules/archives/examples/full.expected/try_pool_experimental_realm.json
index a3b5f1b..374952e 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/try_pool_experimental_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -40,7 +40,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -62,12 +62,12 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -77,7 +77,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+    "name": "Ensure flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
   },
   {
     "cmd": [
@@ -88,12 +88,12 @@
       "/path/to/tmp/json",
       "copy",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
+      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -103,7 +103,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "cmd": [
@@ -121,7 +121,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -131,7 +131,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+    "name": "gsutil flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
     "~followup_annotations": [
       "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
     ]
@@ -145,13 +145,13 @@
       "RECIPE_REPO[depot_tools]/gsutil.py",
       "----",
       "cp",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
+      "gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip",
       "[START_DIR]/out/android_profile/zip_archives/android-arm-profile/artifacts.zip"
     ],
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -161,7 +161,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
+    "name": "gsutil download gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip"
   },
   {
     "name": "$result"
diff --git a/recipe_modules/archives/examples/full.expected/basic.json b/recipe_modules/archives/examples/full.expected/try_pool_production_realm.json
similarity index 95%
rename from recipe_modules/archives/examples/full.expected/basic.json
rename to recipe_modules/archives/examples/full.expected/try_pool_production_realm.json
index a3b5f1b..dfb3dcd 100644
--- a/recipe_modules/archives/examples/full.expected/basic.json
+++ b/recipe_modules/archives/examples/full.expected/try_pool_production_realm.json
@@ -13,7 +13,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -40,7 +40,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -67,7 +67,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -93,7 +93,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -121,7 +121,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
@@ -151,7 +151,7 @@
     "infra_step": true,
     "luci_context": {
       "realm": {
-        "name": "flutter:prod"
+        "name": "flutter:try"
       },
       "resultdb": {
         "current_invocation": {
diff --git a/recipe_modules/archives/examples/full.py b/recipe_modules/archives/examples/full.py
index 36e664b..72db93d 100644
--- a/recipe_modules/archives/examples/full.py
+++ b/recipe_modules/archives/examples/full.py
@@ -2,22 +2,37 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-from recipe_engine.post_process import DoesNotRun, Filter, StatusFailure
+import copy
+from recipe_engine.post_process import DoesNotRun, Filter, StatusException
 
 DEPS = [
     'flutter/archives',
     'flutter/monorepo',
     'recipe_engine/buildbucket',
     'recipe_engine/path',
+    'recipe_engine/properties',
     'recipe_engine/raw_io',
 ]
 
 
 def RunSteps(api):
   checkout = api.path['start_dir']
-  config = {
+  config = api.properties.get('config')
+  expected_destinations = api.properties.get('expected_destinations')
+  results = api.archives.engine_v2_gcs_paths(checkout, config)
+  for result in results:
+    if result.remote not in expected_destinations:
+      assert False, 'Unexpected file generated %s' % result.remote
+  if not results: return
+  api.archives.upload_artifact(results[0].local, results[0].remote)
+  api.archives.download(results[0].remote, results[0].local)
+
+
+def GenTests(api):
+  archive_config = {
       "name": "android_profile",
       "type": "gcs",
+      "realm": "production",
       "base_path": "out/android_profile/zip_archives/",
       "include_paths": [
           "out/android_profile/zip_archives/android-arm-profile/artifacts.zip",
@@ -26,15 +41,68 @@
           "out/android_profile/zip_archives/download.flutter.io"
       ]
   }
-  results = api.archives.engine_v2_gcs_paths(checkout, config)
-  if not results: return
-  api.archives.upload_artifact(results[0].local, results[0].remote)
-  api.archives.download(results[0].remote, results[0].local)
 
-
-def GenTests(api):
+  # Try LUCI pool with "production" realm in build configuration file.
+  try_pool_production_realm = [
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
   yield api.test(
-      'basic',
+      'try_pool_production_realm',
+      api.properties(config=archive_config, expected_destinations=try_pool_production_realm),
+      api.buildbucket.ci_build(
+          project='flutter',
+          bucket='try',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Try LUCI pool with "experimental" realm in build configuration file.
+  try_pool_experimental_realm = [
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  try_pool_experimental_realm_config = copy.deepcopy(archive_config)
+  try_pool_experimental_realm_config['realm'] = 'experimental'
+  yield api.test(
+      'try_pool_experimental_realm',
+      api.properties(config=try_pool_experimental_realm_config, expected_destinations=try_pool_experimental_realm),
+      api.buildbucket.ci_build(
+          project='flutter',
+          bucket='try',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Prod LUCI pool with "production" realm in build configuration file.
+  prod_pool_production_realm = [
+      'gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  yield api.test(
+      'prod_pool_production_realm',
+      api.properties(config=archive_config, expected_destinations=prod_pool_production_realm),
       api.buildbucket.ci_build(
           project='flutter',
           bucket='prod',
@@ -47,15 +115,205 @@
           .output_text('12345abcde12345abcde12345abcde12345abcde\n')
       )
   )
+
+  # Prod LUCI pool with "experimental" realm in build configuration file.
+  prod_pool_experimental_realm = [
+      'gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  prod_pool_experimental_realm_config = copy.deepcopy(archive_config)
+  prod_pool_experimental_realm_config['realm'] = 'experimental'
   yield api.test(
-      'monorepo_ci', api.monorepo.ci_build(),
+      'prod_pool_experimental_realm',
+      api.properties(config=prod_pool_experimental_realm_config, expected_destinations=prod_pool_experimental_realm),
+      api.buildbucket.ci_build(
+          project='flutter',
+          bucket='prod',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
       api.step_data(
           'git rev-parse',
           stdout=api.raw_io
           .output_text('12345abcde12345abcde12345abcde12345abcde\n')
       )
   )
+
+  # Flutter LUCI pool with "production" realm in build configuration file.
+  flutter_pool_production_realm = [
+      'gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
   yield api.test(
-      'monorepo_try',
+      'flutter_pool_production_realm',
+      api.properties(config=archive_config, expected_destinations=flutter_pool_production_realm),
+      api.buildbucket.ci_build(
+          project='dart-internal',
+          bucket='flutter',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Flutter LUCI pool with "experimental" realm in build configuration file.
+  flutter_pool_production_realm = [
+      'gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  flutter_pool_experimental_realm_config = copy.deepcopy(archive_config)
+  flutter_pool_experimental_realm_config['realm'] = 'experimental'
+  yield api.test(
+      'flutter_pool_experimental_realm',
+      api.properties(config=flutter_pool_experimental_realm_config, expected_destinations=flutter_pool_production_realm),
+      api.buildbucket.ci_build(
+          project='dart-internal',
+          bucket='flutter',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Staging LUCI pool with "production" realm in build configuration file.
+  staging_pool_production_realm = [
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  yield api.test(
+      'staging_pool_production_realm',
+      api.properties(config=archive_config, expected_destinations=staging_pool_production_realm),
+      api.buildbucket.ci_build(
+          project='flutter',
+          bucket='staging',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Staging LUCI pool with "production" realm in build configuration file.
+  staging_pool_production_realm = [
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_archives_v2/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://flutter_archives_v2/download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  staging_pool_experimental_realm_config = copy.deepcopy(archive_config)
+  staging_pool_experimental_realm_config['realm'] = 'experimental'
+  yield api.test(
+      'staging_pool_experimental_realm',
+      api.properties(config=staging_pool_experimental_realm_config, expected_destinations=staging_pool_production_realm),
+      api.buildbucket.ci_build(
+          project='flutter',
+          bucket='staging',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Monorepo ci  with "production" realm in build configuration file.
+  monorepo_production_realm = [
+      'gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://flutter_archives_v2/monorepo/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://flutter_archives_v2/monorepo/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  yield api.test(
+      'monorepo_ci', api.monorepo.ci_build(),
+      api.properties(config=archive_config, expected_destinations=monorepo_production_realm),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Monorepo ci  with "experimental" realm in build configuration file.
+  monorepo_experimental_realm_config = copy.deepcopy(archive_config)
+  monorepo_experimental_realm_config['realm'] = 'experimental'
+  monorepo_experimental_realm = [
+      'gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/artifacts.zip',
+      'gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/linux-x64.zip',
+      'gs://flutter_archives_v2/monorepo/flutter_infra_release/flutter/experimental/12345abcde12345abcde12345abcde12345abcde/android-arm-profile/symbols.zip',
+      'gs://flutter_archives_v2/monorepo/download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar',
+      'gs://flutter_archives_v2/monorepo/download.flutter.io/io/flutter/experimental/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+  ]
+  yield api.test(
+      'monorepo_ci_experimental_realm', api.monorepo.ci_build(),
+      api.properties(config=monorepo_experimental_realm_config, expected_destinations=monorepo_experimental_realm),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+          .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      )
+  )
+
+  # Monorepo try with "production" realm in build configuration file.
+  monorepo_try_realm = [
+  ]
+  yield api.test(
+      'monorepo_try_production_realm',
+      api.properties(config=archive_config, expected_destinations=monorepo_try_realm),
       api.monorepo.try_build(),
   )
+
+  # Monorepo try with "experimental" realm in build configuration file.
+  monorepo_try_realm = [
+  ]
+  monorepo_experimental_realm_config = copy.deepcopy(archive_config)
+  monorepo_experimental_realm_config['realm'] = 'experimental'
+  yield api.test(
+      'monorepo_try_experimental_realm',
+      api.properties(config=archive_config, expected_destinations=monorepo_try_realm),
+      api.monorepo.try_build(),
+  )
+
+  yield api.test(
+      'failure',
+      api.properties(config=archive_config, expected_destinations=['/abc/cde.zip']),
+      api.buildbucket.ci_build(
+          project='flutter',
+          bucket='try',
+          git_repo='https://flutter.googlesource.com/mirrors/engine',
+          git_ref='refs/heads/main'
+      ),
+      api.step_data(
+          'git rev-parse',
+          stdout=api.raw_io
+              .output_text('12345abcde12345abcde12345abcde12345abcde\n')
+      ),
+      api.expect_exception('AssertionError'),
+      api.post_process(StatusException)
+  )
diff --git a/recipes/engine_v2/builder.expected/basic.json b/recipes/engine_v2/builder.expected/basic.json
index d5d3fd0..6cd4004 100644
--- a/recipes/engine_v2/builder.expected/basic.json
+++ b/recipes/engine_v2/builder.expected/basic.json
@@ -814,6 +814,56 @@
   },
   {
     "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io",
+      "--recursive"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Expand directory",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
       "git",
       "rev-parse",
       "HEAD"
@@ -862,7 +912,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -896,7 +946,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+    "name": "Ensure flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
   },
   {
     "cmd": [
@@ -907,7 +957,7 @@
       "/path/to/tmp/json",
       "copy",
       "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/android-x86-jit-release/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -941,7 +991,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
   },
   {
     "cmd": [
@@ -954,7 +1004,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -988,9 +1038,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip",
+    "name": "gsutil flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -1003,7 +1053,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_2"
+      "[CLEANUP]/tmp_tmp_2/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1037,7 +1087,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure /"
+    "name": "Ensure io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
   },
   {
     "cmd": [
@@ -1047,8 +1097,8 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io",
-      "[CLEANUP]/tmp_tmp_2"
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar",
+      "[CLEANUP]/tmp_tmp_2/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1082,7 +1132,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2//download.flutter.io"
+    "name": "Copy gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar"
   },
   {
     "cmd": [
@@ -1095,7 +1145,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_2/*",
-      "gs://flutter_archives_v2/"
+      "gs://download.flutter.io/"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1129,9 +1179,150 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil /download.flutter.io",
+    "name": "gsutil io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/download.flutter.io/@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[CLEANUP]/tmp_tmp_3/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Ensure io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584 (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom",
+      "[CLEANUP]/tmp_tmp_3/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Copy gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom"
+  },
+  {
+    "cmd": [
+      "python3",
+      "-u",
+      "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+      "--",
+      "RECIPE_REPO[depot_tools]/gsutil.py",
+      "----",
+      "cp",
+      "-r",
+      "[CLEANUP]/tmp_tmp_3/*",
+      "gs://download.flutter.io/"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "gsutil io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom",
+    "~followup_annotations": [
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/download.flutter.io/@@@"
     ]
   },
   {
diff --git a/recipes/engine_v2/builder.expected/dart-internal-flutter.json b/recipes/engine_v2/builder.expected/dart-internal-flutter.json
index 6be81bb..4adefa7 100644
--- a/recipes/engine_v2/builder.expected/dart-internal-flutter.json
+++ b/recipes/engine_v2/builder.expected/dart-internal-flutter.json
@@ -961,6 +961,56 @@
   },
   {
     "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io",
+      "--recursive"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Expand directory",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
       "git",
       "rev-parse",
       "HEAD"
@@ -1009,7 +1059,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1043,7 +1093,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+    "name": "Ensure flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
   },
   {
     "cmd": [
@@ -1054,7 +1104,7 @@
       "/path/to/tmp/json",
       "copy",
       "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/android-x86-jit-release/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1088,7 +1138,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
   },
   {
     "cmd": [
@@ -1101,7 +1151,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1135,9 +1185,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip",
+    "name": "gsutil flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -1194,7 +1244,7 @@
       "-digest",
       "514e872bece8d7ee7d52fd8e7ef7b801e964e9d45bf1b7c084369533781038c7",
       "-gcs-uri",
-      "gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
+      "gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1239,7 +1289,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_2"
+      "[CLEANUP]/tmp_tmp_2/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1273,7 +1323,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure /"
+    "name": "Ensure io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
   },
   {
     "cmd": [
@@ -1283,8 +1333,8 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io",
-      "[CLEANUP]/tmp_tmp_2"
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar",
+      "[CLEANUP]/tmp_tmp_2/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1318,7 +1368,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2//download.flutter.io"
+    "name": "Copy gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar"
   },
   {
     "cmd": [
@@ -1331,7 +1381,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_2/*",
-      "gs://flutter_archives_v2/"
+      "gs://download.flutter.io/"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1365,9 +1415,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil /download.flutter.io",
+    "name": "gsutil io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/download.flutter.io/@@@"
     ]
   },
   {
@@ -1378,7 +1428,7 @@
       "--json-output",
       "/path/to/tmp/json",
       "file_hash",
-      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io"
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1414,7 +1464,7 @@
     },
     "name": "Compute file hash (2)",
     "~followup_annotations": [
-      "@@@STEP_TEXT@Hash calculated: e562a8287043cc08772883e4f94791f8909c9f206c74e3db0f6977d2855c86ba@@@"
+      "@@@STEP_TEXT@Hash calculated: 6689191ad27da9fce89670be7c2026d7c54c505dbf62803b64c538970cbc6169@@@"
     ]
   },
   {
@@ -1422,9 +1472,9 @@
       "[START_DIR]/reporter/snoopy_broker",
       "-report-gcs",
       "-digest",
-      "e562a8287043cc08772883e4f94791f8909c9f206c74e3db0f6977d2855c86ba",
+      "6689191ad27da9fce89670be7c2026d7c54c505dbf62803b64c538970cbc6169",
       "-gcs-uri",
-      "gs://flutter_archives_v2//download.flutter.io"
+      "gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1461,6 +1511,236 @@
   },
   {
     "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[CLEANUP]/tmp_tmp_3/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Ensure io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584 (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom",
+      "[CLEANUP]/tmp_tmp_3/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Copy gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom"
+  },
+  {
+    "cmd": [
+      "python3",
+      "-u",
+      "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+      "--",
+      "RECIPE_REPO[depot_tools]/gsutil.py",
+      "----",
+      "cp",
+      "-r",
+      "[CLEANUP]/tmp_tmp_3/*",
+      "gs://download.flutter.io/"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "gsutil io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom",
+    "~followup_annotations": [
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/download.flutter.io/@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "file_hash",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Compute file hash (3)",
+    "~followup_annotations": [
+      "@@@STEP_TEXT@Hash calculated: f266d3932d72969e719dbf778847d9e47408016bf74262830d3db2b447542fcf@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/reporter/snoopy_broker",
+      "-report-gcs",
+      "-digest",
+      "f266d3932d72969e719dbf778847d9e47408016bf74262830d3db2b447542fcf",
+      "-gcs-uri",
+      "gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "linux",
+      "REVISION": "2d72510e447ab60a9728aeea2362d8be2cbd7789"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "snoop: report_gcs (3)"
+  },
+  {
+    "cmd": [
       "[START_DIR]/reporter/snoopy_broker",
       "-report-stage",
       "-stage",
diff --git a/recipes/engine_v2/builder.expected/mac.json b/recipes/engine_v2/builder.expected/mac.json
index 944276e..1a0b18d 100644
--- a/recipes/engine_v2/builder.expected/mac.json
+++ b/recipes/engine_v2/builder.expected/mac.json
@@ -948,6 +948,56 @@
   },
   {
     "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io",
+      "--recursive"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "darwin",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Expand directory",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
       "git",
       "rev-parse",
       "HEAD"
@@ -996,7 +1046,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1030,7 +1080,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+    "name": "Ensure flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
   },
   {
     "cmd": [
@@ -1041,7 +1091,7 @@
       "/path/to/tmp/json",
       "copy",
       "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/android-x86-jit-release/artifacts.zip",
-      "[CLEANUP]/tmp_tmp_1/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
+      "[CLEANUP]/tmp_tmp_1/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1075,7 +1125,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2/flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
+    "name": "Copy gs://flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip"
   },
   {
     "cmd": [
@@ -1088,7 +1138,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_1/*",
-      "gs://flutter_archives_v2/"
+      "gs://flutter_infra_release/"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1122,9 +1172,9 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil flutter_infra_release/flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip",
+    "name": "gsutil flutter/12345abcde12345abcde12345abcde12345abcde/android-x86-jit-release/artifacts.zip",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_infra_release/@@@"
     ]
   },
   {
@@ -1137,7 +1187,7 @@
       "ensure-directory",
       "--mode",
       "0777",
-      "[CLEANUP]/tmp_tmp_2"
+      "[CLEANUP]/tmp_tmp_2/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1171,7 +1221,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Ensure /"
+    "name": "Ensure io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
   },
   {
     "cmd": [
@@ -1181,8 +1231,8 @@
       "--json-output",
       "/path/to/tmp/json",
       "copy",
-      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io",
-      "[CLEANUP]/tmp_tmp_2"
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar",
+      "[CLEANUP]/tmp_tmp_2/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1216,7 +1266,7 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "Copy gs://flutter_archives_v2//download.flutter.io"
+    "name": "Copy gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar"
   },
   {
     "cmd": [
@@ -1229,7 +1279,7 @@
       "cp",
       "-r",
       "[CLEANUP]/tmp_tmp_2/*",
-      "gs://flutter_archives_v2/"
+      "gs://download.flutter.io/"
     ],
     "cwd": "[CACHE]/builder/src/flutter",
     "env": {
@@ -1263,9 +1313,150 @@
         "hostname": "rdbhost"
       }
     },
-    "name": "gsutil /download.flutter.io",
+    "name": "gsutil io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar",
     "~followup_annotations": [
-      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/flutter_archives_v2/@@@"
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/download.flutter.io/@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[CLEANUP]/tmp_tmp_3/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "darwin",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Ensure io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584 (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]/builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom",
+      "[CLEANUP]/tmp_tmp_3/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "darwin",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Copy gs://download.flutter.io/io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom"
+  },
+  {
+    "cmd": [
+      "python3",
+      "-u",
+      "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+      "--",
+      "RECIPE_REPO[depot_tools]/gsutil.py",
+      "----",
+      "cp",
+      "-r",
+      "[CLEANUP]/tmp_tmp_3/*",
+      "gs://download.flutter.io/"
+    ],
+    "cwd": "[CACHE]/builder/src/flutter",
+    "env": {
+      "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "ENGINE_CHECKOUT_PATH": "[CACHE]/builder",
+      "ENGINE_PATH": "[CACHE]/builder",
+      "GIT_BRANCH": "",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "LUCI_WORKDIR": "[START_DIR]",
+      "OS": "darwin",
+      "REVISION": "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "gsutil io/flutter/x86_debug/1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom",
+    "~followup_annotations": [
+      "@@@STEP_LINK@gsutil.upload@https://console.cloud.google.com/storage/browser/download.flutter.io/@@@"
     ]
   },
   {
diff --git a/recipes/engine_v2/builder.py b/recipes/engine_v2/builder.py
index 3cfb6e5..cb98f21 100644
--- a/recipes/engine_v2/builder.py
+++ b/recipes/engine_v2/builder.py
@@ -65,8 +65,33 @@
 ANDROID_ARTIFACTS_BUCKET = 'download.flutter.io'
 
 
+# Relative paths used to mock paths for testing.
+MOCK_JAR_PATH = (
+    'io/flutter/x86_debug/'
+    '1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/'
+    'x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.jar'
+)
+MOCK_POM_PATH = (
+    'io/flutter/x86_debug/'
+    '1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584/'
+    'x86_debug-1.0.0-0005149dca9b248663adcde4bdd7c6c915a76584.pom'
+)
+
+# Used for mock paths
+DIRECTORY = 'DIRECTORY'
+
+
 def Build(api, checkout, env, env_prefixes, outputs):
   """Builds a flavor identified as a set of gn and ninja configs."""
+
+  # Mock data for tests. This is required for the archive api to expand the directory to full path
+  # of files.
+  api.path.mock_add_paths(
+      api.path['cache'].join(
+          'builder/src/out/android_jit_release_x86/zip_archives/download.flutter.io'),
+      DIRECTORY
+  )
+
   ninja_tool = {
       "ninja": api.build_util.build,
   }
@@ -186,6 +211,7 @@
                 {
                     "name": "android_jit_release_x86",
                     "type": "gcs",
+                    "realm": "production",
                     "base_path": "out/android_jit_release_x86/zip_archives/",
                     "include_paths": [
                         "out/android_jit_release_x86/zip_archives/android-x86-jit-release/artifacts.zip",