Latest Attempt:

The main change here versus the other attempts is to remove the use of the m.path objects. These objects are creating issues when attempting to compare objects with what should be strings and when converting to and from JSON. They cannot be converted directly to json.

Original Description:
https://flutter-review.googlesource.com/c/recipes/+/53221

This cl introduces a cache micro manager that will run cleanup primarily for osx_sdk directories but could be used elsewhere to manage clean up on the cache subdirectory level.

Addresses: https://github.com/flutter/flutter/issues/137951 in which it was found that having multiple versions of Xcode was causing significant overhead to runtimes on mac os tests.

The change here will track packages in a cache for example osx_sdk and keep track of the time in which packages will be removed with a metadata file in the directory.
* If a package is updated and used the removal date will always be x days (currently 30 days) from the last day it was touched.
* If a package is not updated it will be determined if it needs to be removed and if so will remove it.
* Packages FOUND ON disk but NOT IN the file will be added automatically for tracking and removal.
* Packages NOT FOUND on disk BUT IN the metadata file will be removed from the metadata file.

One things to note is that we may want to tweak the time that we leave the packages around to something shorter or make it configurable via the ci.yaml. Though I am not sure how often multiple packages are used.

This tool is unobtrusive and does not aggressively remove files. If you want to reset all package expirations you can simple remove the file from the machine to force it to recalculate the removal dates.

This does not run as a service and can be added as a step to existing recipes if we need to remove packages causing overhead to other test runtimes.

https://ci.chromium.org/ui/p/flutter/builders/try.shadow/Mac%20plugin_test_ios/4/overview

Bug: https://github.com/flutter/flutter/issues/137951
Change-Id: I89e013ae869713f763292c9b4bd1dfb962c8323d
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/53801
Reviewed-by: Keyong Han <keyonghan@google.com>
Commit-Queue: Ricardo Amador <ricardoamador@google.com>
diff --git a/recipe_modules/cache_micro_manager/__init__.py b/recipe_modules/cache_micro_manager/__init__.py
new file mode 100644
index 0000000..37a0c51
--- /dev/null
+++ b/recipe_modules/cache_micro_manager/__init__.py
@@ -0,0 +1,9 @@
+DEPS = [
+    'depot_tools/depot_tools',
+    'flutter/test_utils',
+    'recipe_engine/file',
+    'recipe_engine/path',
+    'recipe_engine/platform',
+    'recipe_engine/properties',
+    'recipe_engine/step',
+]
diff --git a/recipe_modules/cache_micro_manager/api.py b/recipe_modules/cache_micro_manager/api.py
new file mode 100644
index 0000000..d4fb7ff
--- /dev/null
+++ b/recipe_modules/cache_micro_manager/api.py
@@ -0,0 +1,354 @@
+from datetime import datetime
+from datetime import timedelta
+import json
+
+from recipe_engine import recipe_api
+
+JSON_ENTRY_NAME = 'name'
+JSON_ENTRY_UPDATED_DATE = 'updated_date'
+JSON_ENTRY_REMOVAL_DATE = 'removal_date'
+
+PACKAGE_REMOVAL_INTERVAL_DAYS = 30
+
+
+class CacheEntry:
+  """An object used to represent a file and its usage in a cache."""
+
+  def __init__(
+      self,
+      file_name: str,
+      updated_date: datetime = None,
+      removal_date: datetime = None,
+  ):
+    self.name = file_name
+
+    # The updated date will be stored as a string for easy conversion to and from json.
+    self.updated_date = updated_date
+    self.updated_date = updated_date.strftime("%m/%d/%Y, %H:%M:%S")
+
+    # The removal date will be stored as a string for easy conversion to and from json.
+    self.removal_date = removal_date
+    if self.removal_date is None:
+      self._calc_removal_date(self.updated_date)
+    else:
+      self.removal_date = removal_date.strftime("%m/%d/%Y, %H:%M:%S")
+
+  def _calc_removal_date(self, updated_date: datetime):
+    """Calculate the removal date as the update date + 30 days."""
+    time_delta = timedelta(days=PACKAGE_REMOVAL_INTERVAL_DAYS)
+    updated_date_datetime = datetime.strptime(
+        updated_date, "%m/%d/%Y, %H:%M:%S"
+    )
+    new_removal_date = updated_date_datetime + time_delta
+    self.removal_date = new_removal_date.strftime("%m/%d/%Y, %H:%M:%S")
+
+  def removal_date_as_datetime(self) -> datetime:
+    """Return the stored removal timestamp string as a datetime object."""
+    return self._convert_str_to_datetime(self.removal_date)
+
+  def _convert_str_to_datetime(self, date_str: str) -> datetime:
+    """Return the converted string date as a datetime object"""
+    return datetime.strptime(date_str, "%m/%d/%Y, %H:%M:%S")
+
+
+class CacheMicroManagerApi(recipe_api.RecipeApi):
+  """This module keeps track of root individual files within a directory (based on
+  a non-recursivce mode). It keeps track of the last time a file was used and
+  proactively cleans the directory by removing files older than some specified time.
+  """
+
+  # pylint: disable=unused-argument
+  def __init__(self, *args, **kwargs):
+    """Create a new CacheMicroManager object.
+
+    Args:
+      target_dir (str): the path to the cache directory containing dependencies.
+    """
+    super(CacheMicroManagerApi, self).__init__(*args, **kwargs)
+    self.cache_target_directory = None
+    self.cache_name = None
+    self.metadata_file_name = None
+    self.cache_metadata_file_path = None
+
+  def _initialize(self, target_dir):
+    self.cache_target_directory = target_dir
+    self.cache_name = self.m.path.basename(self.cache_target_directory)
+    self.metadata_file_name = '.{}_cache_metadata.json'.format(self.cache_name)
+    self.cache_metadata_file_path = self.cache_target_directory.join(
+        self.metadata_file_name
+    )
+
+  def today(self):
+    """Provide a deterministic date when running tests."""
+    return datetime.now()  # pragma: nocover
+
+  def run(self, target_dir, deps_list: list):
+    """Run the cache micro manager on the target directory.
+
+    If the directory is not yet being tracked by the cache micro manager it will read the contents of
+    the target_dir_path and all current files and directories to cache metadata file.
+
+    If the directory is being tracked it will add any dependencies in deps_list not present in the file
+    to the metadata file or update the updated and removal date of dependencies in deps_list in the file.
+
+    After the deps are updated or added it will perform the following minor cleanup:
+    * If there is an entry in the metadata file but the package is not on disk it will remove the entry
+    from the file.
+    * If there is a package on disk but not in the file it will simply add it to the metadata file for
+    tracking and eventual removal.
+    * Then it will look at all removal dates from the metadata file and delete all expired packages from
+    disk and remove them from the metadata file.
+
+    Args:
+      * deps_list(list[str]): the list of dependencies that are currently being used.
+    """
+    self._initialize(target_dir=target_dir)
+
+    with self.m.step.nest('Running Cache Micro Manager on {}.'.format(
+        self.cache_target_directory)):
+      if not self.m.path.exists(self.cache_metadata_file_path):
+        directory_files_list = self.m.file.listdir(
+            'Reading cache directory {}'.format(self.cache_target_directory),
+            self.cache_target_directory,
+            recursive=False,
+        )
+
+        directory_cache_entry_list = self.convert_file_list_to_cache_entry_list(
+            directory_files_list
+        )
+
+        if len(directory_cache_entry_list) > 0:
+          # It should be safe to ignore the check for existence of the file since no one
+          # actively logs onto the bots and manipulates the file system.
+          self.m.file.write_text(
+              'Writing cache metadata file.',
+              self.cache_metadata_file_path,
+              json.dumps([ob.__dict__ for ob in directory_cache_entry_list]),
+          )
+      else:
+        # the currently stored metadata entries.
+
+        # example of the data that is stored in the metadata file.
+        # [
+        #   {
+        #     "name": "package_1",
+        #     "updated_date": "datetime",
+        #     "removal_date": "datetime + interval"
+        #   },
+        #   {
+        #     "name": "package_2",
+        #     "updated_date": "datetime",
+        #     "removal_date": "datetime + interval"
+        #   }
+        # ]
+
+        current_metadata_entries = self.read_metadata_file()
+
+        # these files may not be in the metadata file, no telling how they got there.
+        current_directory_entries = self.m.file.listdir(
+            'Reading cache directory {}'.format(self.cache_target_directory),
+            self.cache_target_directory, False
+        )
+
+        # remove the cache file itself so we do not record it in the file.
+        current_directory_entries.remove(self.cache_metadata_file_path)
+
+        # add or update the current working dependencies.
+        for dep in deps_list:
+          if not self.is_file_name_in_cache_entry_list(
+              dep, current_metadata_entries):
+            # we need to add it.
+            current_metadata_entries.append(
+                CacheEntry(file_name=str(dep), updated_date=self.today())
+            )
+          else:
+            # we want to update it.
+            existing_entry = self.get_cache_entry_from_list(
+                str(dep), current_metadata_entries
+            )
+
+            # package will be active for another month.
+            new_entry = CacheEntry(
+                file_name=str(existing_entry.name), updated_date=self.today()
+            )
+            current_metadata_entries.remove(existing_entry)
+            current_metadata_entries.append(new_entry)
+
+        paths_as_str_current_dir_entries = [
+            str(item) for item in current_directory_entries
+        ]
+        # there can be deps in the file and not in the directory or
+        for current_meta_entry in current_metadata_entries:  # current metadata entries should be str
+          if str(current_meta_entry.name
+                ) not in paths_as_str_current_dir_entries:
+            current_metadata_entries.remove(current_meta_entry)
+
+        # there can be deps in the directory and not in the file.
+        for file_path in paths_as_str_current_dir_entries:
+          cacheEntry = self.get_cache_entry_from_list(
+              str(file_path), current_metadata_entries
+          )
+          if cacheEntry is None:
+            current_metadata_entries.append(
+                CacheEntry(file_name=str(file_path), updated_date=self.today())
+            )
+
+        # Check dates and delete unused packages.
+        for cacheEntry in current_metadata_entries:
+          today = self.today()
+          if cacheEntry.removal_date_as_datetime().date() < today.date():
+            self.delete_file(cacheEntry.name)
+            current_metadata_entries.remove(cacheEntry)
+
+        # write the new file contents.
+        self.m.file.remove(
+            'Removing existing cache file {}'.format(
+                self.cache_metadata_file_path
+            ), self.cache_metadata_file_path
+        )
+        self.m.file.write_text(
+            'Writing cache metadata file.',
+            self.cache_metadata_file_path,
+            json.dumps([ob.__dict__ for ob in current_metadata_entries]),
+        )
+
+  def get_cache_entry_from_list(
+      self, file_name: str, cache_entry_list: list
+  ) -> CacheEntry:
+    """Get the associated cache entry when supplied with a specific file name.
+
+    Args:
+      * file_name (str): the name of a file/directory that represents a dependency.
+      * cache_entry_list (list[CacheEntry]): a list of CacheEntry objects.
+
+    Returns:
+      CacheEntry | None: Returns a CacheEntry if found in the list otherwise returns None.
+    """
+    for cache_entry in cache_entry_list:
+      if file_name == cache_entry.name:
+        return cache_entry
+    return None
+
+  # file name is a path as passed in here
+  def is_file_name_in_cache_entry_list(
+      self, file_name, cache_entry_list: list
+  ) -> bool:
+    """Check to see if a CacheEntry is in the list for the supplied file_name.
+
+    Args:
+      * file_name (str): the name of a file/directory that represents a dependency.
+      * cache_entry_list (list[CacheEntry]): a list of CacheEntry objects.
+
+    Returns:
+      bool: True if a cache entry exists with file_name as its name, False if it does not.
+    """
+    for cache_entry in cache_entry_list:
+      if str(file_name) == str(cache_entry.name):
+        return True
+    return False
+
+  def convert_file_list_to_cache_entry_list(
+      self, file_names_list: list
+  ) -> list:
+    """Create a list of CacheEntry objects from a list of file names.
+
+    The primary usage of this is on start of CacheMicroManager when it has not yet begun
+    to manage a directory and we need to record the contents of it.
+
+    Args:
+      * file_names_list (list[str]): a list of file names to use to instantiate CacheEntry
+        objects.
+
+    Returns:
+      list[CacheEntry]: a list of newly instantiated CacheEntry objects associate with the
+        supplied file names list.
+    """
+    cache_entry_list = []
+    for fd in file_names_list:
+      cache_entry = CacheEntry(file_name=str(fd), updated_date=self.today())
+      cache_entry_list.append(cache_entry)
+    return cache_entry_list
+
+  def delete_file(self, file_name):
+    """Delete a file or directory.
+
+    Args:
+      * file_name (Path): a file or directory name that will be deleted.
+    """
+    try:
+      if self.m.path.isfile(file_name):
+        self.m.file.remove(
+            'Removing file descriptor {}'.format(file_name), file_name
+        )  #pragma: nocover
+      elif self.m.path.isdir(file_name):
+        try:  #pragma: nocover
+          self.m.file.rmtree(
+              'Removig dir file descriptor {} (rmtree)'.format(file_name),
+              file_name
+          )  #pragma: nocover
+        except self.m.file.Error:  #pragma: nocover
+          self.m.step(
+              'Removing dir file descriptor {} (fallback rm)'.format(file_name),
+              ['rm', '-rf', file_name]
+          )  #pragma: nocover
+    except self.m.file.Error:  #pragma: nocover
+      print('File not found.')  #pragma: nocover
+
+  def read_metadata_file(self) -> list:
+    """Read the metadata file at the self.cache_metadata_file_location path.
+
+    Returns:
+      list[CacheEntry]: returns the list of CacheEntry's found in the existing file.
+    """
+    with self.m.step.nest('Reading metadata file {}'.format(
+        self.cache_metadata_file_path)):
+      # it is possible to return an empty list, populated list or None.
+      meta_json = self.m.file.read_text(
+          'Reading {}'.format(self.cache_metadata_file_path),
+          self.cache_metadata_file_path,
+      )
+      meta_cache_entries = []
+      json_items = json.loads(meta_json)
+      for item in json_items:
+        # TODO(ricardoamador) remove this code once the old dates without times are removed.
+        updated_date_found = None
+        if (self.date_format_check(item[JSON_ENTRY_UPDATED_DATE])):
+          updated_date_found = datetime.strptime(
+              item[JSON_ENTRY_UPDATED_DATE], "%m/%d/%Y, %H:%M:%S"
+          )
+        else:
+          updated_date_found = datetime.strptime(
+              "{}, 12:00:00".format(item[JSON_ENTRY_UPDATED_DATE]),
+              "%m/%d/%Y, %H:%M:%S"
+          )
+
+        removal_date_found = None
+        if (self.date_format_check(item[JSON_ENTRY_REMOVAL_DATE])):
+          removal_date_found = datetime.strptime(
+              item[JSON_ENTRY_REMOVAL_DATE], "%m/%d/%Y, %H:%M:%S"
+          )
+        else:
+          removal_date_found = datetime.strptime(
+              "{}, 12:00:00".format(item[JSON_ENTRY_REMOVAL_DATE]),
+              "%m/%d/%Y, %H:%M:%S"
+          )
+
+        new_entry = CacheEntry(
+            file_name=str(item[JSON_ENTRY_NAME]),
+            updated_date=updated_date_found,
+            removal_date=removal_date_found
+        )
+        meta_cache_entries.append(new_entry)
+      return meta_cache_entries
+
+  def date_format_check(self, date_str: str) -> bool:
+    """Check the date format of the date we are attempting to process.
+
+    returns:
+      True if the time stamp includes the time and the date. False if non-compliant.
+    """
+    try:
+      datetime.strptime(date_str, "%m/%d/%Y, %H:%M:%S")
+      return True
+    except ValueError:
+      return False
diff --git a/recipe_modules/cache_micro_manager/examples/existing_cache_file.expected/cache_metadata_exists_is_created.json b/recipe_modules/cache_micro_manager/examples/existing_cache_file.expected/cache_metadata_exists_is_created.json
new file mode 100644
index 0000000..e9316b0
--- /dev/null
+++ b/recipe_modules/cache_micro_manager/examples/existing_cache_file.expected/cache_metadata_exists_is_created.json
@@ -0,0 +1,131 @@
+[
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading metadata file [CACHE]/osx_sdk/.osx_sdk_cache_metadata.json",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]/osx_sdk/.osx_sdk_cache_metadata.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading metadata file [CACHE]/osx_sdk/.osx_sdk_cache_metadata.json.Reading [CACHE]/osx_sdk/.osx_sdk_cache_metadata.json",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@        [@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            {@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"name\": \"fake_dep_file_1\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"updated_date\": \"12/15/2023, 13:43:21\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"removal_date\": \"01/14/2024, 13:43:21\"@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            },@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            {@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"name\": \"fake_dep_package_1\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"updated_date\": \"12/15/2023, 13:43:21\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"removal_date\": \"01/14/2024, 13:43:21\"@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            },@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            {@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"name\": \"fake_dep_package_2\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"updated_date\": \"12/15/2022, 13:43:21\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"removal_date\": \"01/14/2023, 13:43:21\"@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            },@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            {@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"name\": \"fake_expired_file\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"updated_date\": \"11/30/2022, 13:43:21\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"removal_date\": \"12/30/2022, 13:43:21\"@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            },@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            {@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"name\": \"dep_not_in_dir\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"updated_date\": \"12/25/2021, 13:43:21\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"removal_date\": \"01/24/2022, 13:43:21\"@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            },@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            {@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"name\": \"fake_dep_package_old_time\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"updated_date\": \"10/16/2023\",@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@                \"removal_date\": \"11/15/2023\"@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@            }@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@        ]@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@        @@@",
+      "@@@STEP_LOG_END@.osx_sdk_cache_metadata.json@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/.osx_sdk_cache_metadata.json@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_file_1@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_package_1@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_package_2@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_package_old_time@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_expired_file@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/new_dep_5@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "remove",
+      "[CACHE]/osx_sdk/.osx_sdk_cache_metadata.json"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Removing existing cache file [CACHE]/osx_sdk/.osx_sdk_cache_metadata.json",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[{\"name\": \"fake_dep_package_old_time\", \"updated_date\": \"10/16/2023, 12:00:00\", \"removal_date\": \"11/15/2023, 12:00:00\"}, {\"name\": \"fake_dep_file_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_file_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_2\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_old_time\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_expired_file\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/new_dep_5\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}]",
+      "[CACHE]/osx_sdk/.osx_sdk_cache_metadata.json"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Writing cache metadata file.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@[{\"name\": \"fake_dep_package_old_time\", \"updated_date\": \"10/16/2023, 12:00:00\", \"removal_date\": \"11/15/2023, 12:00:00\"}, {\"name\": \"fake_dep_file_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_file_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_2\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_old_time\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_expired_file\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/new_dep_5\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}]@@@",
+      "@@@STEP_LOG_END@.osx_sdk_cache_metadata.json@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "run cache micro manager"
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/cache_micro_manager/examples/existing_cache_file.py b/recipe_modules/cache_micro_manager/examples/existing_cache_file.py
new file mode 100644
index 0000000..ef424e2
--- /dev/null
+++ b/recipe_modules/cache_micro_manager/examples/existing_cache_file.py
@@ -0,0 +1,139 @@
+DEPS = [
+  'flutter/cache_micro_manager',
+  'recipe_engine/file',
+  'recipe_engine/json',
+  'recipe_engine/path',
+  'recipe_engine/raw_io',
+  'recipe_engine/step',
+  'recipe_engine/properties',
+]
+
+
+from recipe_engine.post_process import MustRun
+
+from datetime import datetime
+from datetime import timedelta
+from unittest.mock import Mock
+
+
+def RunSteps(api):
+  cache_target_dir = api.path['cache'].join('osx_sdk')
+
+  fake_dirdep_1_path = cache_target_dir.join('fake_dep_package_1')
+  fake_filedep_1_path = cache_target_dir.join('fake_dep_file_1')
+  fake_filedep_2_path = cache_target_dir.join('fake_dep_file_2')
+
+  fake_expired_file = cache_target_dir.join('fake_expired_file')
+
+  cache_file_name = cache_target_dir.join('.osx_sdk_cache_metadata.json')
+
+  api.path.mock_add_directory(fake_dirdep_1_path)
+  api.path.mock_add_file(fake_filedep_1_path)
+  api.path.mock_add_file(fake_filedep_2_path)
+
+  api.path.mock_add_file(cache_file_name)
+  api.path.mock_add_file(fake_expired_file)
+
+  deps_list = ['fake_dep_package_1', 'fake_dep_file_1', 'new_dep_5']
+
+  api.cache_micro_manager.today = Mock(return_value=datetime(2023, 12, 15, 13, 43, 21, 621929))
+
+  api.step('run cache micro manager', api.cache_micro_manager.run(cache_target_dir, deps_list))
+
+def ComputeJsonFileData() -> str:
+  '''Compute relative test data to "today" for the datetimes used in testing.
+  '''
+  datetime_now = datetime(2023, 12, 15, 13, 43, 21, 621929)
+  datetime_removal_delta = timedelta(days=30)
+
+  fake_dep_file_1_updated = datetime.strftime(datetime_now, "%m/%d/%Y, %H:%M:%S")
+  fake_dep_file_1_removal = datetime.strftime(datetime_now + datetime_removal_delta, "%m/%d/%Y, %H:%M:%S")
+
+  fake_dep_package_1_updated = datetime.strftime(datetime_now, "%m/%d/%Y, %H:%M:%S")
+  fake_dep_package_1_removal = datetime.strftime(datetime_now + datetime_removal_delta, "%m/%d/%Y, %H:%M:%S")
+
+  # TODO remove this code when the old time types have been updated.
+  fake_dep_package_old_time_delta = datetime_now - timedelta(days=60)
+  fake_dep_package_old_time_updated = datetime.strftime(fake_dep_package_old_time_delta, "%m/%d/%Y")
+  fake_dep_package_old_time_removal = datetime.strftime(fake_dep_package_old_time_delta + datetime_removal_delta, "%m/%d/%Y")
+
+  fake_dep_package_2_time_and_delta = datetime_now - timedelta(days=365)
+  fake_dep_package_2_updated = datetime.strftime(fake_dep_package_2_time_and_delta, "%m/%d/%Y, %H:%M:%S")
+  fake_dep_package_2_removal = datetime.strftime(fake_dep_package_2_time_and_delta + datetime_removal_delta, "%m/%d/%Y, %H:%M:%S")
+
+  fake_expired_file_time_and_delta = datetime_now - timedelta(days=380)
+  fake_expired_file_updated = datetime.strftime(fake_expired_file_time_and_delta, "%m/%d/%Y, %H:%M:%S")
+  fake_expired_file_removal = datetime.strftime(fake_expired_file_time_and_delta + datetime_removal_delta, "%m/%d/%Y, %H:%M:%S")
+
+  dep_not_in_dir_time_and_delta = datetime_now - timedelta(days=720)
+  dep_not_in_dir_updated = datetime.strftime(dep_not_in_dir_time_and_delta, "%m/%d/%Y, %H:%M:%S")
+  dep_not_in_dir_removal = datetime.strftime(dep_not_in_dir_time_and_delta + datetime_removal_delta, "%m/%d/%Y, %H:%M:%S")
+
+  return '''
+        [
+            {{
+                \"name\": \"fake_dep_file_1\",
+                \"updated_date\": \"{0}\",
+                \"removal_date\": \"{1}\"
+            }},
+            {{
+                \"name\": \"fake_dep_package_1\",
+                \"updated_date\": \"{2}\",
+                \"removal_date\": \"{3}\"
+            }},
+            {{
+                \"name\": \"fake_dep_package_2\",
+                \"updated_date\": \"{4}\",
+                \"removal_date\": \"{5}\"
+            }},
+            {{
+                \"name\": \"fake_expired_file\",
+                \"updated_date\": \"{6}\",
+                \"removal_date\": \"{7}\"
+            }},
+            {{
+                \"name\": \"dep_not_in_dir\",
+                \"updated_date\": \"{8}\",
+                \"removal_date\": \"{9}\"
+            }},
+            {{
+                \"name\": \"fake_dep_package_old_time\",
+                \"updated_date\": \"{10}\",
+                \"removal_date\": \"{11}\"
+            }}
+        ]
+        '''.format(
+          fake_dep_file_1_updated,
+          fake_dep_file_1_removal,
+          fake_dep_package_1_updated,
+          fake_dep_package_1_removal,
+          fake_dep_package_2_updated,
+          fake_dep_package_2_removal,
+          fake_expired_file_updated,
+          fake_expired_file_removal,
+          dep_not_in_dir_updated,
+          dep_not_in_dir_removal,
+          fake_dep_package_old_time_updated,
+          fake_dep_package_old_time_removal,
+        )
+
+
+def GenTests(api):
+  yield (
+    api.test(
+      'cache_metadata_exists_is_created',
+      api.step_data(
+        "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading metadata file [CACHE]/osx_sdk/.osx_sdk_cache_metadata.json.Reading [CACHE]/osx_sdk/.osx_sdk_cache_metadata.json",
+        api.file.read_text(
+        ComputeJsonFileData())
+      ),
+      api.step_data(
+        'Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk',
+        api.file.listdir(['fake_dep_file_1', 'fake_dep_package_1', 'fake_dep_package_old_time', 'fake_dep_package_2', 'fake_expired_file', 'new_dep_5', '.osx_sdk_cache_metadata.json'])
+      ),
+      api.post_check(
+        MustRun,
+        'Running Cache Micro Manager on [CACHE]/osx_sdk..Writing cache metadata file.'
+      )
+    )
+  )
diff --git a/recipe_modules/cache_micro_manager/examples/no_cache_file.expected/cache_metadata_exists_is_created.json b/recipe_modules/cache_micro_manager/examples/no_cache_file.expected/cache_metadata_exists_is_created.json
new file mode 100644
index 0000000..704b7eb
--- /dev/null
+++ b/recipe_modules/cache_micro_manager/examples/no_cache_file.expected/cache_metadata_exists_is_created.json
@@ -0,0 +1,54 @@
+[
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_file_1@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_package_1@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_dep_package_2@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/fake_expired_file@@@",
+      "@@@STEP_LOG_LINE@listdir@[CACHE]/osx_sdk/new_dep_5@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[{\"name\": \"[CACHE]/osx_sdk/fake_dep_file_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_2\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_expired_file\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/new_dep_5\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}]",
+      "[CACHE]/osx_sdk/.osx_sdk_cache_metadata.json"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Writing cache metadata file.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_LINE@.osx_sdk_cache_metadata.json@[{\"name\": \"[CACHE]/osx_sdk/fake_dep_file_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_1\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_dep_package_2\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/fake_expired_file\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}, {\"name\": \"[CACHE]/osx_sdk/new_dep_5\", \"updated_date\": \"12/15/2023, 13:43:21\", \"removal_date\": \"01/14/2024, 13:43:21\"}]@@@",
+      "@@@STEP_LOG_END@.osx_sdk_cache_metadata.json@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "run cache micro manager"
+  },
+  {
+    "name": "$result"
+  }
+]
\ No newline at end of file
diff --git a/recipe_modules/cache_micro_manager/examples/no_cache_file.py b/recipe_modules/cache_micro_manager/examples/no_cache_file.py
new file mode 100644
index 0000000..25af149
--- /dev/null
+++ b/recipe_modules/cache_micro_manager/examples/no_cache_file.py
@@ -0,0 +1,50 @@
+DEPS = [
+  'flutter/cache_micro_manager',
+  'recipe_engine/file',
+  'recipe_engine/path',
+  'recipe_engine/raw_io',
+  'recipe_engine/step',
+  'recipe_engine/properties',
+]
+
+from recipe_engine.post_process import MustRun
+
+from datetime import datetime
+from unittest.mock import Mock
+
+def RunSteps(api):
+  cache_target_dir = api.path['cache'].join('osx_sdk')
+
+  fake_dirdep_1_path = cache_target_dir.join('fake_dep_package_1')
+  fake_filedep_1_path = cache_target_dir.join('fake_dep_file_1')
+  fake_filedep_2_path = cache_target_dir.join('fake_dep_file_2')
+
+  fake_expired_file = cache_target_dir.join('fake_expired_file')
+
+  api.path.mock_add_directory(fake_dirdep_1_path)
+  api.path.mock_add_file(fake_filedep_1_path)
+  api.path.mock_add_file(fake_filedep_2_path)
+
+  api.path.mock_add_file(fake_expired_file)
+
+  deps_list = ['fake_dep_package_1', 'fake_dep_file_1', 'new_dep_5']
+
+  api.cache_micro_manager.today = Mock(return_value=datetime(2023, 12, 15, 13, 43, 21, 621929))
+
+  api.step('run cache micro manager', api.cache_micro_manager.run(cache_target_dir, deps_list))
+
+
+def GenTests(api):
+  yield (
+    api.test(
+      'cache_metadata_exists_is_created',
+      api.step_data(
+        'Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk',
+        api.file.listdir(['fake_dep_file_1', 'fake_dep_package_1', 'fake_dep_package_2', 'fake_expired_file', 'new_dep_5'])
+      ),
+      api.post_check(
+        MustRun,
+        'Running Cache Micro Manager on [CACHE]/osx_sdk..Writing cache metadata file.'
+      )
+    )
+  )
diff --git a/recipe_modules/flutter_deps/examples/full.expected/mac.json b/recipe_modules/flutter_deps/examples/full.expected/mac.json
index b3fa05c..efb41d4 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/mac.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/mac.json
@@ -812,6 +812,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -919,6 +966,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -1009,7 +1103,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -1025,6 +1119,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -1132,6 +1273,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/flutter_deps/examples/full.expected/mac_old.json b/recipe_modules/flutter_deps/examples/full.expected/mac_old.json
index 9d53de0..54ecd93 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/mac_old.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/mac_old.json
@@ -812,6 +812,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -919,6 +966,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -1009,7 +1103,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -1025,6 +1119,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -1132,6 +1273,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/__init__.py b/recipe_modules/osx_sdk/__init__.py
index 01dff5b..bd3108d 100644
--- a/recipe_modules/osx_sdk/__init__.py
+++ b/recipe_modules/osx_sdk/__init__.py
@@ -5,6 +5,7 @@
 DEPS = [
     'flutter/os_utils',
     'flutter/retry',
+    'flutter/cache_micro_manager',
     'recipe_engine/cipd',
     'recipe_engine/context',
     'recipe_engine/file',
diff --git a/recipe_modules/osx_sdk/api.py b/recipe_modules/osx_sdk/api.py
index 0ce2a63..fc6ad6c 100644
--- a/recipe_modules/osx_sdk/api.py
+++ b/recipe_modules/osx_sdk/api.py
@@ -203,6 +203,7 @@
   def _setup_osx_sdk(self, kind, devicelab):
     app = None
     self._clean_xcode_cache(devicelab)
+    self._micro_manage_cache(devicelab)
     app = self._ensure_sdk(kind, devicelab)
     self.m.os_utils.kill_simulators()
     self._select_xcode(app)
@@ -412,6 +413,13 @@
     self._install_runtimes(devicelab, app_dir, tool_dir, sdk_app, kind)
 
     return sdk_app
+  
+  def _micro_manage_cache(self, devicelab):
+    app_dir = self._xcode_dir(devicelab)
+    self.m.step("show app_dir", ['echo', app_dir])
+    self._show_xcode_cache()
+    self.m.cache_micro_manager.run(self.m.path['cache'].join(_XCODE_CACHE_PATH), [app_dir])
+    self._show_xcode_cache()
 
   def _show_xcode_cache(self):
     self.m.step(
diff --git a/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json b/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json
index a2142e2..b0ca432 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9c40b"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -116,6 +163,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9c40b"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -231,7 +325,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -247,6 +341,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9c40b"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -354,6 +495,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9c40b"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json b/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json
index ea0ab76..d8b88e4 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_12a7209"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -116,6 +163,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_12a7209"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -231,7 +325,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -247,6 +341,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/12a7209"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -354,6 +495,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/12a7209"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/explicit_invalid_runtime_version_with_mac_13.json b/recipe_modules/osx_sdk/examples/full.expected/explicit_invalid_runtime_version_with_mac_13.json
index 734b399..7426ef9 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/explicit_invalid_runtime_version_with_mac_13.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/explicit_invalid_runtime_version_with_mac_13.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/explicit_package_source.json b/recipe_modules/osx_sdk/examples/full.expected/explicit_package_source.json
index 740ab05..9d26638 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/explicit_package_source.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/explicit_package_source.json
@@ -22,6 +22,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -129,6 +176,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -244,7 +338,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -260,6 +354,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -367,6 +508,53 @@
     "name": "Cleaning up Xcode cache (4)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/explicit_runtime_version.json b/recipe_modules/osx_sdk/examples/full.expected/explicit_runtime_version.json
index 0405230..3c7c505 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/explicit_runtime_version.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/explicit_runtime_version.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef_runtime_ios-14-0_ios-13-0"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -226,7 +273,54 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [],
@@ -336,6 +430,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json b/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json
index 32da7dd..0f83c21 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json
@@ -22,6 +22,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -129,6 +176,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -244,7 +338,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -260,6 +354,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -367,6 +508,53 @@
     "name": "Cleaning up Xcode cache (4)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stderr.json b/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stderr.json
index 065b50b..62e036f 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stderr.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stderr.json
@@ -18,6 +18,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stdout.json b/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stdout.json
index 3dad70d..2ec6143 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stdout.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/failed_to_delete_runtimes_err_in_stdout.json
@@ -18,6 +18,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac.json b/recipe_modules/osx_sdk/examples/full.expected/mac.json
index 9e6df99..4c0d18c 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -116,6 +163,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -231,7 +325,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -247,6 +341,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -354,6 +495,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/9f2000"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_arm_host.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_arm_host.json
index fb9de50..0808139 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_arm_host.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_arm_host.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -124,6 +171,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -372,7 +466,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -388,6 +482,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -628,6 +769,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_cleanup_no_runtimes.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_cleanup_no_runtimes.json
index 81bcac0..d6bfbf2 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_cleanup_no_runtimes.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_cleanup_no_runtimes.json
@@ -18,6 +18,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -254,6 +301,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -502,7 +596,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -518,6 +612,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -758,6 +899,53 @@
     "name": "Cleaning up Xcode cache (4)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_already_mounted.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_already_mounted.json
index 6ba4bcf..dd1effb 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_already_mounted.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_already_mounted.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -324,7 +371,54 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [],
@@ -446,6 +540,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_build_verion_failure.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_build_verion_failure.json
index 42266f8..7d957fd 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_build_verion_failure.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_build_verion_failure.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_clean.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_clean.json
index 695ab40..c90337e 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_clean.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_clean.json
@@ -18,6 +18,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -372,7 +419,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (4)"
   },
   {
     "cmd": [
@@ -388,6 +435,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (6)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -569,6 +663,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_fails_to_find_dmg.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_fails_to_find_dmg.json
index 712e920..9161a17 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_fails_to_find_dmg.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_fails_to_find_dmg.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_not_mounted.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_not_mounted.json
index 3265675..acbc019 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_not_mounted.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_explicit_runtime_version_not_mounted.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -337,7 +384,54 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [],
@@ -459,6 +553,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/mac_13_x86_host.json b/recipe_modules/osx_sdk/examples/full.expected/mac_13_x86_host.json
index 32f4e18..1916ab6 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/mac_13_x86_host.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/mac_13_x86_host.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -124,6 +171,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -372,7 +466,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -388,6 +482,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -628,6 +769,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/no_runtime_version.json b/recipe_modules/osx_sdk/examples/full.expected/no_runtime_version.json
index 78acf66..8db4a14 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/no_runtime_version.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/no_runtime_version.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -173,6 +220,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -288,7 +382,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -304,6 +398,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -411,6 +552,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipe_modules/osx_sdk/examples/full.expected/xcode_install_fails_passes_on_retry.json b/recipe_modules/osx_sdk/examples/full.expected/xcode_install_fails_passes_on_retry.json
index 340d458..a97fc2c 100644
--- a/recipe_modules/osx_sdk/examples/full.expected/xcode_install_fails_passes_on_retry.json
+++ b/recipe_modules/osx_sdk/examples/full.expected/xcode_install_fails_passes_on_retry.json
@@ -9,6 +9,53 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode",
     "~followup_annotations": [
@@ -545,6 +592,53 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
@@ -907,7 +1001,7 @@
       "[CACHE]/osx_sdk"
     ],
     "infra_step": true,
-    "name": "Show xcode cache (2)"
+    "name": "Show xcode cache (6)"
   },
   {
     "cmd": [
@@ -923,6 +1017,53 @@
     "name": "Cleaning up Xcode cache (2)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (3)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (7)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (3).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (8)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (3)"
   },
@@ -1163,6 +1304,53 @@
     "name": "Cleaning up Xcode cache (3)"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "infra_step": true,
+    "name": "show app_dir (4)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (9)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (4).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "name": "Show xcode cache (10)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (4)"
   },
diff --git a/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json b/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json
index c6512cf..7528bdc 100644
--- a/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json
+++ b/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json
@@ -625,6 +625,189 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -970,6 +1153,189 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json b/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json
index 1fad56f..8e50b5c 100644
--- a/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json
+++ b/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json
@@ -625,6 +625,189 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -970,6 +1153,189 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/devicelab/devicelab_drone.expected/xcode-devicelab-timeout.json b/recipes/devicelab/devicelab_drone.expected/xcode-devicelab-timeout.json
index 978b4a1..d3c10bd 100644
--- a/recipes/devicelab/devicelab_drone.expected/xcode-devicelab-timeout.json
+++ b/recipes/devicelab/devicelab_drone.expected/xcode-devicelab-timeout.json
@@ -625,6 +625,189 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -970,6 +1153,189 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json b/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json
index e4da623..e355891 100644
--- a/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json
+++ b/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json
@@ -625,6 +625,189 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -970,6 +1153,189 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk",
+      "USE_EMULATOR": "False"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/devicelab/devicelab_drone_build_test.expected/xcode-mac.json b/recipes/devicelab/devicelab_drone_build_test.expected/xcode-mac.json
index 9a91bc0..adeacf6 100644
--- a/recipes/devicelab/devicelab_drone_build_test.expected/xcode-mac.json
+++ b/recipes/devicelab/devicelab_drone_build_test.expected/xcode-mac.json
@@ -541,6 +541,185 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -879,6 +1058,185 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/devicelab/devicelab_test_drone.expected/mac.json b/recipes/devicelab/devicelab_test_drone.expected/mac.json
index 4694714..63345fd 100644
--- a/recipes/devicelab/devicelab_test_drone.expected/mac.json
+++ b/recipes/devicelab/devicelab_test_drone.expected/mac.json
@@ -648,6 +648,185 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -986,6 +1165,185 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "/opt/flutter/xcode/deadbeef"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "cwd": "[CLEANUP]/tmp_tmp_1/flutter sdk/dev/devicelab",
+    "env": {
+      "ARTIFACT_HUB_REPOSITORY": "artifactregistry://us-maven.pkg.dev/artifact-foundry-prod/maven-3p",
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "FLUTTER_LOGS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]/flutter_logs_dir",
+      "GIT_BRANCH": "master",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "darwin",
+      "PUB_CACHE": "[START_DIR]/.pub-cache",
+      "REVISION": "12345abcde12345abcde12345abcde12345abcde",
+      "SDK_CHECKOUT_PATH": "[CLEANUP]/tmp_tmp_1/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin",
+        "[CLEANUP]/tmp_tmp_1/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "project:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/engine_v2/builder.expected/mac.json b/recipes/engine_v2/builder.expected/mac.json
index ab2fc6d..6ac7025 100644
--- a/recipes/engine_v2/builder.expected/mac.json
+++ b/recipes/engine_v2/builder.expected/mac.json
@@ -466,6 +466,101 @@
     "name": "Show xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (2)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk."
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (3)"
+  },
+  {
     "cmd": [],
     "name": "install xcode"
   },
@@ -657,6 +752,101 @@
     "name": "Cleaning up Xcode cache"
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "show app_dir (2)"
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (4)"
+  },
+  {
+    "cmd": [],
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2)"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Show xcode cache (5)"
+  },
+  {
     "cmd": [],
     "name": "install xcode (2)"
   },
diff --git a/recipes/engine_v2/engine_v2.expected/basic_mac.json b/recipes/engine_v2/engine_v2.expected/basic_mac.json
index 6270110..fb4412e 100644
--- a/recipes/engine_v2/engine_v2.expected/basic_mac.json
+++ b/recipes/engine_v2/engine_v2.expected/basic_mac.json
@@ -667,6 +667,113 @@
     ]
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.show app_dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Global generators.install xcode",
     "~followup_annotations": [
@@ -876,6 +983,113 @@
     ]
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.show app_dir (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (4)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk. (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:prod"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (5)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Global generators.install xcode (2)",
     "~followup_annotations": [
diff --git a/recipes/engine_v2/engine_v2.expected/basic_mac_dart_internal.json b/recipes/engine_v2/engine_v2.expected/basic_mac_dart_internal.json
index be5023d..8467a19 100644
--- a/recipes/engine_v2/engine_v2.expected/basic_mac_dart_internal.json
+++ b/recipes/engine_v2/engine_v2.expected/basic_mac_dart_internal.json
@@ -720,6 +720,113 @@
     ]
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.show app_dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Global generators.install xcode",
     "~followup_annotations": [
@@ -929,6 +1036,113 @@
     ]
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.show app_dir (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (4)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk. (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "dart-internal:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (5)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Global generators.install xcode (2)",
     "~followup_annotations": [
diff --git a/recipes/engine_v2/engine_v2.expected/codesign_release_branch.json b/recipes/engine_v2/engine_v2.expected/codesign_release_branch.json
index 80d3dc8..c956d66 100644
--- a/recipes/engine_v2/engine_v2.expected/codesign_release_branch.json
+++ b/recipes/engine_v2/engine_v2.expected/codesign_release_branch.json
@@ -1143,6 +1143,113 @@
     ]
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.show app_dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk.",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk..Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (3)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Global generators.install xcode",
     "~followup_annotations": [
@@ -1352,6 +1459,113 @@
     ]
   },
   {
+    "cmd": [
+      "echo",
+      "[CACHE]/osx_sdk/xcode_9f2000"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.show app_dir (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (4)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [],
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk. (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "listdir",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Running Cache Micro Manager on [CACHE]/osx_sdk. (2).Reading cache directory [CACHE]/osx_sdk",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@",
+      "@@@STEP_LOG_END@listdir@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "ls",
+      "-al",
+      "[CACHE]/osx_sdk"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "proj:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "Global generators.Show xcode cache (5)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Global generators.install xcode (2)",
     "~followup_annotations": [