Apply toolchain setup before the checkout.

The setup command was nested and it was only applied when the cache was
explicitly mounted.

Change-Id: I9596e479561ef8cd15a2361e999b230374750800
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/49540
Reviewed-by: Ricardo Amador <ricardoamador@google.com>
Reviewed-by: Keyong Han <keyonghan@google.com>
Commit-Queue: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipe_modules/repo_util/api.py b/recipe_modules/repo_util/api.py
index dfa8b62..d971632 100644
--- a/recipe_modules/repo_util/api.py
+++ b/recipe_modules/repo_util/api.py
@@ -93,7 +93,7 @@
     if (not clobber) and (mount_git or
                           mount_builder) and (bucket != OFFICIAL_BUILD_BUCKET):
       self.m.cache.mount_cache('builder', force=True)
-      self._setup_win_toolchain(env)
+    self._setup_win_toolchain(env)
     # Grab any gclient custom variables passed as properties.
     local_custom_vars = self.m.shard_util_v2.unfreeze_dict(
         self.m.properties.get('gclient_variables', {})
diff --git a/recipe_modules/repo_util/examples/full.expected/win.json b/recipe_modules/repo_util/examples/full.expected/win.json
index 9638236..aa9f3fa 100644
--- a/recipe_modules/repo_util/examples/full.expected/win.json
+++ b/recipe_modules/repo_util/examples/full.expected/win.json
@@ -804,6 +804,40 @@
     "name": "ensure directory"
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -914,7 +948,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_suffixes": {
       "DEPOT_TOOLS_UPDATE": [
@@ -980,7 +1015,8 @@
     "cwd": "[START_DIR]\\engine",
     "env": {
       "DEPOT_TOOLS_WIN_TOOLCHAIN": "1",
-      "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root"
+      "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_suffixes": {
       "DEPOT_TOOLS_UPDATE": [
@@ -1010,7 +1046,8 @@
     "cwd": "[START_DIR]\\engine",
     "env": {
       "DEPOT_TOOLS_WIN_TOOLCHAIN": "1",
-      "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root"
+      "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_suffixes": {
       "DEPOT_TOOLS_UPDATE": [
@@ -1040,7 +1077,8 @@
     "cwd": "[START_DIR]\\engine",
     "env": {
       "DEPOT_TOOLS_WIN_TOOLCHAIN": "1",
-      "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root"
+      "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_suffixes": {
       "DEPOT_TOOLS_UPDATE": [
diff --git a/recipes/engine/engine.expected/win_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_flutter_main.json b/recipes/engine/engine.expected/win_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_flutter_main.json
+++ b/recipes/engine/engine.expected/win_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_font_subset_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_font_subset_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_no_lto_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_no_lto_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_no_lto_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_no_lto_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_no_lto_flutter_main.json b/recipes/engine/engine.expected/win_no_lto_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_no_lto_flutter_main.json
+++ b/recipes/engine/engine.expected/win_no_lto_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_no_lto_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_publish_cipd_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_flutter_main.json b/recipes/engine/engine.expected/win_publish_cipd_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_flutter_main.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_main.json b/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_main.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_no_lto_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_publish_cipd_no_lto_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_flutter_main.json b/recipes/engine/engine.expected/win_upload_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_font_subset_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_upload_font_subset_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_no_lto_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_no_lto_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_no_lto_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_no_lto_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_no_lto_flutter_main.json b/recipes/engine/engine.expected/win_upload_no_lto_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_no_lto_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_no_lto_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_no_lto_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_main.json b/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_main.json
index 3f2f541..fcc5d31 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_main.json b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_flutter-3.8-candidate.10.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
diff --git a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_main.json b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_main.json
index 04d6e7a..ca35e62 100644
--- a/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_main.json
+++ b/recipes/engine/engine.expected/win_upload_publish_cipd_no_lto_font_subset_flutter_main.json
@@ -266,6 +266,64 @@
     ]
   },
   {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "[CACHE]\\builder\\src\\build\\win_toolchain.json"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "copy win_toolchain_metadata"
+  },
+  {
+    "cmd": [
+      "vpython3",
+      "-u",
+      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+      "--json-output",
+      "/path/to/tmp/json",
+      "copy",
+      "[CACHE]\\builder\\vs_toolchain_root\\data.json",
+      "/path/to/tmp/"
+    ],
+    "infra_step": true,
+    "luci_context": {
+      "realm": {
+        "name": "flutter:flutter"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "read win toolchain metadata",
+    "~followup_annotations": [
+      "@@@STEP_LOG_LINE@data.json@{@@@",
+      "@@@STEP_LOG_LINE@data.json@  \"version\": \"2022\"@@@",
+      "@@@STEP_LOG_LINE@data.json@}@@@",
+      "@@@STEP_LOG_END@data.json@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "Checkout source code"
   },
@@ -306,7 +364,8 @@
       "GIT_TRACE2_EVENT": "[CLEANUP]\\trace2-event",
       "GIT_TRACE_CURL": "[CLEANUP]\\trace-curl",
       "GIT_TRACE_CURL_NO_DATA": "1",
-      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet"
+      "GIT_TRACE_PACKET": "[CLEANUP]\\trace-packet",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -395,7 +454,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -447,7 +507,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [
@@ -499,7 +560,8 @@
       "DEPOT_TOOLS_WIN_TOOLCHAIN_ROOT": "[CACHE]\\builder\\vs_toolchain_root",
       "FLUTTER_LOGS_DIR": "[CLEANUP]\\flutter_logs_dir",
       "FLUTTER_PREBUILT_DART_SDK": "True",
-      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir"
+      "FLUTTER_TEST_OUTPUTS_DIR": "[CLEANUP]\\flutter_logs_dir",
+      "GYP_MSVS_VERSION": "2022"
     },
     "env_prefixes": {
       "PATH": [