Bug 1573435 - Use toolchain fetches for all remaining toolchain uses, part 2. r=nalexander
authorMike Hommey <mh+mozilla@glandium.org>
Wed, 14 Aug 2019 11:37:17 +0900
changeset 488150 df54590321e85066cbd765a1be9e8216b38f9f5f
parent 488149 73576d4b23de5f35476f4e3d439adf498b9ab5d1
child 488151 bbef4cd14f581113d70904a6d25321bbaf155ce9
push id36435
push usercbrindusan@mozilla.com
push dateThu, 15 Aug 2019 09:46:49 +0000
treeherdermozilla-central@0db07ff50ab5 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnalexander
bugs1573435
milestone70.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1573435 - Use toolchain fetches for all remaining toolchain uses, part 2. r=nalexander This part removes the use_toolchains transform, and adjusts all task definitions accordingly. Differential Revision: https://phabricator.services.mozilla.com/D41891 MANUAL PUSH: avoid closing autoland while docker images and toolchains are rebuilt.
taskcluster/ci/artifact-build/kind.yml
taskcluster/ci/build-fat-aar/kind.yml
taskcluster/ci/build/android-stuff.yml
taskcluster/ci/build/android.yml
taskcluster/ci/build/kind.yml
taskcluster/ci/build/linux.yml
taskcluster/ci/build/macosx.yml
taskcluster/ci/build/windows-mingw.yml
taskcluster/ci/build/windows.yml
taskcluster/ci/generate-profile/kind.yml
taskcluster/ci/instrumented-build/kind.yml
taskcluster/ci/l10n/kind.yml
taskcluster/ci/nightly-l10n/kind.yml
taskcluster/ci/release-eme-free-repack-repackage/kind.yml
taskcluster/ci/release-partner-repack-repackage/kind.yml
taskcluster/ci/release-source/kind.yml
taskcluster/ci/repackage-l10n/kind.yml
taskcluster/ci/repackage-msi/kind.yml
taskcluster/ci/repackage/kind.yml
taskcluster/ci/searchfox/kind.yml
taskcluster/ci/static-analysis-autotest/kind.yml
taskcluster/ci/valgrind/kind.yml
taskcluster/taskgraph/transforms/l10n.py
taskcluster/taskgraph/transforms/repackage.py
taskcluster/taskgraph/transforms/repackage_partner.py
taskcluster/taskgraph/transforms/use_toolchains.py
--- a/taskcluster/ci/artifact-build/kind.yml
+++ b/taskcluster/ci/artifact-build/kind.yml
@@ -5,17 +5,16 @@
 loader: taskgraph.loader.transform:loader
 
 kind-dependencies:
     - toolchain
 
 transforms:
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 jobs:
     linux64-artifact/opt:
         description: "Linux64 Opt Artifact Build"
         index:
             product: firefox
@@ -41,10 +40,11 @@ jobs:
                 - builds/releng_base_linux_64_builds.py
             script: "mozharness/scripts/fx_desktop_build.py"
             secrets: true
             tooltool-downloads: public
             need-xvfb: true
             keep-artifacts: false
         dependencies:
             linux64-opt: build-linux64/opt
-        toolchains:
-            - linux64-node
+        fetches:
+            toolchain:
+                - linux64-node
--- a/taskcluster/ci/build-fat-aar/kind.yml
+++ b/taskcluster/ci/build-fat-aar/kind.yml
@@ -8,26 +8,24 @@ kind-dependencies:
     - build
     - toolchain
 
 transforms:
     - taskgraph.transforms.build:transforms
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
     - taskgraph.transforms.build_fat_aar:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 job-defaults:
     attributes:
         artifact_map: taskcluster/taskgraph/manifests/fennec_geckoview.yml
     index:
         product: mobile
-    fetches: {}   # See build_fat_aar transform
     worker-type: b-linux
     worker:
         docker-image: {in-tree: android-build}
         max-run-time: 7200
         env:
             # Online in order to download the per-architecture AARs.
             GRADLE_USER_HOME: "/builds/worker/workspace/build/src/mobile/android/gradle/dotgradle-online"
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
@@ -53,26 +51,27 @@ job-defaults:
                 nightly-oak: nightly-oak
                 beta:
                     by-shipping-product:
                         devedition: aurora
                         default: beta
                 release.*: release
                 esr.*: esr
                 default: null
-    toolchains:
-        - android-gradle-dependencies
-        - android-ndk-linux
-        - android-sdk-linux
-        - linux64-clang
-        - linux64-rust-android
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - android-gradle-dependencies
+            - android-ndk-linux
+            - android-sdk-linux
+            - linux64-clang
+            - linux64-rust-android
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 jobs:
     android-geckoview-fat-aar/opt:
         description: "Android GeckoView multi-architecture fat AAR Opt"
         index:
             job-name: android-geckoview-fat-aar-opt
         treeherder:
             platform: android-4-0-geckoview-fat-aar/opt
@@ -85,18 +84,19 @@ jobs:
         worker:
             env:
                 PERFHERDER_EXTRA_OPTIONS: android-geckoview-fat-aar-opt
                 USE_ARTIFACT: '1'
                 MOZ_ARTIFACT_TASK: {task-reference: '<android-api-16-opt>'}
         run:
             actions: [get-secrets, build]
             config: ["builds/releng_base_android_64_builds.py"]
-        toolchains:
-            - linux64-sccache
+        fetches:
+            toolchain:
+                - linux64-sccache
 
     android-geckoview-fat-aar-nightly/opt:
         description: "Android GeckoView multi-architecture fat AAR Nightly"
         attributes:
             nightly: true
             enable-full-crashsymbols: true
             disable-push-apk: true
         shipping-phase: build
--- a/taskcluster/ci/build/android-stuff.yml
+++ b/taskcluster/ci/build/android-stuff.yml
@@ -35,17 +35,18 @@ android-geckoview-docs/opt:
         using: mozharness
         actions: [get-secrets, build]
         config:
             - builds/releng_base_android_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: android-geckoview-docs
         tooltool-downloads: internal
-    toolchains:
-        - android-gradle-dependencies
-        - android-sdk-linux
-        - linux64-node
+    fetches:
+        toolchain:
+            - android-gradle-dependencies
+            - android-sdk-linux
+            - linux64-node
     optimization:
         skip-unless-changed:
             - "mobile/android/**/*.java"
             - "mobile/android/gradle.configure"
             - "**/*.gradle"
--- a/taskcluster/ci/build/android.yml
+++ b/taskcluster/ci/build/android.yml
@@ -26,26 +26,27 @@ job-defaults:
               path: /builds/worker/artifacts/
               type: directory
     run:
         using: mozharness
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         mozconfig-variant: null
         tooltool-downloads: internal
-    toolchains:
-        - android-gradle-dependencies
-        - android-ndk-linux
-        - android-sdk-linux
-        - linux64-clang
-        - linux64-rust-android
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - android-gradle-dependencies
+            - android-ndk-linux
+            - android-sdk-linux
+            - linux64-clang
+            - linux64-rust-android
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 android-api-16/debug:
     description: "Android 4.0 api-16+ Debug"
     index:
         job-name: android-api-16-debug
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -54,18 +55,19 @@ android-api-16/debug:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: api-16-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-x86/opt:
     description: "Android 4.2 x86 Opt"
     index:
         job-name: android-x86-opt
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -74,36 +76,38 @@ android-x86/opt:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-x86-fuzzing/debug:
     description: "Android x86 Fuzzing Debug"
     index:
         job-name: android-x86-fuzzing-debug
     treeherder:
         platform: android-4-2-x86/debug
         symbol: Bf
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86-fuzzing-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-x86-nightly/opt:
     description: "Android 4.2 x86 Nightly"
     attributes:
         enable-full-crashsymbols: true
         nightly: true
     shipping-phase: build
     shipping-product: fennec
@@ -136,18 +140,19 @@ android-api-16/opt:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: api-16
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-api-16/pgo:
     description: "Android 4.0 api-16+ PGO"
     use-pgo: true
     index:
         job-name: android-api-16-pgo
     attributes:
         enable-full-crashsymbols: true
@@ -175,18 +180,19 @@ android-api-16-without-google-play-servi
         env:
             PERFHERDER_EXTRA_OPTIONS: android-api-16-without-google-play-services
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: api-16-without-google-play-services
     run-on-projects: ['mozilla-central']
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-api-16-nightly/opt:
     description: "Android 4.0 api-16+ Nightly"
     use-pgo: android-api-16/pgo
     attributes:
         enable-full-crashsymbols: true
         nightly: true
     shipping-phase: build
@@ -220,18 +226,19 @@ android-aarch64/opt:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: aarch64
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-aarch64/pgo:
     description: "Android 5.0 AArch64 PGO"
     use-pgo: android-api-16/pgo
     index:
         job-name: android-aarch64-pgo
     attributes:
         enable-full-crashsymbols: true
@@ -259,18 +266,19 @@ android-aarch64/debug:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: aarch64-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-aarch64-nightly/opt:
     description: "Android 5.0 AArch64 Nightly"
     use-pgo: android-api-16/pgo
     attributes:
         enable-full-crashsymbols: true
         nightly: true
     shipping-phase: build
@@ -304,18 +312,19 @@ android-x86_64/opt:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86_64
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-x86_64-nightly/opt:
     description: "Android 5.0 x86-64 Nightly"
     attributes:
         enable-full-crashsymbols: true
         nightly: true
     shipping-phase: build
     shipping-product: fennec
@@ -348,18 +357,19 @@ android-x86_64/debug:
     worker-type: b-linux
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86_64-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 
 android-api-16-gcp/debug:
     description: "Android 4.0 api-16+ Debug - built on GCP"
     index:
         job-name: android-api-16-gcp-debug
     attributes:
         enable-full-crashsymbols: true
@@ -371,18 +381,19 @@ android-api-16-gcp/debug:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: api-16-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 
 android-x86-gcp/opt:
     description: "Android 4.2 x86 Opt - built on GCP"
     index:
         job-name: android-x86-gcp-opt
     attributes:
         enable-full-crashsymbols: true
@@ -394,18 +405,19 @@ android-x86-gcp/opt:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-api-16-gcp/opt:
     description: "Android 4.0 api-16+ Opt - built on GCP"
     index:
         job-name: android-api-16-gcp-opt
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -416,18 +428,19 @@ android-api-16-gcp/opt:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: api-16
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-aarch64-gcp/opt:
     description: "Android 5.0 AArch64 Opt - built on GCP"
     index:
         job-name: android-aarch64-gcp-opt
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -438,18 +451,19 @@ android-aarch64-gcp/opt:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: aarch64
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-aarch64-gcp/debug:
     description: "Android 5.0 AArch64 Debug - built on GCP"
     index:
         job-name: android-aarch64-gcp-debug
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -460,18 +474,19 @@ android-aarch64-gcp/debug:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: aarch64-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-x86_64-gcp/opt:
     description: "Android 5.0 x86-64 Opt - built on GCP"
     index:
         job-name: android-x86_64-gcp-opt
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -482,18 +497,19 @@ android-x86_64-gcp/opt:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86_64
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
 
 android-x86_64-gcp/debug:
     description: "Android 5.0 x86-64 Debug - built on GCP"
     index:
         job-name: android-x86_64-gcp-debug
     attributes:
         enable-full-crashsymbols: true
     treeherder:
@@ -504,10 +520,11 @@ android-x86_64-gcp/debug:
     worker:
         env:
             TOOLTOOL_MANIFEST: "mobile/android/config/tooltool-manifests/android-x86/releng.manifest"
             PERFHERDER_EXTRA_OPTIONS: gcp
     run:
         actions: [get-secrets, build]
         config: ["builds/releng_base_android_64_builds.py"]
         custom-build-variant-cfg: x86_64-debug
-    toolchains:
-        - linux64-sccache
+    fetches:
+        toolchain:
+            - linux64-sccache
--- a/taskcluster/ci/build/kind.yml
+++ b/taskcluster/ci/build/kind.yml
@@ -8,17 +8,16 @@ kind-dependencies:
     - toolchain
     - fetch
     - generate-profile
 
 transforms:
     - taskgraph.transforms.build:transforms
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 jobs-from:
     - android.yml
     - android-stuff.yml
     - linux.yml
     - macosx.yml
--- a/taskcluster/ci/build/linux.yml
+++ b/taskcluster/ci/build/linux.yml
@@ -21,25 +21,26 @@ linux64/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-plain/opt:
     description: "Linux64 Opt Plain"
     index:
         product: firefox
         job-name: linux64-plain-opt
     treeherder:
         platform: linux64/opt
@@ -58,23 +59,24 @@ linux64-plain/opt:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: mozharness/scripts/fx_desktop_build.py
         tooltool-downloads: public
         extra-config:
             disable_package_metrics: true
         mozconfig-variant: plain-opt
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-nasm
-        - linux64-node
-        - linux64-cbindgen
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-nasm
+            - linux64-node
+            - linux64-cbindgen
 
 linux64-fuzzing/debug:
     description: "Linux64 Fuzzing Debug"
     index:
         product: firefox
         job-name: linux64-fuzzing-debug
     treeherder:
         platform: linux64/debug
@@ -92,25 +94,26 @@ linux64-fuzzing/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: fuzzing-debug
         mozconfig-variant: debug-fuzzing
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-clang
-        - linux64-gcc
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-clang
+            - linux64-gcc
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-nasm
+            - linux64-node
 
 linux64/debug:
     description: "Linux64 Debug"
     index:
         product: firefox
         job-name: linux64-debug
     attributes:
         enable-full-crashsymbols: true
@@ -127,25 +130,26 @@ linux64/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         mozconfig-variant: debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-nasm
+            - linux64-node
 
 linux64-plain/debug:
     description: "Linux64 Debug Plain"
     index:
         product: firefox
         job-name: linux64-plain-debug
     treeherder:
         platform: linux64/debug
@@ -164,23 +168,24 @@ linux64-plain/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         extra-config:
             disable_package_metrics: true
         mozconfig-variant: plain-debug
         script: mozharness/scripts/fx_desktop_build.py
         tooltool-downloads: public
     run-on-projects: [trunk]
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-nasm
-        - linux64-node
-        - linux64-cbindgen
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-nasm
+            - linux64-node
+            - linux64-cbindgen
 
 linux64-devedition-nightly/opt:
     description: "Linux64 devedition Nightly"
     use-pgo: linux64-shippable/opt
     attributes:
         nightly: true
         enable-full-crashsymbols: true
     shipping-phase: build
@@ -205,24 +210,25 @@ linux64-devedition-nightly/opt:
         extra-config:
             stage_platform: 'linux64-devedition'
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
         mozconfig-variant: devedition
     run-on-projects: ['mozilla-beta']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 linux64-base-toolchains/opt:
     description: "Linux64 base toolchains Opt"
     index:
         product: firefox
         job-name: linux64-base-toolchains-opt
     treeherder:
         platform: linux64/opt
@@ -239,24 +245,25 @@ linux64-base-toolchains/opt:
         actions: [get-secrets, build, check-test]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-clang-4.0
-        - linux64-gcc-6
-        - linux64-rust-1.36
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm-2.13.02
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-clang-4.0
+            - linux64-gcc-6
+            - linux64-rust-1.36
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm-2.13.02
+            - linux64-node
 
 linux64-base-toolchains/debug:
     description: "Linux64 base toolchains Debug"
     index:
         product: firefox
         job-name: linux64-base-toolchains-debug
     treeherder:
         platform: linux64/debug
@@ -275,24 +282,25 @@ linux64-base-toolchains/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         mozconfig-variant: debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-clang-4.0
-        - linux64-gcc-6
-        - linux64-rust-1.36
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm-2.13.02
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-clang-4.0
+            - linux64-gcc-6
+            - linux64-rust-1.36
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm-2.13.02
+            - linux64-node
 
 linux64-base-toolchains-clang/opt:
     description: "Linux64 base toolchains clang Opt"
     index:
         product: firefox
         job-name: linux64-base-toolchains-clang-opt
     treeherder:
         platform: linux64/opt
@@ -308,23 +316,24 @@ linux64-base-toolchains-clang/opt:
         actions: [get-secrets, build, check-test]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang-4.0
-        - linux64-rust-1.36
-        - linux64-cbindgen
-        - linux64-nasm-2.13.02
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang-4.0
+            - linux64-rust-1.36
+            - linux64-cbindgen
+            - linux64-nasm-2.13.02
+            - linux64-node
 
 linux64-base-toolchains-clang/debug:
     description: "Linux64 base toolchains clang Debug"
     index:
         product: firefox
         job-name: linux64-base-toolchains-clang-debug
     treeherder:
         platform: linux64/debug
@@ -342,23 +351,24 @@ linux64-base-toolchains-clang/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         mozconfig-variant: debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang-4.0
-        - linux64-rust-1.36
-        - linux64-cbindgen
-        - linux64-nasm-2.13.02
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang-4.0
+            - linux64-rust-1.36
+            - linux64-cbindgen
+            - linux64-nasm-2.13.02
+            - linux64-node
 
 linux/opt:
     description: "Linux32 Opt"
     index:
         product: firefox
         job-name: linux-opt
     attributes:
         enable-full-crashsymbols: true
@@ -375,25 +385,26 @@ linux/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux/debug:
     description: "Linux32 Debug"
     index:
         product: firefox
         job-name: linux-debug
     attributes:
         enable-full-crashsymbols: true
@@ -411,25 +422,26 @@ linux/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         mozconfig-variant: debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux-rusttests/opt:
     description: "Linux32 Rust Tests Opt"
     index:
         product: firefox
         job-name: linux-rusttests-opt
     treeherder:
         platform: linux32/opt
@@ -450,24 +462,25 @@ linux-rusttests/opt:
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests
         mozconfig-variant: rusttests
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux-rusttests/debug:
     description: "Linux32 Rust Tests Debug"
     index:
         product: firefox
         job-name: linux-rusttests-debug
     treeherder:
         platform: linux32/debug
@@ -488,24 +501,25 @@ linux-rusttests/debug:
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests-debug
         mozconfig-variant: rusttests-debug
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux-devedition-nightly/opt:
     description: "Linux32 devedition Nightly"
     use-pgo: linux-shippable/opt
     attributes:
         nightly: true
         enable-full-crashsymbols: true
     shipping-phase: build
@@ -531,24 +545,25 @@ linux-devedition-nightly/opt:
         extra-config:
             stage_platform: linux-devedition
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
         mozconfig-variant: devedition
     run-on-projects: ['mozilla-beta']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 linux-shippable/opt:
     description: "Linux32 Shippable"
     use-pgo: true
     attributes:
         shippable: true
         enable-full-crashsymbols: true
     shipping-phase: build
@@ -570,24 +585,25 @@ linux-shippable/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 linux64-asan/opt:
     description: "Linux64 Opt ASAN"
     index:
         product: firefox
         job-name: linux64-asan-opt
     treeherder:
         platform: linux64/asan
@@ -605,25 +621,26 @@ linux64-asan/opt:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-tc
         mozconfig-variant: nightly-asan
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-asan-fuzzing/opt:
     description: "Linux64 Fuzzing Opt ASAN"
     index:
         product: firefox
         job-name: linux64-fuzzing-asan-opt
     treeherder:
         platform: linux64/asan
@@ -641,25 +658,26 @@ linux64-asan-fuzzing/opt:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: fuzzing-asan-tc
         mozconfig-variant: nightly-fuzzing-asan
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-asan-fuzzing-ccov/opt:
     description: "Linux64 Fuzzing Opt ASAN w/ Coverage"
     index:
         product: firefox
         job-name: linux64-ccov-fuzzing-asan-opt
     treeherder:
         platform: linux64/asan
@@ -677,25 +695,26 @@ linux64-asan-fuzzing-ccov/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         mozconfig-variant: asan-fuzzing-ccov
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-fuzzing-ccov/opt:
     description: "Linux64 Fuzzing Opt w/ Coverage"
     index:
         product: firefox
         job-name: linux64-ccov-fuzzing-opt
     treeherder:
         platform: linux64/opt
@@ -714,25 +733,26 @@ linux64-fuzzing-ccov/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         mozconfig-variant: fuzzing-ccov
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-clang
-        - linux64-gcc
-        - linux64-cbindgen
-        - linux64-rust-nightly
-        - linux64-rust-size
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-clang
+            - linux64-gcc
+            - linux64-cbindgen
+            - linux64-rust-nightly
+            - linux64-rust-size
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-asan-reporter-nightly/opt:
     description: "Linux64 Opt ASAN Reporter Nightly"
     attributes:
         nightly: true
     shipping-product:
         by-release-type:
             nightly: firefox
@@ -761,24 +781,25 @@ linux64-asan-reporter-nightly/opt:
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-reporter-tc
         mozconfig-variant: nightly-asan-reporter
         tooltool-downloads: public
         need-xvfb: true
         mar-channel-id:
             firefox-mozilla-central-asan
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 linux64-asan/debug:
     description: "Linux64 Debug ASAN"
     index:
         product: firefox
         job-name: linux64-asan-debug
     treeherder:
         platform: linux64/asan
@@ -796,25 +817,26 @@ linux64-asan/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-tc-and-debug
         mozconfig-variant: debug-asan
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-shippable/opt:
     description: "Linux64 Shippable"
     use-pgo: true
     attributes:
         shippable: true
         enable-full-crashsymbols: true
     shipping-phase: build
@@ -835,24 +857,25 @@ linux64-shippable/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 linux64-noopt/debug:
     description: "Linux64 No-optimize Debug"
     index:
         product: firefox
         job-name: linux64-noopt-debug
     treeherder:
         platform: linux64-noopt/debug
@@ -872,25 +895,26 @@ linux64-noopt/debug:
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: noopt-debug
         mozconfig-variant: noopt-debug
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-rusttests/opt:
     description: "Linux64 Rust Tests Opt"
     index:
         product: firefox
         job-name: linux64-rusttests-opt
     treeherder:
         platform: linux64/opt
@@ -910,24 +934,25 @@ linux64-rusttests/opt:
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests
         mozconfig-variant: rusttests
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-rusttests/debug:
     description: "Linux64 Rust Tests Debug"
     index:
         product: firefox
         job-name: linux64-rusttests-debug
     treeherder:
         platform: linux64/debug
@@ -947,24 +972,25 @@ linux64-rusttests/debug:
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests-debug
         mozconfig-variant: rusttests-debug
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-tup/opt:
     description: "Linux64 Tup"
     index:
         product: firefox
         job-name: linux64-tup-opt
     treeherder:
         platform: linux64/opt
@@ -983,25 +1009,26 @@ linux64-tup/opt:
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: tup
         mozconfig-variant: tup
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: []
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust-nightly
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-tup
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust-nightly
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-tup
+            - linux64-nasm
+            - linux64-node
 
 linux64-ccov/debug:
     description: "Linux64-CCov Debug"
     index:
         product: firefox
         job-name: linux64-ccov-debug
     treeherder:
         platform: linux64-ccov/debug
@@ -1024,27 +1051,26 @@ linux64-ccov/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: code-coverage-debug
         mozconfig-variant: code-coverage-debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-clang-8
-        - linux64-rust-nightly
-        - linux64-gcc
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
     fetches:
         toolchain:
+            - linux64-clang-8
+            - linux64-rust-nightly
+            - linux64-gcc
             - linux64-grcov
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-ccov/opt:
     description: "Linux64-CCov Opt"
     index:
         product: firefox
         job-name: linux64-ccov-opt
     treeherder:
         platform: linux64-ccov/opt
@@ -1063,24 +1089,25 @@ linux64-ccov/opt:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: code-coverage-opt
         mozconfig-variant: code-coverage-opt
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-clang-8
-        - linux64-rust-nightly
-        - linux64-gcc
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-clang-8
+            - linux64-rust-nightly
+            - linux64-gcc
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-add-on-devel/opt:
     description: "Linux64 add-on-devel"
     index:
         product: firefox
         job-name: linux64-add-on-devel
     treeherder:
         platform: linux64-add-on-devel/opt
@@ -1097,25 +1124,26 @@ linux64-add-on-devel/opt:
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: add-on-devel
         mozconfig-variant: add-on-devel
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: ['mozilla-beta', 'mozilla-release', 'mozilla-esr45']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-aarch64/opt:
     description: "Linux64 aarch64 Opt"
     index:
         product: firefox
         job-name: linux64-aarch64-opt
     attributes:
         enable-full-crashsymbols: true
@@ -1135,24 +1163,25 @@ linux64-aarch64/opt:
             - builds/releng_base_linux_64_builds.py
         extra-config:
             mozconfig_platform: linux64-aarch64
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         mozconfig-variant: opt
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-node
 
 linux-gcp/debug:
     description: "Linux32 Debug - built on GCP"
     index:
         product: firefox
         job-name: linux-gcp-debug
     attributes:
         enable-full-crashsymbols: true
@@ -1173,25 +1202,26 @@ linux-gcp/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         mozconfig-variant: debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux-gcp/opt:
     description: "Linux32 Opt - built on GCP"
     index:
         product: firefox
         job-name: linux-gcp-opt
     attributes:
         enable-full-crashsymbols: true
@@ -1211,25 +1241,26 @@ linux-gcp/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 linux64-gcp/debug:
     description: "Linux64 Debug - built on GCP"
     index:
         product: firefox
         job-name: linux64-gcp-debug
     attributes:
         enable-full-crashsymbols: true
@@ -1249,25 +1280,26 @@ linux64-gcp/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         mozconfig-variant: debug
         tooltool-downloads: public
         need-xvfb: true
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-nasm
+            - linux64-node
 
 linux64-gcp/opt:
     description: "Linux64 Opt - built on GCP"
     index:
         product: firefox
         job-name: linux64-gcp-opt
     attributes:
         enable-full-crashsymbols: true
@@ -1286,17 +1318,18 @@ linux64-gcp/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-clang
-        - linux64-rust
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-clang
+            - linux64-rust
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
--- a/taskcluster/ci/build/macosx.yml
+++ b/taskcluster/ci/build/macosx.yml
@@ -24,29 +24,30 @@ macosx64/debug:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: cross-debug
         mozconfig-variant: debug
         tooltool-downloads: internal
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64/opt:
     description: "MacOS X x64 Cross-compile"
     index:
         product: firefox
         job-name: macosx64-opt
     attributes:
         enable-full-crashsymbols: true
@@ -64,29 +65,30 @@ macosx64/opt:
         actions: [get-secrets, build]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: internal
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-asan-fuzzing/opt:
     description: "MacOS X x64 Cross-compile Fuzzing ASAN"
     index:
         product: firefox
         job-name: macosx64-fuzzing-asan-opt
     treeherder:
         platform: osx-cross/asan
@@ -103,29 +105,30 @@ macosx64-asan-fuzzing/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: cross-fuzzing-asan
         mozconfig-variant: nightly-fuzzing-asan
         tooltool-downloads: internal
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-fuzzing/debug:
     description: "MacOS X x64 Cross-compile Fuzzing Debug"
     index:
         product: firefox
         job-name: macosx64-fuzzing-debug
     attributes:
         enable-full-crashsymbols: true
@@ -144,29 +147,30 @@ macosx64-fuzzing/debug:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: cross-fuzzing-debug
         mozconfig-variant: debug-fuzzing
         tooltool-downloads: internal
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-devedition-nightly/opt:
     description: "MacOS X Dev Edition x64 Nightly"
     attributes:
         nightly: true
         enable-full-crashsymbols: true
     shipping-phase: build
     shipping-product: devedition
@@ -192,28 +196,29 @@ macosx64-devedition-nightly/opt:
             - taskcluster_nightly.py
         extra-config:
             stage_platform: macosx64-devedition
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: internal
         mozconfig-variant: devedition
     run-on-projects: ['mozilla-beta']
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 macosx64-noopt/debug:
     description: "MacOS X x64 No-optimize Debug"
     index:
         product: firefox
         job-name: macosx64-noopt-debug
     treeherder:
         platform: osx-cross-noopt/debug
@@ -232,29 +237,30 @@ macosx64-noopt/debug:
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: cross-noopt-debug
         mozconfig-variant: cross-noopt-debug
         tooltool-downloads: internal
         keep-artifacts: false
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-add-on-devel/opt:
     description: "MacOS X x64 add-on-devel"
     index:
         product: firefox
         job-name: macosx64-add-on-devel
     treeherder:
         platform: osx-cross-add-on-devel/opt
@@ -272,29 +278,30 @@ macosx64-add-on-devel/opt:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: add-on-devel
         mozconfig-variant: add-on-devel
         tooltool-downloads: internal
     run-on-projects: ['mozilla-beta', 'mozilla-release', 'mozilla-esr45']
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-shippable/opt:
     description: "MacOS X x64 Cross-compile"
     attributes:
         shippable: true
         enable-full-crashsymbols: true
     shipping-phase: build
     shipping-product: firefox
@@ -316,28 +323,29 @@ macosx64-shippable/opt:
         actions: [get-secrets, build]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: internal
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
 
 macosx64-ccov/debug:
     description: "MacOS X x64 Cross-compile Code Coverage"
     index:
         product: firefox
         job-name: macosx64-ccov-debug
     treeherder:
         platform: osx-cross-ccov/debug
@@ -355,29 +363,30 @@ macosx64-ccov/debug:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: code-coverage-debug
         mozconfig-variant: code-coverage-debug
         tooltool-downloads: internal
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-nightly-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-nightly-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-gcp/debug:
     description: "MacOS X x64 Cross-compile - built on GCP"
     index:
         product: firefox
         job-name: macosx64-gcp-debug
     attributes:
         enable-full-crashsymbols: true
@@ -397,29 +406,30 @@ macosx64-gcp/debug:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: cross-debug
         mozconfig-variant: debug
         tooltool-downloads: internal
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
 
 macosx64-gcp/opt:
     description: "MacOS X x64 Cross-compile - built on GCP"
     index:
         product: firefox
         job-name: macosx64-gcp-opt
     attributes:
         enable-full-crashsymbols: true
@@ -438,21 +448,22 @@ macosx64-gcp/opt:
         actions: [get-secrets, build]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: internal
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - linux64-binutils
-        - linux64-cctools-port
-        - linux64-clang-macosx-cross
-        - linux64-hfsplus
-        - linux64-libdmg
-        - linux64-llvm-dsymutil
-        - linux64-rust-macos
-        - linux64-rust-size
-        - linux64-cbindgen
-        - linux64-sccache
-        - linux64-nasm
-        - linux64-node
+    fetches:
+        toolchain:
+            - linux64-binutils
+            - linux64-cctools-port
+            - linux64-clang-macosx-cross
+            - linux64-hfsplus
+            - linux64-libdmg
+            - linux64-llvm-dsymutil
+            - linux64-rust-macos
+            - linux64-rust-size
+            - linux64-cbindgen
+            - linux64-sccache
+            - linux64-nasm
+            - linux64-node
--- a/taskcluster/ci/build/windows-mingw.yml
+++ b/taskcluster/ci/build/windows-mingw.yml
@@ -26,27 +26,28 @@ win32-mingwclang/opt:
         env:
             PERFHERDER_EXTRA_OPTIONS: "opt 32 clang"
     run:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_windows_32_mingw_builds.py
             - builds/releng_sub_windows_configs/32_mingwclang.py
         mozconfig-variant: mingwclang
-    toolchains:
-        - mingw32-rust
-        - linux64-upx
-        - linux64-wine
-        - linux64-sccache
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
-        - linux64-clang-mingw-x86
-        - linux64-mingw32-nsis
-        - linux64-mingw-fxc2-x86
+    fetches:
+        toolchain:
+            - mingw32-rust
+            - linux64-upx
+            - linux64-wine
+            - linux64-sccache
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
+            - linux64-clang-mingw-x86
+            - linux64-mingw32-nsis
+            - linux64-mingw-fxc2-x86
 
 win32-mingwclang/debug:
     description: "Win32 MinGW-Clang Debug"
     index:
         product: firefox
         job-name: win32-mingwclang-debug
     treeherder:
         platform: windows-mingw32/all
@@ -56,27 +57,28 @@ win32-mingwclang/debug:
         env:
             PERFHERDER_EXTRA_OPTIONS: "debug 32 clang"
     run:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_windows_32_mingw_builds.py
             - builds/releng_sub_windows_configs/32_mingwclang.py
         mozconfig-variant: mingwclang-debug
-    toolchains:
-        - mingw32-rust
-        - linux64-upx
-        - linux64-wine
-        - linux64-sccache
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
-        - linux64-clang-mingw-x86
-        - linux64-mingw32-nsis
-        - linux64-mingw-fxc2-x86
+    fetches:
+        toolchain:
+            - mingw32-rust
+            - linux64-upx
+            - linux64-wine
+            - linux64-sccache
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
+            - linux64-clang-mingw-x86
+            - linux64-mingw32-nsis
+            - linux64-mingw-fxc2-x86
 
 win64-mingwclang/opt:
     description: "Win64 MinGW-Clang Opt"
     index:
         product: firefox
         job-name: win64-mingwclang-opt
     treeherder:
         platform: windows-mingw32/all
@@ -86,27 +88,28 @@ win64-mingwclang/opt:
         env:
             PERFHERDER_EXTRA_OPTIONS: "opt 64 clang"
     run:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_windows_64_mingw_builds.py
             - builds/releng_sub_windows_configs/64_mingwclang.py
         mozconfig-variant: mingwclang
-    toolchains:
-        - mingw32-rust
-        - linux64-upx
-        - linux64-wine
-        - linux64-sccache
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
-        - linux64-clang-mingw-x64
-        - linux64-mingw32-nsis
-        - linux64-mingw-fxc2-x86
+    fetches:
+        toolchain:
+            - mingw32-rust
+            - linux64-upx
+            - linux64-wine
+            - linux64-sccache
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
+            - linux64-clang-mingw-x64
+            - linux64-mingw32-nsis
+            - linux64-mingw-fxc2-x86
 
 win64-mingwclang/debug:
     description: "Win64 MinGW-Clang Debug"
     index:
         product: firefox
         job-name: win64-mingwclang-debug
     treeherder:
         platform: windows-mingw32/all
@@ -116,19 +119,20 @@ win64-mingwclang/debug:
         env:
             PERFHERDER_EXTRA_OPTIONS: "debug 64 clang"
     run:
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_windows_64_mingw_builds.py
             - builds/releng_sub_windows_configs/64_mingwclang.py
         mozconfig-variant: mingwclang-debug
-    toolchains:
-        - mingw32-rust
-        - linux64-upx
-        - linux64-wine
-        - linux64-sccache
-        - linux64-cbindgen
-        - linux64-nasm
-        - linux64-node
-        - linux64-clang-mingw-x64
-        - linux64-mingw32-nsis
-        - linux64-mingw-fxc2-x86
+    fetches:
+        toolchain:
+            - mingw32-rust
+            - linux64-upx
+            - linux64-wine
+            - linux64-sccache
+            - linux64-cbindgen
+            - linux64-nasm
+            - linux64-node
+            - linux64-clang-mingw-x64
+            - linux64-mingw32-nsis
+            - linux64-mingw-fxc2-x86
--- a/taskcluster/ci/build/windows.yml
+++ b/taskcluster/ci/build/windows.yml
@@ -28,24 +28,25 @@ win32/debug:
         script: mozharness/scripts/fx_desktop_build.py
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
             - builds/taskcluster_sub_win32/debug.py
         mozconfig-variant: debug
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win32/opt:
     description: "Win32 Opt"
     index:
         product: firefox
         job-name: win32-opt
     attributes:
         enable-full-crashsymbols: true
@@ -64,24 +65,25 @@ win32/opt:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
         extra-config:
             stage_platform: win32
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64/debug:
     description: "Win64 Debug"
     index:
         product: firefox
         job-name: win64-debug
     attributes:
         enable-full-crashsymbols: true
@@ -99,24 +101,25 @@ win64/debug:
         script: mozharness/scripts/fx_desktop_build.py
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/debug.py
         mozconfig-variant: debug
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-fuzzing/debug:
     description: "Win64 Fuzzing Debug"
     index:
         product: firefox
         job-name: win64-fuzzing-debug
     attributes:
         enable-full-crashsymbols: true
@@ -136,24 +139,25 @@ win64-fuzzing/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/debug.py
         mozconfig-variant: debug-fuzzing
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-plain/debug:
     description: "Win64 Debug Plain"
     index:
         product: firefox
         job-name: win64-plain-debug
     treeherder:
         platform: windows2012-64/debug
@@ -173,22 +177,23 @@ win64-plain/debug:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             disable_package_metrics: true
             stage_platform: win64
         mozconfig-variant: plain-debug
     run-on-projects: ['trunk']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-node
-        - win64-nasm
-        - win64-cbindgen
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-node
+            - win64-nasm
+            - win64-cbindgen
 
 win64/opt:
     description: "Win64 Opt"
     index:
         product: firefox
         job-name: win64-opt
     attributes:
         enable-full-crashsymbols: true
@@ -207,24 +212,25 @@ win64/opt:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             stage_platform: win64
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-plain/opt:
     description: "Win64 Opt Plain"
     index:
         product: firefox
         job-name: win64-plain-opt
     treeherder:
         platform: windows2012-64/opt
@@ -244,22 +250,23 @@ win64-plain/opt:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             disable_package_metrics: true
             stage_platform: win64
         mozconfig-variant: plain-opt
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-nasm
-        - win64-node
-        - win64-cbindgen
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-nasm
+            - win64-node
+            - win64-cbindgen
 
 win32-shippable/opt:
     description: "Win32 Opt Shippable"
     use-pgo: true
     index:
         product: firefox
         job-name: win32-opt
         type: shippable
@@ -294,23 +301,24 @@ win32-shippable/opt:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win32
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
 
 win64-shippable/opt:
     description: "Win64 Shippable"
     use-pgo: true
     index:
         product: firefox
         job-name: win64-opt
         type: shippable
@@ -334,23 +342,24 @@ win64-shippable/opt:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win64
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
 
 win32-add-on-devel/opt:
     description: "Windows32 add-on-devel"
     index:
         product: firefox
         job-name: win32-add-on-devel
     treeherder:
         platform: windows2012-32-add-on-devel/opt
@@ -368,24 +377,25 @@ win32-add-on-devel/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
         extra-config:
             stage_platform: win32-add-on-devel
         mozconfig-variant: add-on-devel
     run-on-projects: ['mozilla-beta', 'mozilla-release']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-add-on-devel/opt:
     description: "Windows64 add-on-devel"
     index:
         product: firefox
         job-name: win64-add-on-devel
     treeherder:
         platform: windows2012-64-add-on-devel/opt
@@ -403,24 +413,25 @@ win64-add-on-devel/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             stage_platform: win64-on-devel
         mozconfig-variant: add-on-devel
     run-on-projects: ['mozilla-beta', 'mozilla-release']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-noopt/debug:
     description: "Win64 No-optimize Debug"
     index:
         product: firefox
         job-name: win64-noopt-debug
     treeherder:
         platform: windows2012-64-noopt/debug
@@ -437,24 +448,25 @@ win64-noopt/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/noopt_debug.py
         mozconfig-variant: noopt-debug
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win32-noopt/debug:
     description: "Win32 No-optimize Debug"
     index:
         product: firefox
         job-name: win32-noopt-debug
     treeherder:
         platform: windows2012-32-noopt/debug
@@ -471,24 +483,25 @@ win32-noopt/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
             - builds/taskcluster_sub_win32/noopt_debug.py
         mozconfig-variant: noopt-debug
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win32-rusttests/opt:
     description: "Win32 Rust Tests Opt"
     index:
         product: firefox
         job-name: win32-rusttests-opt
     treeherder:
         platform: windows2012-32/opt
@@ -510,23 +523,24 @@ win32-rusttests/opt:
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
         extra-config:
             stage_platform: win32-rusttests
             build_targets: ['pre-export', 'export', 'recurse_rusttests']
             disable_package_metrics: true
         mozconfig-variant: rusttests
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win32-rusttests/debug:
     description: "Win32 Rust Tests Debug"
     index:
         product: firefox
         job-name: win32-rusttests-debug
     treeherder:
         platform: windows2012-32/debug
@@ -548,23 +562,24 @@ win32-rusttests/debug:
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
         extra-config:
             stage_platform: win32-rusttests
             build_targets: ['pre-export', 'export', 'recurse_rusttests']
             disable_package_metrics: true
         mozconfig-variant: rusttests-debug
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-rusttests/opt:
     description: "Win64 Rust Tests Opt"
     index:
         product: firefox
         job-name: win64-rusttests-opt
     treeherder:
         platform: windows2012-64/opt
@@ -583,23 +598,24 @@ win64-rusttests/opt:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/rusttests_opt.py
         mozconfig-variant: rusttests
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-rusttests/debug:
     description: "Win64 Rust Tests Debug"
     index:
         product: firefox
         job-name: win64-rusttests-debug
     treeherder:
         platform: windows2012-64/debug
@@ -618,23 +634,24 @@ win64-rusttests/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/rusttests_opt.py
         mozconfig-variant: rusttests-debug
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-ccov/debug:
     description: "Win64 Debug Code Coverage"
     index:
         product: firefox
         job-name: win64-ccov-debug
     treeherder:
         platform: windows2012-64/ccov
@@ -655,27 +672,26 @@ win64-ccov/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/ccov_debug.py
         mozconfig-variant: code-coverage
     run-on-projects: ['mozilla-central', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust-nightly
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
     fetches:
         toolchain:
+            - win64-clang-cl
+            - win64-rust-nightly
+            - win64-rust-size
+            - win64-cbindgen
             - win64-grcov
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-asan/debug:
     description: "Win64 Debug ASAN"
     index:
         product: firefox
         job-name: win64-asan-debug
     treeherder:
         platform: windows2012-64/asan
@@ -693,24 +709,25 @@ win64-asan/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/asan_debug.py
         mozconfig-variant: debug-asan
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-asan/opt:
     description: "Win64 Opt ASAN"
     index:
         product: firefox
         job-name: win64-asan-opt
     treeherder:
         platform: windows2012-64/asan
@@ -729,24 +746,25 @@ win64-asan/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             stage_platform: win64-asan
         mozconfig-variant: nightly-asan
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-asan-reporter-nightly/opt:
     description: "Win64 Opt ASAN Reporter Nightly"
     attributes:
         nightly: true
     shipping-product:
         by-release-type:
             nightly: firefox
@@ -775,23 +793,24 @@ win64-asan-reporter-nightly/opt:
             - builds/taskcluster_sub_win64/asan_reporter_opt.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win64-asan-reporter
         mozconfig-variant: nightly-asan-reporter
         mar-channel-id:
             firefox-mozilla-central-asan
     run-on-projects: ['mozilla-central']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
 
 win64-asan-fuzzing/opt:
     description: "Win64 Fuzzing Opt ASAN"
     index:
         product: firefox
         job-name: win64-fuzzing-asan-opt
     treeherder:
         platform: windows2012-64/asan
@@ -809,24 +828,25 @@ win64-asan-fuzzing/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             stage_platform: win64-fuzzing-asan
         mozconfig-variant: nightly-fuzzing-asan
     run-on-projects: ['trunk', 'try']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win32-devedition-nightly/opt:
     description: "Win32 Dev Edition Nightly"
     use-pgo: win32-shippable/opt
     index:
         product: devedition
         job-name: win32-opt
         type: nightly
@@ -862,23 +882,24 @@ win32-devedition-nightly/opt:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win32-devedition
         mozconfig-variant: devedition
     run-on-projects: ['mozilla-beta']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
 
 win64-devedition-nightly/opt:
     description: "Win64 Dev Edition Nightly"
     use-pgo: win64-shippable/opt
     index:
         product: devedition
         job-name: win64-opt
         type: nightly
@@ -904,23 +925,24 @@ win64-devedition-nightly/opt:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win64-devedition
         mozconfig-variant: devedition
     run-on-projects: ['mozilla-beta']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
 
 win64-aarch64/debug:
     description: "AArch64 Win64 Debug"
     index:
         product: firefox
         job-name: win64-aarch64-debug
     attributes:
         enable-full-crashsymbols: true
@@ -941,24 +963,25 @@ win64-aarch64/debug:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_sub_win64/debug.py
         extra-config:
             mozconfig_platform: win64-aarch64
         mozconfig-variant: debug
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-aarch64/opt:
     description: "AArch64 Win64 Opt"
     index:
         product: firefox
         job-name: win64-aarch64-opt
     attributes:
         enable-full-crashsymbols: true
@@ -979,24 +1002,25 @@ win64-aarch64/opt:
         secrets: true
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             stage_platform: win64-aarch64
             mozconfig_platform: win64-aarch64
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-sccache
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-sccache
+            - win64-nasm
+            - win64-node
 
 win64-aarch64-eme/opt:
     description: "AArch64 Win64 Opt w/ EME"
     index:
         product: firefox
         job-name: win64-aarch64-eme-opt
     treeherder:
         platform: windows2012-aarch64/opt
@@ -1021,18 +1045,19 @@ win64-aarch64-eme/opt:
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
         extra-config:
             stage_platform: win64-aarch64
             mozconfig_platform: win64-aarch64
     dependencies:
         win32-opt: build-win32/opt
         win64-aarch64-opt: build-win64-aarch64/opt
-    toolchains:
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-node
 
 win64-aarch64-shippable/opt:
     description: "AArch64 Win64 Shippable"
     index:
         product: firefox
         job-name: win64-aarch64-opt
         type: shippable
     attributes:
@@ -1109,18 +1134,18 @@ win64-aarch64-shippable/opt:
               extract: false
               dest: ../public/build
             - artifact: target.generated-files.tar.gz
               extract: false
               dest: ../public/build
             - artifact: target.langpack.xpi
               extract: false
               dest: ../public/build
-    toolchains:
-        - win64-node
+        toolchain:
+            - win64-node
 
 win64-aarch64-shippable-no-eme/opt:
     description: "AArch64 Win64 Shippable w/o EME"
     use-pgo: win64-shippable/opt
     index:
         product: firefox
         job-name: win64-aarch64-no-eme-opt
         type: shippable
@@ -1146,23 +1171,24 @@ win64-aarch64-shippable-no-eme/opt:
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win64-aarch64
             mozconfig_platform: win64-aarch64
     run-on-projects: []
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
 
 
 win64-aarch64-devedition-nightly/opt:
     description: "AArch64 Win64 MSVC Devedition Nightly"
     index:
         product: devedition
         job-name: win64-aarch64-opt
         type: nightly
@@ -1190,15 +1216,16 @@ win64-aarch64-devedition-nightly/opt:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - taskcluster_nightly.py
         extra-config:
             stage_platform: win64-aarch64
             mozconfig_platform: win64-aarch64
         mozconfig-variant: devedition
     run-on-projects: ['mozilla-beta']
-    toolchains:
-        - win64-clang-cl
-        - win64-rust
-        - win64-rust-size
-        - win64-cbindgen
-        - win64-nasm
-        - win64-node
+    fetches:
+        toolchain:
+            - win64-clang-cl
+            - win64-rust
+            - win64-rust-size
+            - win64-cbindgen
+            - win64-nasm
+            - win64-node
--- a/taskcluster/ci/generate-profile/kind.yml
+++ b/taskcluster/ci/generate-profile/kind.yml
@@ -7,17 +7,16 @@ loader: taskgraph.loader.transform:loade
 kind-dependencies:
     - toolchain
     - instrumented-build
 
 transforms:
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.release_deps:transforms
     - taskgraph.transforms.run_pgo_profile:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 
 job-defaults:
     treeherder:
         symbol: Bpgo(run)
         kind: build
@@ -122,18 +121,19 @@ jobs:
             job-script: taskcluster/scripts/tester/test-linux.sh
             script: android_emulator_pgo.py
             tooltool-downloads: internal
             options: [installer-path=/builds/worker/fetches/target.apk]
             config:
                 - android/android_common.py
                 - android/androidarm_4_3.py
                 - android/android_pgo.py
-        toolchains:
-            - linux64-clang
+        fetches:
+            toolchain:
+                - linux64-clang
 
     win32-shippable/opt:
         description: "Win32 Profile Generation"
         shipping-phase: build
         shipping-product: firefox
         index:
             product: firefox
             job-name: win32-profile
--- a/taskcluster/ci/instrumented-build/kind.yml
+++ b/taskcluster/ci/instrumented-build/kind.yml
@@ -7,17 +7,16 @@ loader: taskgraph.loader.transform:loade
 kind-dependencies:
     - toolchain
     - fetch
 
 transforms:
     - taskgraph.transforms.build:transforms
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 job-defaults:
     shipping-phase: build
     treeherder:
         symbol: Bpgo(instr)
         tier: 1
@@ -42,48 +41,50 @@ jobs:
             docker-image: {in-tree: debian7-i386-build}
         run:
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_base_linux_32_builds.py
             mozconfig-variant: profile-generate
             tooltool-downloads: public
             need-xvfb: true
-        toolchains:
-            - linux64-binutils
-            - linux64-clang
-            - linux64-rust
-            - linux64-rust-size
-            - linux64-cbindgen
-            - linux64-sccache
-            - linux64-nasm
-            - linux64-node
+        fetches:
+            toolchain:
+                - linux64-binutils
+                - linux64-clang
+                - linux64-rust
+                - linux64-rust-size
+                - linux64-cbindgen
+                - linux64-sccache
+                - linux64-nasm
+                - linux64-node
 
     linux64-shippable/opt:
         description: "Linux64 Instrumented"
         shipping-product: firefox
         treeherder:
             platform: linux64-shippable/opt
         worker-type: b-linux
         run:
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_base_linux_64_builds.py
             mozconfig-variant: profile-generate
             tooltool-downloads: public
             need-xvfb: true
-        toolchains:
-            - linux64-binutils
-            - linux64-clang
-            - linux64-rust
-            - linux64-rust-size
-            - linux64-cbindgen
-            - linux64-sccache
-            - linux64-nasm
-            - linux64-node
+        fetches:
+            toolchain:
+                - linux64-binutils
+                - linux64-clang
+                - linux64-rust
+                - linux64-rust-size
+                - linux64-cbindgen
+                - linux64-sccache
+                - linux64-nasm
+                - linux64-node
 
     android-api-16/pgo:
         description: "Android 4.0 api-16+ PGO instrumented"
         shipping-product: fennec
         treeherder:
             platform: android-4-0-armv7-api16/pgo
         worker-type: b-linux
         worker:
@@ -101,27 +102,28 @@ jobs:
                 - name: public/build/geckoview_example.apk
                   path: /builds/worker/workspace/build/src/obj-firefox/gradle/build/mobile/android/geckoview_example/outputs/apk/withGeckoBinaries/debug/geckoview_example-withGeckoBinaries-debug.apk
                   type: file
         run:
             config:
                 - builds/releng_base_android_64_builds.py
             custom-build-variant-cfg: api-16-profile-generate
             tooltool-downloads: internal
-        toolchains:
-            - android-gradle-dependencies
-            - android-ndk-linux
-            - android-sdk-linux
-            - linux64-clang-android-cross
-            - linux64-rust-android
-            - linux64-rust-size
-            - linux64-cbindgen
-            - linux64-sccache
-            - linux64-nasm
-            - linux64-node
+        fetches:
+            toolchain:
+                - android-gradle-dependencies
+                - android-ndk-linux
+                - android-sdk-linux
+                - linux64-clang-android-cross
+                - linux64-rust-android
+                - linux64-rust-size
+                - linux64-cbindgen
+                - linux64-sccache
+                - linux64-nasm
+                - linux64-node
 
     win32-shippable/opt:
         description: "Win32 Shippable PGO Instrumented"
         shipping-product: firefox
         treeherder:
             platform: windows2012-32-shippable/opt
         worker-type: b-win2012
         worker:
@@ -132,23 +134,24 @@ jobs:
             options: [append-env-variables-from-configs]
             mozconfig-variant: profile-generate
             config:
                 - builds/releng_base_firefox.py
                 - builds/taskcluster_base_windows.py
                 - builds/taskcluster_base_win32.py
             extra-config:
                 stage_platform: win32
-        toolchains:
-            - win64-clang-cl
-            - win64-rust
-            - win64-rust-size
-            - win64-cbindgen
-            - win64-nasm
-            - win64-node
+        fetches:
+            toolchain:
+                - win64-clang-cl
+                - win64-rust
+                - win64-rust-size
+                - win64-cbindgen
+                - win64-nasm
+                - win64-node
 
     win64-shippable/opt:
         description: "Win64 Shippable PGO Instrumented"
         shipping-product: firefox
         treeherder:
             platform: windows2012-64-shippable/opt
         worker-type: b-win2012
         worker:
@@ -159,15 +162,16 @@ jobs:
             options: [append-env-variables-from-configs]
             mozconfig-variant: profile-generate
             config:
                 - builds/releng_base_firefox.py
                 - builds/taskcluster_base_windows.py
                 - builds/taskcluster_base_win64.py
             extra-config:
                 stage_platform: win64
-        toolchains:
-            - win64-clang-cl
-            - win64-rust
-            - win64-rust-size
-            - win64-cbindgen
-            - win64-nasm
-            - win64-node
+        fetches:
+            toolchain:
+                - win64-clang-cl
+                - win64-rust
+                - win64-rust-size
+                - win64-cbindgen
+                - win64-nasm
+                - win64-node
--- a/taskcluster/ci/l10n/kind.yml
+++ b/taskcluster/ci/l10n/kind.yml
@@ -3,17 +3,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.multi_dep:loader
 
 group-by: platform
 
 transforms:
     - taskgraph.transforms.l10n:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - build
     - build-signing
     - repackage
     - toolchain
@@ -47,25 +46,26 @@ job-template:
         by-build-platform:
             android-api-16:
                 in-tree: android-build
             default: null
     secrets:
         by-build-platform:
             default: false
             android-api-16: true
-    toolchains:
-        by-build-platform:
-            default: []
-            macosx64.*:
-                - linux64-libdmg
-                - linux64-hfsplus
-            android-api-16:
-                - android-gradle-dependencies
-                - android-sdk-linux
+    fetches:
+        toolchain:
+            by-build-platform:
+                default: []
+                macosx64.*:
+                    - linux64-libdmg
+                    - linux64-hfsplus
+                android-api-16:
+                    - android-gradle-dependencies
+                    - android-sdk-linux
     tooltool:
         by-build-platform:
             default: internal
             linux.*: public
     index:
         type: l10n
         product:
             by-build-platform:
--- a/taskcluster/ci/nightly-l10n/kind.yml
+++ b/taskcluster/ci/nightly-l10n/kind.yml
@@ -3,17 +3,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.multi_dep:loader
 
 group-by: platform
 
 transforms:
     - taskgraph.transforms.l10n:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - build
     - build-signing
     - repackage
     - toolchain
@@ -64,25 +63,26 @@ job-template:
         by-build-platform:
             android-api-16-nightly:
                 in-tree: android-build
             default: null
     secrets:
         by-build-platform:
             default: false
             android-api-16-nightly: true
-    toolchains:
-        by-build-platform:
-            default: []
-            macosx64.*:
-                - linux64-libdmg
-                - linux64-hfsplus
-            android-api-16-nightly:
-                - android-gradle-dependencies
-                - android-sdk-linux
+    fetches:
+        toolchain:
+            by-build-platform:
+                default: []
+                macosx64.*:
+                    - linux64-libdmg
+                    - linux64-hfsplus
+                android-api-16-nightly:
+                    - android-gradle-dependencies
+                    - android-sdk-linux
     tooltool:
         by-build-platform:
             default: internal
             linux.*: public
     index:
         type:
             by-build-platform:
                 .*nightly.*: nightly-l10n
--- a/taskcluster/ci/release-eme-free-repack-repackage/kind.yml
+++ b/taskcluster/ci/release-eme-free-repack-repackage/kind.yml
@@ -3,17 +3,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.single_dep:loader
 
 transforms:
     - taskgraph.transforms.chunk_partners:transforms
     - taskgraph.transforms.name_sanity:transforms
     - taskgraph.transforms.repackage_partner:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - release-eme-free-repack
     - release-eme-free-repack-signing
     - toolchain
 
--- a/taskcluster/ci/release-partner-repack-repackage/kind.yml
+++ b/taskcluster/ci/release-partner-repack-repackage/kind.yml
@@ -3,17 +3,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.single_dep:loader
 
 transforms:
     - taskgraph.transforms.chunk_partners:transforms
     - taskgraph.transforms.name_sanity:transforms
     - taskgraph.transforms.repackage_partner:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - release-partner-repack
     - release-partner-repack-signing
     - toolchain
 
--- a/taskcluster/ci/release-source/kind.yml
+++ b/taskcluster/ci/release-source/kind.yml
@@ -6,17 +6,16 @@ loader: taskgraph.loader.transform:loade
 
 kind-dependencies:
     - toolchain
 
 transforms:
     - taskgraph.transforms.build:transforms
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 
 job-defaults:
     shipping-phase: promote
     treeherder:
         symbol: Src
--- a/taskcluster/ci/repackage-l10n/kind.yml
+++ b/taskcluster/ci/repackage-l10n/kind.yml
@@ -3,17 +3,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.single_dep:loader
 
 transforms:
     - taskgraph.transforms.repackage_l10n:transforms
     - taskgraph.transforms.name_sanity:transforms
     - taskgraph.transforms.repackage:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - nightly-l10n-signing
     - toolchain
 
 only-for-build-platforms:
--- a/taskcluster/ci/repackage-msi/kind.yml
+++ b/taskcluster/ci/repackage-msi/kind.yml
@@ -2,17 +2,16 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.single_dep:loader
 
 transforms:
     - taskgraph.transforms.name_sanity:transforms
     - taskgraph.transforms.repackage:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - repackage-signing
     - repackage-signing-l10n
     - fetch
 
--- a/taskcluster/ci/repackage/kind.yml
+++ b/taskcluster/ci/repackage/kind.yml
@@ -2,17 +2,16 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ---
 loader: taskgraph.loader.single_dep:loader
 
 transforms:
     - taskgraph.transforms.name_sanity:transforms
     - taskgraph.transforms.repackage:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.repackage_routes:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 kind-dependencies:
     - build-signing
     - toolchain
 
--- a/taskcluster/ci/searchfox/kind.yml
+++ b/taskcluster/ci/searchfox/kind.yml
@@ -5,17 +5,16 @@
 loader: taskgraph.loader.transform:loader
 
 kind-dependencies:
     - toolchain
 
 transforms:
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 job-defaults:
     index:
         product: firefox
     treeherder:
         symbol: Searchfox(idx)
@@ -42,23 +41,24 @@ jobs:
             using: mozharness
             actions: [build]
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_sub_linux_configs/64_searchfox_and_debug.py
             script: "mozharness/scripts/fx_desktop_build.py"
             tooltool-downloads: public
             keep-artifacts: false
-        toolchains:
-            - linux64-binutils
-            - linux64-clang
-            - linux64-nasm
-            - linux64-node
-            - linux64-rust
-            - linux64-cbindgen
+        fetches:
+            toolchain:
+                - linux64-binutils
+                - linux64-clang
+                - linux64-nasm
+                - linux64-node
+                - linux64-rust
+                - linux64-cbindgen
 
     macosx64-searchfox/debug:
         description: "MacOS X x64 Debug Cross-compile Searchfox"
         index:
             job-name: macosx64-searchfox-debug
         treeherder:
             platform: osx-cross/debug
         worker-type: b-linux
@@ -75,27 +75,28 @@ jobs:
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_base_mac_64_cross_builds.py
             script: "mozharness/scripts/fx_desktop_build.py"
             custom-build-variant-cfg: cross-debug-searchfox
             secrets: true
             tooltool-downloads: internal
             keep-artifacts: false
-        toolchains:
-            - linux64-binutils
-            - linux64-cctools-port
-            - linux64-clang-macosx-cross
-            - linux64-hfsplus
-            - linux64-libdmg
-            - linux64-llvm-dsymutil
-            - linux64-nasm
-            - linux64-node
-            - linux64-rust-macos
-            - linux64-cbindgen
+        fetches:
+            toolchain:
+                - linux64-binutils
+                - linux64-cctools-port
+                - linux64-clang-macosx-cross
+                - linux64-hfsplus
+                - linux64-libdmg
+                - linux64-llvm-dsymutil
+                - linux64-nasm
+                - linux64-node
+                - linux64-rust-macos
+                - linux64-cbindgen
 
     win64-searchfox/debug:
         description: "Win64 Searchfox Debug (clang-cl)"
         index:
             product: firefox
             job-name: win64-searchfox-debug
         treeherder:
             platform: windows2012-64/debug
@@ -113,22 +114,23 @@ jobs:
             use-caches: false
             options: [append-env-variables-from-configs]
             script: mozharness/scripts/fx_desktop_build.py
             config:
                 - builds/releng_base_firefox.py
                 - builds/taskcluster_base_windows.py
                 - builds/taskcluster_base_win64.py
                 - builds/taskcluster_sub_win64/searchfox_debug.py
-        toolchains:
-            - win64-clang-cl
-            - win64-node
-            - win64-rust
-            - win64-cbindgen
-            - win64-nasm
+        fetches:
+            toolchain:
+                - win64-clang-cl
+                - win64-node
+                - win64-rust
+                - win64-cbindgen
+                - win64-nasm
 
     android-armv7-searchfox/debug:
         description: "Android ARMv7 Debug Searchfox"
         index:
             job-name: android-armv7-searchfox-debug
         treeherder:
             platform: android-4-0-armv7-api16/debug
         worker-type: b-linux
@@ -145,19 +147,20 @@ jobs:
             using: mozharness
             actions: [get-secrets, build]
             config:
                 - builds/releng_base_android_64_builds.py
             script: "mozharness/scripts/fx_desktop_build.py"
             secrets: true
             custom-build-variant-cfg: api-16-debug-searchfox
             tooltool-downloads: internal
-        toolchains:
-            - android-gradle-dependencies
-            - android-ndk-linux
-            - android-sdk-linux
-            - linux64-clang
-            - linux64-rust-android
-            - linux64-rust-size
-            - linux64-cbindgen
-            - linux64-sccache
-            - linux64-nasm
-            - linux64-node
+        fetches:
+            toolchain:
+                - android-gradle-dependencies
+                - android-ndk-linux
+                - android-sdk-linux
+                - linux64-clang
+                - linux64-rust-android
+                - linux64-rust-size
+                - linux64-cbindgen
+                - linux64-sccache
+                - linux64-nasm
+                - linux64-node
--- a/taskcluster/ci/static-analysis-autotest/kind.yml
+++ b/taskcluster/ci/static-analysis-autotest/kind.yml
@@ -5,17 +5,16 @@
 loader: taskgraph.loader.transform:loader
 
 kind-dependencies:
     - toolchain
 
 transforms:
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 job-defaults:
     attributes:
         retrigger: true
     index:
         product: firefox
@@ -49,25 +48,26 @@ jobs:
                 LD_LIBRARY_PATH: /builds/worker/workspace/build/src/clang/lib
                 PERFHERDER_EXTRA_OPTIONS: static-analysis-autotest
         run:
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_sub_linux_configs/64_stat_and_debug.py
             tooltool-downloads: public
             keep-artifacts: false
-        toolchains:
-            - linux64-clang
-            - linux64-clang-tidy
-            - linux64-infer
-            - linux64-rust
-            - linux64-sccache
-            - linux64-cbindgen
-            - linux64-nasm
-            - linux64-node
+        fetches:
+            toolchain:
+                - linux64-clang
+                - linux64-clang-tidy
+                - linux64-infer
+                - linux64-rust
+                - linux64-sccache
+                - linux64-cbindgen
+                - linux64-nasm
+                - linux64-node
 
     win64-st-autotest/debug:
         description: "Win64 Debug Static Analysis Autotest"
         index:
             job-name: win64-st-autotest-debug
         treeherder:
             platform: windows2012-64/debug
             tier: 2
@@ -78,16 +78,17 @@ jobs:
         run:
             config:
                 - builds/releng_base_firefox.py
                 - builds/taskcluster_base_windows.py
                 - builds/taskcluster_base_win64.py
                 - builds/taskcluster_sub_win64/debug.py
             extra-config:
                 mozconfig_variant: debug
-        toolchains:
-            - win64-clang-cl
-            - win64-rust
-            - win64-sccache
-            - win64-cbindgen
-            - win64-clang-tidy
-            - win64-nasm
-            - win64-node
+        fetches:
+            toolchain:
+                - win64-clang-cl
+                - win64-rust
+                - win64-sccache
+                - win64-cbindgen
+                - win64-clang-tidy
+                - win64-nasm
+                - win64-node
--- a/taskcluster/ci/valgrind/kind.yml
+++ b/taskcluster/ci/valgrind/kind.yml
@@ -5,17 +5,16 @@
 loader: taskgraph.loader.transform:loader
 
 kind-dependencies:
     - toolchain
 
 transforms:
     - taskgraph.transforms.build_attrs:transforms
     - taskgraph.transforms.build_lints:transforms
-    - taskgraph.transforms.use_toolchains:transforms
     - taskgraph.transforms.job:transforms
     - taskgraph.transforms.task:transforms
 
 job-defaults:
     attributes:
         retrigger: true
 
 jobs:
@@ -41,16 +40,17 @@ jobs:
             custom-build-variant-cfg: valgrind
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_base_linux_64_builds.py
             script: "mozharness/scripts/fx_desktop_build.py"
             secrets: true
             tooltool-downloads: public
             need-xvfb: true
-        toolchains:
-            - linux64-binutils
-            - linux64-clang
-            - linux64-rust
-            - linux64-cbindgen
-            - linux64-sccache
-            - linux64-nasm
-            - linux64-node
+        fetches:
+            toolchain:
+                - linux64-binutils
+                - linux64-clang
+                - linux64-rust
+                - linux64-cbindgen
+                - linux64-sccache
+                - linux64-nasm
+                - linux64-node
--- a/taskcluster/taskgraph/transforms/l10n.py
+++ b/taskcluster/taskgraph/transforms/l10n.py
@@ -99,17 +99,19 @@ l10n_description_schema = schema.extend(
     # Docker image required for task.  We accept only in-tree images
     # -- generally desktop-build or android-build -- for now.
     Required('docker-image'): _by_platform(Any(
         # an in-tree generated docker image (from `taskcluster/docker/<name>`)
         {'in-tree': basestring},
         None,
     )),
 
-    Optional('toolchains'): _by_platform([basestring]),
+    Optional('fetches'): {
+        basestring: _by_platform([basestring]),
+    },
 
     # The set of secret names to which the task has access; these are prefixed
     # with `project/releng/gecko/{treeherder.kind}/level-{level}/`.  Setting
     # this will enable any worker features required and set the task's scopes
     # appropriately.  `true` here means ['*'], all secrets.  Not supported on
     # Windows
     Required('secrets', default=False): _by_platform(Any(bool, [basestring])),
 
@@ -229,17 +231,17 @@ def handle_keyed_by(config, jobs):
     fields = [
         "locales-file",
         "locales-per-chunk",
         "worker-type",
         "description",
         "run-time",
         "docker-image",
         "secrets",
-        "toolchains",
+        "fetches.toolchain",
         "tooltool",
         "env",
         "ignore-locales",
         "mozharness.config",
         "mozharness.options",
         "mozharness.actions",
         "mozharness.script",
         "treeherder.tier",
@@ -397,18 +399,18 @@ def make_job_description(config, jobs):
                 'chain-of-trust': True,
             }
             job_description['run']['tooltool-downloads'] = job['tooltool']
             job_description['run']['need-xvfb'] = True
 
         if job.get('docker-image'):
             job_description['worker']['docker-image'] = job['docker-image']
 
-        if job.get('toolchains'):
-            job_description['toolchains'] = job['toolchains']
+        if job.get('fetches'):
+            job_description['fetches'] = job['fetches']
 
         if job.get('index'):
             job_description['index'] = {
                 'product': job['index']['product'],
                 'job-name': job['index']['job-name'],
                 'type': job['index'].get('type', 'generic'),
             }
 
--- a/taskcluster/taskgraph/transforms/repackage.py
+++ b/taskcluster/taskgraph/transforms/repackage.py
@@ -333,21 +333,21 @@ def make_job_description(config, jobs):
                                                  signing_task, repackage_signing_task,
                                                  locale=locale,
                                                  project=config.params["project"],
                                                  existing_fetch=job.get('fetches')),
             'release-artifacts': [artifact['name'] for artifact in worker['artifacts']]
         }
 
         if build_platform.startswith('macosx'):
-            task['toolchains'] = [
+            task.setdefault('fetches', {}).setdefault('toolchain', []).extend([
                 'linux64-libdmg',
                 'linux64-hfsplus',
                 'linux64-node',
-            ]
+            ])
         yield task
 
 
 def _generate_download_config(task, build_platform, signing_task,
                               repackage_signing_task, locale=None, project=None,
                               existing_fetch=None):
     locale_path = '{}/'.format(locale) if locale else ''
     fetch = {}
--- a/taskcluster/taskgraph/transforms/repackage_partner.py
+++ b/taskcluster/taskgraph/transforms/repackage_partner.py
@@ -209,21 +209,21 @@ def make_job_description(config, jobs):
             'run': run,
             'fetches': _generate_download_config(dep_job, build_platform,
                                                  signing_task, partner=repack_id,
                                                  project=config.params["project"],
                                                  repack_stub_installer=repack_stub_installer),
         }
 
         if build_platform.startswith('macosx'):
-            task['toolchains'] = [
+            task.setdefault('fetches', {}).setdefault('toolchain', []).extend([
                 'linux64-libdmg',
                 'linux64-hfsplus',
                 'linux64-node',
-            ]
+            ])
         yield task
 
 
 def _generate_download_config(task, build_platform, signing_task, partner=None,
                               project=None, repack_stub_installer=False):
     locale_path = '{}/'.format(partner) if partner else ''
 
     if build_platform.startswith('macosx'):
deleted file mode 100644
--- a/taskcluster/taskgraph/transforms/use_toolchains.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-from __future__ import absolute_import, print_function, unicode_literals
-
-from taskgraph.transforms.base import TransformSequence
-
-
-transforms = TransformSequence()
-
-
-@transforms.add
-def use_toolchains(config, jobs):
-    """Transform toolchains definitions into the corresponding fetch
-    definitions.
-    """
-    for job in jobs:
-        toolchains = job.pop('toolchains', None)
-        if toolchains:
-            job.setdefault('fetches', {}) \
-               .setdefault('toolchain', []) \
-               .extend(toolchains)
-        yield job