[checkout] Copy `cipd` into checkout.

The CIPD bootstrap path is currently broken, this works around it by
copying the version that is used in VM provisioning into the checkout
directory.  Jiri should update this to the version it expects.

BUG: chromium:1050356
Change-Id: I982bf1f6e4796d10f780bf9616427a2be4db54f8
diff --git a/recipe_modules/artifacts/examples/full.expected/basic.json b/recipe_modules/artifacts/examples/full.expected/basic.json
index 0e0e466..9ee8cb9 100644
--- a/recipe_modules/artifacts/examples/full.expected/basic.json
+++ b/recipe_modules/artifacts/examples/full.expected/basic.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/__init__.py b/recipe_modules/checkout/__init__.py
index a2143be..30ba1cb 100644
--- a/recipe_modules/checkout/__init__.py
+++ b/recipe_modules/checkout/__init__.py
@@ -12,6 +12,7 @@
     'recipe_engine/file',
     'recipe_engine/json',
     'recipe_engine/path',
+    'recipe_engine/platform',
     'recipe_engine/properties',
     'recipe_engine/raw_io',
     'recipe_engine/source_manifest',
diff --git a/recipe_modules/checkout/api.py b/recipe_modules/checkout/api.py
index 2aa64e9..c2b8c58 100644
--- a/recipe_modules/checkout/api.py
+++ b/recipe_modules/checkout/api.py
@@ -147,7 +147,7 @@
         attributes (seq(str)): A list of jiri manifest attributes; projects or
           packages with matching attributes - otherwise regarded as optional -
           will be downloaded.
-        build_input (buildbucket.build_pb2.Build.Input): The input to a buildbucket
+        build_input (buildbucket.build_pb2.Build.Input):uThe input to a buildbucket
             build.
         timeout_secs (int): A timeout for jiri update in seconds.
         run_hooks (bool): Whether or not to run the hooks.
@@ -157,6 +157,14 @@
     """
     self.m.jiri.init(directory=path, attributes=attributes)
 
+    # HACK(crbug.com/1050356): This is seeding jiri while the boot strap is broken,
+    # remove once bug is fixed.
+    if self.m.platform.is_linux:
+      self.m.file.ensure_directory('ensure cipd bin dir',
+                                   path.join('.jiri_root', 'bin'))
+      self.m.file.copy('cp cipd', '/usr/local/bin/cipd',
+                       path.join('.jiri_root', 'bin', 'cipd'))
+
     if build_input and build_input.gerrit_changes:
       gerrit_change = build_input.gerrit_changes[0]
       rest = build_input.gerrit_changes[1:]
@@ -295,8 +303,9 @@
               timeout=timeout_secs)
 
       if run_hooks:
-        self.m.jiri.run_hooks(local_manifest=True)
+        # HACK(crbug.com/1050356): Swap the ordering back, maybe?
         self.m.jiri.fetch_packages(local_manifest=True)
+        self.m.jiri.run_hooks(local_manifest=True)
 
   @_nest
   def from_commit(self, path, manifest, remote, commit, project, run_hooks,
diff --git a/recipe_modules/checkout/examples/full.expected/default.json b/recipe_modules/checkout/examples/full.expected/default.json
index 0a644a5..5e73f12 100644
--- a/recipe_modules/checkout/examples/full.expected/default.json
+++ b/recipe_modules/checkout/examples/full.expected/default.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -187,22 +222,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -219,6 +238,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/examples/full.expected/fail_to_patch_over_gerrit_change.json b/recipe_modules/checkout/examples/full.expected/fail_to_patch_over_gerrit_change.json
index c18b252..b949d73 100644
--- a/recipe_modules/checkout/examples/full.expected/fail_to_patch_over_gerrit_change.json
+++ b/recipe_modules/checkout/examples/full.expected/fail_to_patch_over_gerrit_change.json
@@ -60,6 +60,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
diff --git a/recipe_modules/checkout/examples/full.expected/fail_to_patch_same_project_many_times.json b/recipe_modules/checkout/examples/full.expected/fail_to_patch_same_project_many_times.json
index 7951112..322e451 100644
--- a/recipe_modules/checkout/examples/full.expected/fail_to_patch_same_project_many_times.json
+++ b/recipe_modules/checkout/examples/full.expected/fail_to_patch_same_project_many_times.json
@@ -60,6 +60,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
diff --git a/recipe_modules/checkout/examples/full.expected/global_integration_ci.json b/recipe_modules/checkout/examples/full.expected/global_integration_ci.json
index 3a402e5..4a8c77b 100644
--- a/recipe_modules/checkout/examples/full.expected/global_integration_ci.json
+++ b/recipe_modules/checkout/examples/full.expected/global_integration_ci.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipe_modules/checkout/examples/full.expected/global_integration_release_ci.json b/recipe_modules/checkout/examples/full.expected/global_integration_release_ci.json
index 39e53a2..afdfdee 100644
--- a/recipe_modules/checkout/examples/full.expected/global_integration_release_ci.json
+++ b/recipe_modules/checkout/examples/full.expected/global_integration_release_ci.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipe_modules/checkout/examples/full.expected/global_integration_release_ci_invalid_tag.json b/recipe_modules/checkout/examples/full.expected/global_integration_release_ci_invalid_tag.json
index d6ffdbf..d4f14cf 100644
--- a/recipe_modules/checkout/examples/full.expected/global_integration_release_ci_invalid_tag.json
+++ b/recipe_modules/checkout/examples/full.expected/global_integration_release_ci_invalid_tag.json
@@ -61,6 +61,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipe_modules/checkout/examples/full.expected/global_integration_tryjob.json b/recipe_modules/checkout/examples/full.expected/global_integration_tryjob.json
index 67beeb5..2419446 100644
--- a/recipe_modules/checkout/examples/full.expected/global_integration_tryjob.json
+++ b/recipe_modules/checkout/examples/full.expected/global_integration_tryjob.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -209,22 +244,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -241,6 +260,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/examples/full.expected/local_integration_ci.json b/recipe_modules/checkout/examples/full.expected/local_integration_ci.json
index 1f46aad..23b7806 100644
--- a/recipe_modules/checkout/examples/full.expected/local_integration_ci.json
+++ b/recipe_modules/checkout/examples/full.expected/local_integration_ci.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipe_modules/checkout/examples/full.expected/local_integration_tryjob.json b/recipe_modules/checkout/examples/full.expected/local_integration_tryjob.json
index 0a644a5..5e73f12 100644
--- a/recipe_modules/checkout/examples/full.expected/local_integration_tryjob.json
+++ b/recipe_modules/checkout/examples/full.expected/local_integration_tryjob.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -187,22 +222,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -219,6 +238,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_failure.json b/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_failure.json
index 6333f47..6ddf990 100644
--- a/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_failure.json
+++ b/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_failure.json
@@ -60,6 +60,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
diff --git a/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_rebase_failure.json b/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_rebase_failure.json
index 0b4cbc9..d3a4c44 100644
--- a/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_rebase_failure.json
+++ b/recipe_modules/checkout/examples/full.expected/local_integration_tryjob_patch_rebase_failure.json
@@ -60,6 +60,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
diff --git a/recipe_modules/checkout/examples/full.expected/should_ignore_patches_for_non_dependant_projects.json b/recipe_modules/checkout/examples/full.expected/should_ignore_patches_for_non_dependant_projects.json
index ea7cea4..5d1a957 100644
--- a/recipe_modules/checkout/examples/full.expected/should_ignore_patches_for_non_dependant_projects.json
+++ b/recipe_modules/checkout/examples/full.expected/should_ignore_patches_for_non_dependant_projects.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -235,22 +270,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -267,6 +286,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/examples/full.expected/sso_manifest_remote.json b/recipe_modules/checkout/examples/full.expected/sso_manifest_remote.json
index 9c8231d..b00b44e 100644
--- a/recipe_modules/checkout/examples/full.expected/sso_manifest_remote.json
+++ b/recipe_modules/checkout/examples/full.expected/sso_manifest_remote.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipe_modules/checkout/examples/full.expected/subbuild_from_spec.json b/recipe_modules/checkout/examples/full.expected/subbuild_from_spec.json
index 0a644a5..5e73f12 100644
--- a/recipe_modules/checkout/examples/full.expected/subbuild_from_spec.json
+++ b/recipe_modules/checkout/examples/full.expected/subbuild_from_spec.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -187,22 +222,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -219,6 +238,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/examples/full.expected/tryjob_with_patchfile.json b/recipe_modules/checkout/examples/full.expected/tryjob_with_patchfile.json
index 9e4f867..c299d5b 100644
--- a/recipe_modules/checkout/examples/full.expected/tryjob_with_patchfile.json
+++ b/recipe_modules/checkout/examples/full.expected/tryjob_with_patchfile.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -259,22 +294,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -291,6 +310,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/checkout/examples/full.expected/use_gitiles_commit_from_properties.json b/recipe_modules/checkout/examples/full.expected/use_gitiles_commit_from_properties.json
index c13c64c..db4100d 100644
--- a/recipe_modules/checkout/examples/full.expected/use_gitiles_commit_from_properties.json
+++ b/recipe_modules/checkout/examples/full.expected/use_gitiles_commit_from_properties.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipe_modules/checkout/examples/full.expected/when_patchfile_host_has_protocol.json b/recipe_modules/checkout/examples/full.expected/when_patchfile_host_has_protocol.json
index 8d1e49a..ed672f5 100644
--- a/recipe_modules/checkout/examples/full.expected/when_patchfile_host_has_protocol.json
+++ b/recipe_modules/checkout/examples/full.expected/when_patchfile_host_has_protocol.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -259,22 +294,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -291,6 +310,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/clang_format.json b/recipe_modules/tricium_analyze/examples/full.expected/clang_format.json
index 4fa1800..733dd8e 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/clang_format.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/clang_format.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy.json b/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy.json
index 2fc33ba..1cc4d46 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_bad_offset.json b/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_bad_offset.json
index 5332860..ffddd57 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_bad_offset.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_bad_offset.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_error.json b/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_error.json
index 8e9a1b1..16700c7 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_error.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/clang_tidy_error.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/dartfmt.json b/recipe_modules/tricium_analyze/examples/full.expected/dartfmt.json
index d2ea826..de4ba0b 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/dartfmt.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/dartfmt.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/fidl_format.json b/recipe_modules/tricium_analyze/examples/full.expected/fidl_format.json
index a3b4583..7ca5e1c 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/fidl_format.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/fidl_format.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/fidl_lint.json b/recipe_modules/tricium_analyze/examples/full.expected/fidl_lint.json
index 1c32346..777414f 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/fidl_lint.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/fidl_lint.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/gn_format.json b/recipe_modules/tricium_analyze/examples/full.expected/gn_format.json
index 08e6973..06c2c3d 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/gn_format.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/gn_format.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/go_vet.json b/recipe_modules/tricium_analyze/examples/full.expected/go_vet.json
index 7760b93..6b22750 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/go_vet.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/go_vet.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/go_vet_no_warnings.json b/recipe_modules/tricium_analyze/examples/full.expected/go_vet_no_warnings.json
index b36272d..84ee0c4 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/go_vet_no_warnings.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/go_vet_no_warnings.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/gofmt.json b/recipe_modules/tricium_analyze/examples/full.expected/gofmt.json
index 1bf1fdc..4661dfb 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/gofmt.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/gofmt.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/no_analysis.json b/recipe_modules/tricium_analyze/examples/full.expected/no_analysis.json
index 73222f3..4350f12 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/no_analysis.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/no_analysis.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/rustfmt.json b/recipe_modules/tricium_analyze/examples/full.expected/rustfmt.json
index 9017cb6..79d022e 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/rustfmt.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/rustfmt.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/yapf-no-fx.json b/recipe_modules/tricium_analyze/examples/full.expected/yapf-no-fx.json
index 6520988..1bbf14b 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/yapf-no-fx.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/yapf-no-fx.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipe_modules/tricium_analyze/examples/full.expected/yapf.json b/recipe_modules/tricium_analyze/examples/full.expected/yapf.json
index 6520988..1bbf14b 100644
--- a/recipe_modules/tricium_analyze/examples/full.expected/yapf.json
+++ b/recipe_modules/tricium_analyze/examples/full.expected/yapf.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/3p_prebuilts.expected/ci_cipd_new.json b/recipes/3p_prebuilts.expected/ci_cipd_new.json
index 83b8aaf..b37a6bf 100644
--- a/recipes/3p_prebuilts.expected/ci_cipd_new.json
+++ b/recipes/3p_prebuilts.expected/ci_cipd_new.json
@@ -66,6 +66,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/3p_prebuilts/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/3p_prebuilts/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/3p_prebuilts.expected/ci_cipd_up_to_date.json b/recipes/3p_prebuilts.expected/ci_cipd_up_to_date.json
index c0833c3..8dbd89a 100644
--- a/recipes/3p_prebuilts.expected/ci_cipd_up_to_date.json
+++ b/recipes/3p_prebuilts.expected/ci_cipd_up_to_date.json
@@ -66,6 +66,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/3p_prebuilts/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/3p_prebuilts/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/3p_prebuilts.expected/try.json b/recipes/3p_prebuilts.expected/try.json
index 7dba89d..b6f9826 100644
--- a/recipes/3p_prebuilts.expected/try.json
+++ b/recipes/3p_prebuilts.expected/try.json
@@ -65,6 +65,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/3p_prebuilts/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/3p_prebuilts/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.checkout.ensure gerrit",
     "~followup_annotations": [
@@ -197,23 +232,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/3p_prebuilts",
-    "infra_step": true,
-    "name": "checkout.checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@2@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -231,6 +249,23 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/3p_prebuilts",
+    "infra_step": true,
+    "name": "checkout.checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/cobalt.expected/ci.json b/recipes/cobalt.expected/ci.json
index fea0a98..89e0108 100644
--- a/recipes/cobalt.expected/ci.json
+++ b/recipes/cobalt.expected/ci.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/cobalt.expected/cq_try.json b/recipes/cobalt.expected/cq_try.json
index c92bd0c..6802093 100644
--- a/recipes/cobalt.expected/cq_try.json
+++ b/recipes/cobalt.expected/cq_try.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -185,22 +220,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -217,6 +236,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/cobalt_config.expected/ci.json b/recipes/cobalt_config.expected/ci.json
index f1c2ac5..248180f 100644
--- a/recipes/cobalt_config.expected/ci.json
+++ b/recipes/cobalt_config.expected/ci.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/cobalt_config.expected/cq_try.json b/recipes/cobalt_config.expected/cq_try.json
index 2843a32..5af504d 100644
--- a/recipes/cobalt_config.expected/cq_try.json
+++ b/recipes/cobalt_config.expected/cq_try.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -207,22 +242,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -239,6 +258,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/code_search.expected/no_diff.json b/recipes/code_search.expected/no_diff.json
index 681a8e3..67d476d 100644
--- a/recipes/code_search.expected/no_diff.json
+++ b/recipes/code_search.expected/no_diff.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/code_search.expected/yes_diff.json b/recipes/code_search.expected/yes_diff.json
index c486a30..c57a3a1 100644
--- a/recipes/code_search.expected/yes_diff.json
+++ b/recipes/code_search.expected/yes_diff.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/doc_checker.expected/default_ci.json b/recipes/doc_checker.expected/default_ci.json
index 2c192cf..0399035 100644
--- a/recipes/doc_checker.expected/default_ci.json
+++ b/recipes/doc_checker.expected/default_ci.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/doc_checker.expected/default_cq.json b/recipes/doc_checker.expected/default_cq.json
index 416c836..bdc2fae 100644
--- a/recipes/doc_checker.expected/default_cq.json
+++ b/recipes/doc_checker.expected/default_cq.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/docs_roller.expected/fuchsia_docs.json b/recipes/docs_roller.expected/fuchsia_docs.json
index febd8e0..43803fc 100644
--- a/recipes/docs_roller.expected/fuchsia_docs.json
+++ b/recipes/docs_roller.expected/fuchsia_docs.json
@@ -90,6 +90,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/docs_roller.expected/zircon_docs.json b/recipes/docs_roller.expected/zircon_docs.json
index f1926d6..df5e0cc 100644
--- a/recipes/docs_roller.expected/zircon_docs.json
+++ b/recipes/docs_roller.expected/zircon_docs.json
@@ -90,6 +90,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/ffmpeg.expected/ci.json b/recipes/ffmpeg.expected/ci.json
index 2315563..8706619 100644
--- a/recipes/ffmpeg.expected/ci.json
+++ b/recipes/ffmpeg.expected/ci.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/ffmpeg.expected/cq.json b/recipes/ffmpeg.expected/cq.json
index 5253795..3c47063 100644
--- a/recipes/ffmpeg.expected/cq.json
+++ b/recipes/ffmpeg.expected/cq.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/ffmpeg.expected/default.json b/recipes/ffmpeg.expected/default.json
index d5639b3..2096517 100644
--- a/recipes/ffmpeg.expected/default.json
+++ b/recipes/ffmpeg.expected/default.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/firebase_docs.expected/firebase_docs.json b/recipes/firebase_docs.expected/firebase_docs.json
index fe9f3db..8d3c122 100644
--- a/recipes/firebase_docs.expected/firebase_docs.json
+++ b/recipes/firebase_docs.expected/firebase_docs.json
@@ -380,6 +380,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout fuchsia.checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout fuchsia.checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia/build.expected/build_type_release_not_run_tests.json b/recipes/fuchsia/build.expected/build_type_release_not_run_tests.json
index 1e06eb2..dfdd9ba 100644
--- a/recipes/fuchsia/build.expected/build_type_release_not_run_tests.json
+++ b/recipes/fuchsia/build.expected/build_type_release_not_run_tests.json
@@ -146,6 +146,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia/build.expected/default.json b/recipes/fuchsia/build.expected/default.json
index 7fbaa6c..e215f8e 100644
--- a/recipes/fuchsia/build.expected/default.json
+++ b/recipes/fuchsia/build.expected/default.json
@@ -158,6 +158,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia/build.expected/default_cq.json b/recipes/fuchsia/build.expected/default_cq.json
index 08080ac..b15299c 100644
--- a/recipes/fuchsia/build.expected/default_cq.json
+++ b/recipes/fuchsia/build.expected/default_cq.json
@@ -257,6 +257,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/gerrit/gerrit",
       "change-detail",
       "-host",
@@ -351,22 +386,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -383,6 +402,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/fuchsia/build.expected/non-numeric-parent-id.json b/recipes/fuchsia/build.expected/non-numeric-parent-id.json
index ab98e00..2d6e3ac 100644
--- a/recipes/fuchsia/build.expected/non-numeric-parent-id.json
+++ b/recipes/fuchsia/build.expected/non-numeric-parent-id.json
@@ -158,6 +158,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia/build.expected/not_test_in_shards.json b/recipes/fuchsia/build.expected/not_test_in_shards.json
index cae0246..b9edd3c 100644
--- a/recipes/fuchsia/build.expected/not_test_in_shards.json
+++ b/recipes/fuchsia/build.expected/not_test_in_shards.json
@@ -154,6 +154,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia/build.expected/sdk.json b/recipes/fuchsia/build.expected/sdk.json
index 7c057ce..8e8fa44 100644
--- a/recipes/fuchsia/build.expected/sdk.json
+++ b/recipes/fuchsia/build.expected/sdk.json
@@ -145,6 +145,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia/build.expected/spec_remote_cq.json b/recipes/fuchsia/build.expected/spec_remote_cq.json
index 630e3f9..a9588d8 100644
--- a/recipes/fuchsia/build.expected/spec_remote_cq.json
+++ b/recipes/fuchsia/build.expected/spec_remote_cq.json
@@ -257,6 +257,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/gerrit/gerrit",
       "change-detail",
       "-host",
@@ -373,22 +408,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -405,6 +424,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json b/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
index 5c9bc21..10a1768 100644
--- a/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
+++ b/recipes/fuchsia/build.expected/spec_remote_cq_with_spec_revision.json
@@ -257,6 +257,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/gerrit/gerrit",
       "change-detail",
       "-host",
@@ -373,22 +408,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -405,6 +424,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/fuchsia_perf.expected/device_tests.json b/recipes/fuchsia_perf.expected/device_tests.json
index 00ef21c..d140361 100644
--- a/recipes/fuchsia_perf.expected/device_tests.json
+++ b/recipes/fuchsia_perf.expected/device_tests.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia_perf.expected/failed_run.json b/recipes/fuchsia_perf.expected/failed_run.json
index 1f2ee31..e4d0f1a 100644
--- a/recipes/fuchsia_perf.expected/failed_run.json
+++ b/recipes/fuchsia_perf.expected/failed_run.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia_perf.expected/missing_test_results.json b/recipes/fuchsia_perf.expected/missing_test_results.json
index 5f2cd09..7d0b593 100644
--- a/recipes/fuchsia_perf.expected/missing_test_results.json
+++ b/recipes/fuchsia_perf.expected/missing_test_results.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia_perf.expected/successful_run.json b/recipes/fuchsia_perf.expected/successful_run.json
index 30da695..498e504 100644
--- a/recipes/fuchsia_perf.expected/successful_run.json
+++ b/recipes/fuchsia_perf.expected/successful_run.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/fuchsia_perf.expected/with_patch.json b/recipes/fuchsia_perf.expected/with_patch.json
index 6db4d67..7b15aeb 100644
--- a/recipes/fuchsia_perf.expected/with_patch.json
+++ b/recipes/fuchsia_perf.expected/with_patch.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -187,22 +222,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -219,6 +238,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/fuchsia_perfcompare.expected/successful_run.json b/recipes/fuchsia_perfcompare.expected/successful_run.json
index e20f80a..9a84f23 100644
--- a/recipes/fuchsia_perfcompare.expected/successful_run.json
+++ b/recipes/fuchsia_perfcompare.expected/successful_run.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/jiri.expected/ci.json b/recipes/jiri.expected/ci.json
index 150fec6..07f8592 100644
--- a/recipes/jiri.expected/ci.json
+++ b/recipes/jiri.expected/ci.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/jiri.expected/ci_new.json b/recipes/jiri.expected/ci_new.json
index fc1e92b..1fb3f71 100644
--- a/recipes/jiri.expected/ci_new.json
+++ b/recipes/jiri.expected/ci_new.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/jiri.expected/cq_try.json b/recipes/jiri.expected/cq_try.json
index 24f05cb..cf4321b 100644
--- a/recipes/jiri.expected/cq_try.json
+++ b/recipes/jiri.expected/cq_try.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -207,22 +242,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -239,6 +258,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/licenses.expected/default_ci.json b/recipes/licenses.expected/default_ci.json
index c1ef431..3e24377 100644
--- a/recipes/licenses.expected/default_ci.json
+++ b/recipes/licenses.expected/default_ci.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/licenses.expected/default_cq.json b/recipes/licenses.expected/default_cq.json
index e33fdf8..553dbbb 100644
--- a/recipes/licenses.expected/default_cq.json
+++ b/recipes/licenses.expected/default_cq.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/linux_sysroot.expected/basic.json b/recipes/linux_sysroot.expected/basic.json
index ab6ff3a..a93f9a4 100644
--- a/recipes/linux_sysroot.expected/basic.json
+++ b/recipes/linux_sysroot.expected/basic.json
@@ -66,6 +66,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/linux_sysroot/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/linux_sysroot/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/lockfile.expected/default.json b/recipes/lockfile.expected/default.json
index e76f70d..edbef58 100644
--- a/recipes/lockfile.expected/default.json
+++ b/recipes/lockfile.expected/default.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -207,22 +242,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -239,6 +258,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/luci_config.expected/starlark.json b/recipes/luci_config.expected/starlark.json
index 57aa6ac..eb844e4 100644
--- a/recipes/luci_config.expected/starlark.json
+++ b/recipes/luci_config.expected/starlark.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/prebuilt_host_tool.expected/cipd_has_revision.json b/recipes/prebuilt_host_tool.expected/cipd_has_revision.json
index 3318f08..3082cae 100644
--- a/recipes/prebuilt_host_tool.expected/cipd_has_revision.json
+++ b/recipes/prebuilt_host_tool.expected/cipd_has_revision.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/prebuilt_host_tool.expected/default.json b/recipes/prebuilt_host_tool.expected/default.json
index 161b45b..4907884 100644
--- a/recipes/prebuilt_host_tool.expected/default.json
+++ b/recipes/prebuilt_host_tool.expected/default.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/prebuilt_host_tool.expected/gn_target_with_trailing_fwd_slash.json b/recipes/prebuilt_host_tool.expected/gn_target_with_trailing_fwd_slash.json
index 0b78d1e..3e8a975 100644
--- a/recipes/prebuilt_host_tool.expected/gn_target_with_trailing_fwd_slash.json
+++ b/recipes/prebuilt_host_tool.expected/gn_target_with_trailing_fwd_slash.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/prebuilt_host_tool.expected/no_revision.json b/recipes/prebuilt_host_tool.expected/no_revision.json
index cc32dbe..7c4fa65 100644
--- a/recipes/prebuilt_host_tool.expected/no_revision.json
+++ b/recipes/prebuilt_host_tool.expected/no_revision.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/cq_try.json b/recipes/recipes.expected/cq_try.json
index efa5894..3f3d2b5 100644
--- a/recipes/recipes.expected/cq_try.json
+++ b/recipes/recipes.expected/cq_try.json
@@ -161,6 +161,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/gerrit/gerrit",
       "change-detail",
       "-host",
@@ -252,22 +287,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -284,6 +303,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/recipes.expected/fuchsia_recipe_unaffected.json b/recipes/recipes.expected/fuchsia_recipe_unaffected.json
index 646d6b7..23be62c 100644
--- a/recipes/recipes.expected/fuchsia_recipe_unaffected.json
+++ b/recipes/recipes.expected/fuchsia_recipe_unaffected.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/no_build_old_build_ignored_build.json b/recipes/recipes.expected/no_build_old_build_ignored_build.json
index d61d08d..3cb8052 100644
--- a/recipes/recipes.expected/no_build_old_build_ignored_build.json
+++ b/recipes/recipes.expected/no_build_old_build_ignored_build.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/no_latest_cl.json b/recipes/recipes.expected/no_latest_cl.json
index 388217c..5d8c3b9 100644
--- a/recipes/recipes.expected/no_latest_cl.json
+++ b/recipes/recipes.expected/no_latest_cl.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/recipe_proto.json b/recipes/recipes.expected/recipe_proto.json
index 8f047f8..8deee75 100644
--- a/recipes/recipes.expected/recipe_proto.json
+++ b/recipes/recipes.expected/recipe_proto.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/recipes.json b/recipes/recipes.expected/recipes.json
index 8d0e6c7..dcd423f 100644
--- a/recipes/recipes.expected/recipes.json
+++ b/recipes/recipes.expected/recipes.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/recipes_cfg.json b/recipes/recipes.expected/recipes_cfg.json
index d05a0fc..cc87143 100644
--- a/recipes/recipes.expected/recipes_cfg.json
+++ b/recipes/recipes.expected/recipes_cfg.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/recursive_ls.json b/recipes/recipes.expected/recursive_ls.json
index 52e6785..9ba4eaa 100644
--- a/recipes/recipes.expected/recursive_ls.json
+++ b/recipes/recipes.expected/recursive_ls.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/two_pass_one_skip.json b/recipes/recipes.expected/two_pass_one_skip.json
index 0d29ff1..fd5f726 100644
--- a/recipes/recipes.expected/two_pass_one_skip.json
+++ b/recipes/recipes.expected/two_pass_one_skip.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/recipes.expected/unittest_only.json b/recipes/recipes.expected/unittest_only.json
index 2cb53d3..e797e0f 100644
--- a/recipes/recipes.expected/unittest_only.json
+++ b/recipes/recipes.expected/unittest_only.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/global_ci.json b/recipes/sdk.expected/global_ci.json
index 14be695..8d3b22a 100644
--- a/recipes/sdk.expected/global_ci.json
+++ b/recipes/sdk.expected/global_ci.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/local_ci.json b/recipes/sdk.expected/local_ci.json
index 7ad84da..05d3b6a 100644
--- a/recipes/sdk.expected/local_ci.json
+++ b/recipes/sdk.expected/local_ci.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/local_ci_build_failure.json b/recipes/sdk.expected/local_ci_build_failure.json
index 81b2a0f..9c94897 100644
--- a/recipes/sdk.expected/local_ci_build_failure.json
+++ b/recipes/sdk.expected/local_ci_build_failure.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/local_ci_infra_failure.json b/recipes/sdk.expected/local_ci_infra_failure.json
index 038d8df..3822f6a 100644
--- a/recipes/sdk.expected/local_ci_infra_failure.json
+++ b/recipes/sdk.expected/local_ci_infra_failure.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/local_cq.json b/recipes/sdk.expected/local_cq.json
index 89f0567..8d21799 100644
--- a/recipes/sdk.expected/local_cq.json
+++ b/recipes/sdk.expected/local_cq.json
@@ -170,6 +170,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -300,22 +335,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "cwd": "[START_DIR]/fuchsia",
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -332,6 +351,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "cwd": "[START_DIR]/fuchsia",
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/sdk.expected/release_ci.json b/recipes/sdk.expected/release_ci.json
index ef87bce..6a05ae7 100644
--- a/recipes/sdk.expected/release_ci.json
+++ b/recipes/sdk.expected/release_ci.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/release_ci_image_failure.json b/recipes/sdk.expected/release_ci_image_failure.json
index 121b70b..d92411d 100644
--- a/recipes/sdk.expected/release_ci_image_failure.json
+++ b/recipes/sdk.expected/release_ci_image_failure.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk.expected/release_ci_new_upload.json b/recipes/sdk.expected/release_ci_new_upload.json
index 1fb5e19..035b256 100644
--- a/recipes/sdk.expected/release_ci_new_upload.json
+++ b/recipes/sdk.expected/release_ci_new_upload.json
@@ -159,6 +159,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk_subbuild.expected/basic.json b/recipes/sdk_subbuild.expected/basic.json
index 495f0aa..6f674f5 100644
--- a/recipes/sdk_subbuild.expected/basic.json
+++ b/recipes/sdk_subbuild.expected/basic.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk_trigger.expected/local_ci.json b/recipes/sdk_trigger.expected/local_ci.json
index a671605..221d13f 100644
--- a/recipes/sdk_trigger.expected/local_ci.json
+++ b/recipes/sdk_trigger.expected/local_ci.json
@@ -58,6 +58,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/sdk_trigger.expected/local_cq.json b/recipes/sdk_trigger.expected/local_cq.json
index 8db132d..a24aafd 100644
--- a/recipes/sdk_trigger.expected/local_cq.json
+++ b/recipes/sdk_trigger.expected/local_cq.json
@@ -57,6 +57,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -184,21 +219,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -214,6 +234,21 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/tools.expected/ci.json b/recipes/tools.expected/ci.json
index b34a51d..ec3d668 100644
--- a/recipes/tools.expected/ci.json
+++ b/recipes/tools.expected/ci.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/tools.expected/cq_try.json b/recipes/tools.expected/cq_try.json
index 56543a5..bbd81cb 100644
--- a/recipes/tools.expected/cq_try.json
+++ b/recipes/tools.expected/cq_try.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -207,22 +242,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -239,6 +258,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/tools.expected/publish_existing_pkg.json b/recipes/tools.expected/publish_existing_pkg.json
index f0bd504..0ed1575 100644
--- a/recipes/tools.expected/publish_existing_pkg.json
+++ b/recipes/tools.expected/publish_existing_pkg.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/tools.expected/publish_new_pkg.json b/recipes/tools.expected/publish_new_pkg.json
index 9b9c2b8..e3db2ff 100644
--- a/recipes/tools.expected/publish_new_pkg.json
+++ b/recipes/tools.expected/publish_new_pkg.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/tricium/tricium.expected/attribute disable.json b/recipes/tricium/tricium.expected/attribute disable.json
index bd0c510..07e070f 100644
--- a/recipes/tricium/tricium.expected/attribute disable.json
+++ b/recipes/tricium/tricium.expected/attribute disable.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -188,22 +223,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -220,6 +239,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/tricium/tricium.expected/default.json b/recipes/tricium/tricium.expected/default.json
index b4bc8ad..2e7e425 100644
--- a/recipes/tricium/tricium.expected/default.json
+++ b/recipes/tricium/tricium.expected/default.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -188,22 +223,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -220,6 +239,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/tricium/tricium.expected/with_cipd_packages.json b/recipes/tricium/tricium.expected/with_cipd_packages.json
index 199df52..4ccb5c9 100644
--- a/recipes/tricium/tricium.expected/with_cipd_packages.json
+++ b/recipes/tricium/tricium.expected/with_cipd_packages.json
@@ -58,6 +58,41 @@
     ]
   },
   {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "checkout.ensure gerrit",
     "~followup_annotations": [
@@ -188,22 +223,6 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
-      "run-hooks",
-      "-vv",
-      "-time",
-      "-j=50",
-      "-attempts=3",
-      "-local-manifest=true"
-    ],
-    "infra_step": true,
-    "name": "checkout.jiri run-hooks",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cipd/jiri/jiri",
       "fetch-packages",
       "-vv",
       "-time",
@@ -220,6 +239,22 @@
   {
     "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
+      "run-hooks",
+      "-vv",
+      "-time",
+      "-j=50",
+      "-attempts=3",
+      "-local-manifest=true"
+    ],
+    "infra_step": true,
+    "name": "checkout.jiri run-hooks",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "[START_DIR]/cipd/jiri/jiri",
       "source-manifest",
       "-vv",
       "-time",
diff --git a/recipes/zbi_test.expected/arm64-fail.json b/recipes/zbi_test.expected/arm64-fail.json
index 34398fd..487118e 100644
--- a/recipes/zbi_test.expected/arm64-fail.json
+++ b/recipes/zbi_test.expected/arm64-fail.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/arm64-flake.json b/recipes/zbi_test.expected/arm64-flake.json
index 43ed40e..0286164 100644
--- a/recipes/zbi_test.expected/arm64-flake.json
+++ b/recipes/zbi_test.expected/arm64-flake.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/arm64-pass.json b/recipes/zbi_test.expected/arm64-pass.json
index d4e8d2d..ab87522 100644
--- a/recipes/zbi_test.expected/arm64-pass.json
+++ b/recipes/zbi_test.expected/arm64-pass.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/arm64kernel_panic.json b/recipes/zbi_test.expected/arm64kernel_panic.json
index a8cc55b..e291eeb 100644
--- a/recipes/zbi_test.expected/arm64kernel_panic.json
+++ b/recipes/zbi_test.expected/arm64kernel_panic.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/x64-fail.json b/recipes/zbi_test.expected/x64-fail.json
index 042d9cc..9e61653 100644
--- a/recipes/zbi_test.expected/x64-fail.json
+++ b/recipes/zbi_test.expected/x64-fail.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/x64-flake.json b/recipes/zbi_test.expected/x64-flake.json
index 36b94ad..814dde2 100644
--- a/recipes/zbi_test.expected/x64-flake.json
+++ b/recipes/zbi_test.expected/x64-flake.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/x64-pass.json b/recipes/zbi_test.expected/x64-pass.json
index 3e4fa2f..41b60c6 100644
--- a/recipes/zbi_test.expected/x64-pass.json
+++ b/recipes/zbi_test.expected/x64-pass.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",
diff --git a/recipes/zbi_test.expected/x64kernel_panic.json b/recipes/zbi_test.expected/x64kernel_panic.json
index faa1ef8..39842b1 100644
--- a/recipes/zbi_test.expected/x64kernel_panic.json
+++ b/recipes/zbi_test.expected/x64kernel_panic.json
@@ -59,6 +59,41 @@
   },
   {
     "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "ensure-directory",
+      "--mode",
+      "0777",
+      "[START_DIR]/fuchsia/.jiri_root/bin"
+    ],
+    "infra_step": true,
+    "name": "checkout.ensure cipd bin dir",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
+      "vpython",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "/usr/local/bin/cipd",
+      "[START_DIR]/fuchsia/.jiri_root/bin/cipd"
+    ],
+    "infra_step": true,
+    "name": "checkout.cp cipd",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@1@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/jiri/jiri",
       "import",
       "-vv",