Fix recipe to work with starlark

Change-Id: Ibc8562c35fd3805a9e11d08e99ee63ce6a6a6964
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/24820
Reviewed-by: Takuto Ikuta <tikuta@google.com>
Commit-Queue: Matt Stark <msta@google.com>
diff --git a/infra/recipes/gn.expected/ci_linux.json b/infra/recipes/gn.expected/ci_linux.json
index 3a98040..dfbaa9c 100644
--- a/infra/recipes/gn.expected/ci_linux.json
+++ b/infra/recipes/gn.expected/ci_linux.json
@@ -111,7 +111,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-unknown-linux-gnu git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
       "-max-threads",
       "0",
       "-json-output",
@@ -140,6 +140,14 @@
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/clang/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      },@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-unknown-linux-gnu\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -577,6 +585,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -588,6 +597,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -611,7 +625,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -621,6 +636,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -650,6 +670,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -669,6 +694,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -682,6 +742,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -713,6 +778,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -745,6 +815,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -763,6 +838,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release"
   },
@@ -780,6 +892,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-amd64/lib/libjemalloc.a"
@@ -792,6 +905,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -815,7 +933,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -825,6 +944,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -854,6 +978,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -873,6 +1002,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -886,6 +1050,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -917,6 +1086,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -949,6 +1123,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -967,6 +1146,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release.linux-amd64.upload",
     "~followup_annotations": [
@@ -994,6 +1210,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -1032,6 +1253,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-arm64/lib/libjemalloc.a"
@@ -1044,6 +1266,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -1067,7 +1294,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1077,6 +1305,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -1122,6 +1355,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -1160,6 +1398,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-riscv64/lib/libjemalloc.a"
@@ -1172,6 +1411,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -1195,7 +1439,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1205,6 +1450,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -1250,6 +1500,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
diff --git a/infra/recipes/gn.expected/ci_mac.json b/infra/recipes/gn.expected/ci_mac.json
index b4a0ff6..9a7cbab 100644
--- a/infra/recipes/gn.expected/ci_mac.json
+++ b/infra/recipes/gn.expected/ci_mac.json
@@ -111,7 +111,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/clang/${platform} integration",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-apple-darwin git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/aarch64-apple-darwin git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/clang/${platform} integration",
       "-max-threads",
       "0",
       "-json-output",
@@ -140,6 +140,18 @@
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/clang/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      },@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/aarch64-apple-darwin\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-apple-darwin\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -311,6 +323,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -322,6 +335,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -345,7 +363,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -355,6 +374,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -384,6 +408,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -403,6 +432,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path -nostdinc++ -cxx-isystem [CACHE]/macos_sdk/XCode.app/include/c++/v1",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.mac-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -416,6 +480,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -505,6 +574,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -516,6 +586,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -539,7 +614,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -549,6 +625,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -578,6 +659,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -597,6 +683,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path -nostdinc++ -cxx-isystem [CACHE]/macos_sdk/XCode.app/include/c++/v1",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.mac-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -610,6 +731,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -655,6 +781,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -747,6 +878,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -758,6 +890,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=arm64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -781,7 +918,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -791,6 +929,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=arm64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
@@ -836,6 +979,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=arm64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:ci"
diff --git a/infra/recipes/gn.expected/ci_win.json b/infra/recipes/gn.expected/ci_win.json
index e0b5ebd..2a3c137 100644
--- a/infra/recipes/gn.expected/ci_win.json
+++ b/infra/recipes/gn.expected/ci_win.json
@@ -111,7 +111,7 @@
       "-root",
       "[START_DIR]\\cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-pc-windows-msvc git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957",
       "-max-threads",
       "0",
       "-json-output",
@@ -136,6 +136,14 @@
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-pc-windows-msvc\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -248,6 +256,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]\\gn\\out\\Default"
     ],
@@ -257,6 +266,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -283,7 +293,8 @@
       "-C",
       "[START_DIR]\\gn\\out\\Default",
       "gn.exe",
-      "gn_unittests.exe"
+      "gn_unittests.exe",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]\\gn",
     "env": {
@@ -291,6 +302,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -321,6 +333,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -343,6 +356,38 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]\\gn\\out\\Default\\rust_unittests"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk\\.\\"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]\\cipd\\bin",
+        "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.windows-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]\\cipd\\ninja",
       "-C",
       "[START_DIR]\\gn\\out\\Default",
@@ -354,6 +399,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -392,6 +438,7 @@
       "[START_DIR]\\gn\\build\\gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]\\gn\\out\\Default"
     ],
@@ -401,6 +448,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -427,7 +475,8 @@
       "-C",
       "[START_DIR]\\gn\\out\\Default",
       "gn.exe",
-      "gn_unittests.exe"
+      "gn_unittests.exe",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]\\gn",
     "env": {
@@ -435,6 +484,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -465,6 +515,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -487,6 +538,38 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]\\gn\\out\\Default\\rust_unittests"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk\\.\\"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]\\cipd\\bin",
+        "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.windows-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]\\cipd\\ninja",
       "-C",
       "[START_DIR]\\gn\\out\\Default",
@@ -498,6 +581,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -544,6 +628,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
diff --git a/infra/recipes/gn.expected/cipd_exists.json b/infra/recipes/gn.expected/cipd_exists.json
index 9a363f0..1e37fed 100644
--- a/infra/recipes/gn.expected/cipd_exists.json
+++ b/infra/recipes/gn.expected/cipd_exists.json
@@ -111,7 +111,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-unknown-linux-gnu git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
       "-max-threads",
       "0",
       "-json-output",
@@ -140,6 +140,14 @@
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/clang/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      },@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-unknown-linux-gnu\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -577,6 +585,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -588,6 +597,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -611,7 +625,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -621,6 +636,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -650,6 +670,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -669,6 +694,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -682,6 +742,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -713,6 +778,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -745,6 +815,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -763,6 +838,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release"
   },
@@ -780,6 +892,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-amd64/lib/libjemalloc.a"
@@ -792,6 +905,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -815,7 +933,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -825,6 +944,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -854,6 +978,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -873,6 +1002,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -886,6 +1050,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -917,6 +1086,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -949,6 +1123,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -967,6 +1146,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release.linux-amd64.upload",
     "~followup_annotations": [
@@ -994,6 +1210,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1036,6 +1257,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1083,6 +1309,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-arm64/lib/libjemalloc.a"
@@ -1095,6 +1322,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1118,7 +1350,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1128,6 +1361,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1173,6 +1411,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1215,6 +1458,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1262,6 +1510,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-riscv64/lib/libjemalloc.a"
@@ -1274,6 +1523,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1297,7 +1551,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1307,6 +1562,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1352,6 +1612,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1394,6 +1659,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
diff --git a/infra/recipes/gn.expected/cipd_register.json b/infra/recipes/gn.expected/cipd_register.json
index 76cdb0f..c667d17 100644
--- a/infra/recipes/gn.expected/cipd_register.json
+++ b/infra/recipes/gn.expected/cipd_register.json
@@ -111,7 +111,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-unknown-linux-gnu git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
       "-max-threads",
       "0",
       "-json-output",
@@ -140,6 +140,14 @@
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/clang/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      },@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-unknown-linux-gnu\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -577,6 +585,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -588,6 +597,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -611,7 +625,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -621,6 +636,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -650,6 +670,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -669,6 +694,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -682,6 +742,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -713,6 +778,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -745,6 +815,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -763,6 +838,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release"
   },
@@ -780,6 +892,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-amd64/lib/libjemalloc.a"
@@ -792,6 +905,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -815,7 +933,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -825,6 +944,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -854,6 +978,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -873,6 +1002,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -886,6 +1050,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -917,6 +1086,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -949,6 +1123,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -967,6 +1146,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "infra-internal:ci"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release.linux-amd64.upload",
     "~followup_annotations": [
@@ -994,6 +1210,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1036,6 +1257,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1079,6 +1305,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1118,6 +1349,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-arm64/lib/libjemalloc.a"
@@ -1130,6 +1362,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1153,7 +1390,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1163,6 +1401,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1208,6 +1451,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1250,6 +1498,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1297,6 +1550,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-riscv64/lib/libjemalloc.a"
@@ -1309,6 +1563,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1332,7 +1591,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1342,6 +1602,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1387,6 +1652,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
@@ -1429,6 +1699,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "infra-internal:ci"
diff --git a/infra/recipes/gn.expected/cq_linux.json b/infra/recipes/gn.expected/cq_linux.json
index 91282cc..f68dad9 100644
--- a/infra/recipes/gn.expected/cq_linux.json
+++ b/infra/recipes/gn.expected/cq_linux.json
@@ -162,7 +162,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-unknown-linux-gnu git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/clang/${platform} integration\n@Subdir sysroot\nfuchsia/third_party/sysroot/linux git_revision:c912d089c3d46d8982fdef76a50514cca79b6132\n@Subdir sysroot-focal\nfuchsia/third_party/sysroot/focal git_revision:fa7a5a9710540f30ff98ae48b62f2cdf72ed2acd",
       "-max-threads",
       "0",
       "-json-output",
@@ -191,6 +191,14 @@
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/clang/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      },@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-unknown-linux-gnu\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -628,6 +636,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -639,6 +648,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -662,7 +676,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -672,6 +687,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -701,6 +721,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -720,6 +745,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -733,6 +793,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -764,6 +829,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -796,6 +866,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -814,6 +889,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release"
   },
@@ -831,6 +943,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-amd64/lib/libjemalloc.a"
@@ -843,6 +956,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -866,7 +984,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -876,6 +995,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -905,6 +1029,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -924,6 +1053,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -937,6 +1101,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -968,6 +1137,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1000,6 +1174,11 @@
       "NINJA_OUT_DIR": "[START_DIR]/gn/out/Default",
       "NOBUILD": "1"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1018,6 +1197,43 @@
     ]
   },
   {
+    "cmd": [
+      "[START_DIR]/cipd/ninja",
+      "-C",
+      "[START_DIR]/gn/out/Default",
+      "check_linter"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.linux-amd64.build (2)",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
     "cmd": [],
     "name": "release.linux-amd64.upload",
     "~followup_annotations": [
@@ -1043,6 +1259,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -1090,6 +1311,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -1129,6 +1355,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -1179,6 +1410,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -1212,6 +1448,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-arm64/lib/libjemalloc.a"
@@ -1224,6 +1461,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1247,7 +1489,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1257,6 +1500,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1302,6 +1550,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=aarch64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -1335,6 +1588,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default",
       "--link-lib=[START_DIR]/jemalloc/build-linux-riscv64/lib/libjemalloc.a"
@@ -1347,6 +1601,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1370,7 +1629,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -1380,6 +1640,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1425,6 +1690,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=riscv64-linux-gnu --sysroot=[START_DIR]/cipd/sysroot-focal -static-libstdc++"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
diff --git a/infra/recipes/gn.expected/cq_mac.json b/infra/recipes/gn.expected/cq_mac.json
index f6dc982..6bba2b0 100644
--- a/infra/recipes/gn.expected/cq_mac.json
+++ b/infra/recipes/gn.expected/cq_mac.json
@@ -162,7 +162,7 @@
       "-root",
       "[START_DIR]/cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/clang/${platform} integration",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-apple-darwin git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/aarch64-apple-darwin git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/clang/${platform} integration",
       "-max-threads",
       "0",
       "-json-output",
@@ -191,6 +191,18 @@
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/clang/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      },@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/aarch64-apple-darwin\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-apple-darwin\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -362,6 +374,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -373,6 +386,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -396,7 +414,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -406,6 +425,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -435,6 +459,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -454,6 +483,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path -nostdinc++ -cxx-isystem [CACHE]/macos_sdk/XCode.app/include/c++/v1",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.mac-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -467,6 +531,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -556,6 +625,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -567,6 +637,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -590,7 +665,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -600,6 +676,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -629,6 +710,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -648,6 +734,41 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]/gn/out/Default/rust_unittests"
+    ],
+    "cwd": "[START_DIR]/gn",
+    "env": {
+      "AR": "[START_DIR]/cipd/bin/llvm-ar",
+      "CC": "[START_DIR]/cipd/bin/clang",
+      "CFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path -nostdinc++ -cxx-isystem [CACHE]/macos_sdk/XCode.app/include/c++/v1",
+      "CXX": "[START_DIR]/cipd/bin/clang++",
+      "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.mac-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]/cipd/ninja",
       "-C",
       "[START_DIR]/gn/out/Default",
@@ -661,6 +782,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -704,6 +830,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -751,6 +882,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -790,6 +926,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -840,6 +981,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=x86_64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
@@ -927,6 +1073,7 @@
       "[START_DIR]/gn/build/gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]/gn/out/Default"
     ],
@@ -938,6 +1085,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=arm64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -961,7 +1113,8 @@
       "-C",
       "[START_DIR]/gn/out/Default",
       "gn",
-      "gn_unittests"
+      "gn_unittests",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
@@ -971,6 +1124,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=arm64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "luci_context": {
       "realm": {
         "name": "gn:try"
@@ -1016,6 +1174,11 @@
       "CXX": "[START_DIR]/cipd/bin/clang++",
       "LDFLAGS": "--target=arm64-apple-darwin --sysroot=/some/xcode/path"
     },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]/cipd/bin"
+      ]
+    },
     "infra_step": true,
     "luci_context": {
       "realm": {
diff --git a/infra/recipes/gn.expected/cq_win.json b/infra/recipes/gn.expected/cq_win.json
index 966e487..7b7c342 100644
--- a/infra/recipes/gn.expected/cq_win.json
+++ b/infra/recipes/gn.expected/cq_win.json
@@ -162,7 +162,7 @@
       "-root",
       "[START_DIR]\\cipd",
       "-ensure-file",
-      "infra/ninja/${platform} version:1.8.2",
+      "infra/ninja/${platform} version:1.8.2\nfuchsia/third_party/rust/host/${platform} git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957\nfuchsia/third_party/rust/target/x86_64-pc-windows-msvc git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957",
       "-max-threads",
       "0",
       "-json-output",
@@ -187,6 +187,14 @@
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
       "@@@STEP_LOG_LINE@json.output@    \"\": [@@@",
       "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/host/resolved-platform\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-git_revisions:1e\",@@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"fuchsia/third_party/rust/target/x86_64-pc-windows-msvc\"@@@",
+      "@@@STEP_LOG_LINE@json.output@      },@@@",
+      "@@@STEP_LOG_LINE@json.output@      {@@@",
       "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:1.8.2---\",@@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"infra/ninja/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
@@ -299,6 +307,7 @@
       "-d",
       "--use-asan",
       "--use-ubsan",
+      "--starlark",
       "--out-path",
       "[START_DIR]\\gn\\out\\Default"
     ],
@@ -308,6 +317,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -334,7 +344,8 @@
       "-C",
       "[START_DIR]\\gn\\out\\Default",
       "gn.exe",
-      "gn_unittests.exe"
+      "gn_unittests.exe",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]\\gn",
     "env": {
@@ -342,6 +353,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -372,6 +384,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -394,6 +407,38 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]\\gn\\out\\Default\\rust_unittests"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk\\.\\"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]\\cipd\\bin",
+        "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "debug.windows-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]\\cipd\\ninja",
       "-C",
       "[START_DIR]\\gn\\out\\Default",
@@ -405,6 +450,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -443,6 +489,7 @@
       "[START_DIR]\\gn\\build\\gen.py",
       "--use-lto",
       "--use-icf",
+      "--starlark",
       "--out-path",
       "[START_DIR]\\gn\\out\\Default"
     ],
@@ -452,6 +499,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -478,7 +526,8 @@
       "-C",
       "[START_DIR]\\gn\\out\\Default",
       "gn.exe",
-      "gn_unittests.exe"
+      "gn_unittests.exe",
+      "rust_unittests"
     ],
     "cwd": "[START_DIR]\\gn",
     "env": {
@@ -486,6 +535,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -516,6 +566,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -538,6 +589,38 @@
   },
   {
     "cmd": [
+      "python3",
+      "[START_DIR]\\gn\\out\\Default\\rust_unittests"
+    ],
+    "cwd": "[START_DIR]\\gn",
+    "env": {
+      "VSINSTALLDIR": "[CACHE]\\windows_sdk\\.\\"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[START_DIR]\\cipd\\bin",
+        "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
+      ]
+    },
+    "luci_context": {
+      "realm": {
+        "name": "gn:try"
+      },
+      "resultdb": {
+        "current_invocation": {
+          "name": "invocations/build:8945511751514863184",
+          "update_token": "token"
+        },
+        "hostname": "rdbhost"
+      }
+    },
+    "name": "release.windows-amd64.test rust_unittests",
+    "~followup_annotations": [
+      "@@@STEP_NEST_LEVEL@2@@@"
+    ]
+  },
+  {
+    "cmd": [
       "[START_DIR]\\cipd\\ninja",
       "-C",
       "[START_DIR]\\gn\\out\\Default",
@@ -549,6 +632,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -593,6 +677,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -641,6 +726,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -681,6 +767,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
@@ -732,6 +819,7 @@
     },
     "env_prefixes": {
       "PATH": [
+        "[START_DIR]\\cipd\\bin",
         "[CACHE]\\windows_sdk\\Windows Kits\\10\\bin\\10.0.19041.0\\x64"
       ]
     },
diff --git a/infra/recipes/gn.py b/infra/recipes/gn.py
index 28039e9..761d58b 100644
--- a/infra/recipes/gn.py
+++ b/infra/recipes/gn.py
@@ -108,6 +108,9 @@
 
     with api.context(cwd=src_dir):
       build_input = api.buildbucket.build_input
+      gitiles_ref = build_input.gitiles_commit.ref if build_input.gitiles_commit else ''
+      branch_name = gitiles_ref.removeprefix('refs/heads/') if gitiles_ref else None
+
       ref = (
           build_input.gitiles_commit.id
           if build_input.gitiles_commit else 'refs/heads/master')
@@ -130,6 +133,15 @@
     cipd_dir = api.path['start_dir'].join('cipd')
     pkgs = api.cipd.EnsureFile()
     pkgs.add_package('infra/ninja/${platform}', 'version:1.8.2')
+    rust_version = 'git_revisions:1ed2df61a19042f231709eb05d032ae9e2cb2084,7980fa07f3c3633504c617e05b31673b50565957'
+    pkgs.add_package('fuchsia/third_party/rust/host/${platform}', rust_version)
+    if api.platform.is_linux:
+      pkgs.add_package('fuchsia/third_party/rust/target/x86_64-unknown-linux-gnu', rust_version)
+    elif api.platform.is_mac:
+      pkgs.add_package('fuchsia/third_party/rust/target/x86_64-apple-darwin', rust_version)
+      pkgs.add_package('fuchsia/third_party/rust/target/aarch64-apple-darwin', rust_version)
+    elif api.platform.is_win:
+      pkgs.add_package('fuchsia/third_party/rust/target/x86_64-pc-windows-msvc', rust_version)
     if api.platform.is_linux or api.platform.is_mac:
       pkgs.add_package('fuchsia/third_party/clang/${platform}', 'integration')
     if api.platform.is_linux:
@@ -158,12 +170,12 @@
   configs = [
       {
           'name': 'debug',
-          'args': ['-d', '--use-asan', '--use-ubsan'],
+          'args': ['-d', '--use-asan', '--use-ubsan', '--starlark'],
           'targets': [api.target.host],
       },
       {
           'name': 'release',
-          'args': ['--use-lto', '--use-icf'],
+          'args': ['--use-lto', '--use-icf', '--starlark'],
           'targets': release_targets(),
           # TODO: Enable this for OS X and Windows.
           'use_jemalloc': api.platform.is_linux,
@@ -255,7 +267,7 @@
         for target in config['targets']:
           env = _get_compilation_environment(api, target, cipd_dir)
           with api.step.nest(target.platform), api.context(
-              env=env, cwd=src_dir):
+              env=env, cwd=src_dir, env_prefixes={'PATH': [cipd_dir.join('bin')]}):
             args = config['args'] + ['--out-path', out_dir]
             if config.get('use_jemalloc', False):
               args.append('--link-lib=%s' % jemalloc_static_libs[target.platform])
@@ -269,10 +281,14 @@
             api.step('build', ninja_cmd + [
               f'gn{exe_suffix}',
               f'gn_unittests{exe_suffix}',
+              # rust_unittests is a python script that delegates to the test
+              # binaries for each crate.
+              'rust_unittests',
             ])
 
             if target.is_host:
               api.step('test', [out_dir.join('gn_unittests')])
+              api.step('test rust_unittests', ['python3', out_dir.join('rust_unittests')])
               api.step(
                   'integration tests', ninja_cmd + ['run_integration_tests']
               )
@@ -285,8 +301,12 @@
                 with api.context(env={'NOBUILD': '1', 'NINJA_OUT_DIR': out_dir}):
                   api.step('Check tools/update_reference.sh',
                           [src_dir.join('tools', 'update_reference.sh'), '--diff'])
+                api.step('build', ninja_cmd + [
+                  'check_linter',
+                ])
 
-            if config['name'] != 'release':
+            # Don't allow CI builds from non-main branches to be uploaded to CIPD.
+            if config['name'] != 'release' or (not build_input.gerrit_changes and branch_name not in ('main', 'master')):
               continue
 
             with api.step.nest('upload'):
@@ -338,17 +358,20 @@
            api.buildbucket.ci_build(
                project='gn',
                git_repo='gn.googlesource.com/gn',
+               git_ref='refs/heads/main',
            ))
 
     yield (api.test('cq_' + platform) + api.platform.name(platform) +
            api.buildbucket.try_build(
                project='gn',
                git_repo='gn.googlesource.com/gn',
+               git_ref='refs/heads/main',
            ))
 
   yield (api.test('cipd_exists') + api.buildbucket.ci_build(
       project='infra-internal',
       git_repo='gn.googlesource.com/gn',
+      git_ref='refs/heads/main',
       revision='a' * 40,
   ) + api.step_data(
       'git.rev-parse', api.raw_io.stream_output_text('a' * 40)
@@ -361,6 +384,7 @@
   yield (api.test('cipd_register') + api.buildbucket.ci_build(
       project='infra-internal',
       git_repo='gn.googlesource.com/gn',
+      git_ref='refs/heads/main',
       revision='a' * 40,
   ) + api.step_data(
       'git.rev-parse', api.raw_io.stream_output_text('a' * 40)