// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package main

/*
	Generate the tasks.json file.
*/

import (
	"encoding/json"
	"fmt"
	"os"
	"path"
	"sort"
	"strings"
	"time"

	"github.com/skia-dev/glog"
	"go.skia.org/infra/go/util"
	"go.skia.org/infra/task_scheduler/go/specs"
)

const (
	DEFAULT_OS       = DEFAULT_OS_LINUX
	DEFAULT_OS_LINUX = "Ubuntu-14.04"

	// Pool for Skia bots.
	POOL_SKIA = "Skia"

	// Name prefix for upload jobs.
	PREFIX_UPLOAD = "Upload"
)

var (
	// "Constants"

	// Top-level list of all jobs to run at each commit.
	JOBS = []string{
		"Build-Mac-Clang-Arm7-Debug-iOS",
		"Build-Mac-Clang-Arm7-Release-iOS",
		"Build-Mac-Clang-arm64-Debug-Android",
		"Build-Mac-Clang-arm64-Debug-GN_iOS",
		"Build-Mac-Clang-x86_64-Debug",
		"Build-Mac-Clang-x86_64-Debug-CommandBuffer",
		"Build-Mac-Clang-x86_64-Release",
		"Build-Mac-Clang-x86_64-Release-CommandBuffer",
		"Build-Ubuntu-Clang-arm-Debug-Android",
		"Build-Ubuntu-Clang-arm-Release-Android",
		"Build-Ubuntu-Clang-arm64-Debug-Android",
		"Build-Ubuntu-Clang-arm64-Debug-Android_FrameworkDefs",
		"Build-Ubuntu-Clang-arm64-Debug-Android_Vulkan",
		"Build-Ubuntu-Clang-arm64-Release-Android",
		"Build-Ubuntu-Clang-arm64-Release-Android_Vulkan",
		"Build-Ubuntu-Clang-mips64el-Debug-Android",
		"Build-Ubuntu-Clang-mips64el-Release-Android",
		"Build-Ubuntu-Clang-mipsel-Debug-Android",
		"Build-Ubuntu-Clang-mipsel-Release-Android",
		"Build-Ubuntu-Clang-x64-Debug-Android",
		"Build-Ubuntu-Clang-x64-Release-Android",
		"Build-Ubuntu-Clang-x86-Debug-Android",
		"Build-Ubuntu-Clang-x86-Debug-Android_Vulkan",
		"Build-Ubuntu-Clang-x86-Release-Android",
		"Build-Ubuntu-Clang-x86-Release-Android_Vulkan",
		"Build-Ubuntu-Clang-x86_64-Debug",
		"Build-Ubuntu-Clang-x86_64-Debug-ASAN",
		"Build-Ubuntu-Clang-x86_64-Debug-MSAN",
		"Build-Ubuntu-Clang-x86_64-Debug-Vulkan",
		"Build-Ubuntu-Clang-x86_64-Release",
		"Build-Ubuntu-Clang-x86_64-Release-ASAN",
		"Build-Ubuntu-Clang-x86_64-Release-Fast",
		"Build-Ubuntu-Clang-x86_64-Release-TSAN",
		"Build-Ubuntu-Clang-x86_64-Release-Vulkan",
		"Build-Ubuntu-GCC-x86-Debug",
		"Build-Ubuntu-GCC-x86-Release",
		"Build-Ubuntu-GCC-x86_64-Debug",
		"Build-Ubuntu-GCC-x86_64-Debug-NoGPU",
		"Build-Ubuntu-GCC-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE",
		"Build-Ubuntu-GCC-x86_64-Release",
		"Build-Ubuntu-GCC-x86_64-Release-ANGLE",
		"Build-Ubuntu-GCC-x86_64-Release-Mesa",
		"Build-Ubuntu-GCC-x86_64-Release-NoGPU",
		"Build-Ubuntu-GCC-x86_64-Release-PDFium",
		"Build-Ubuntu-GCC-x86_64-Release-PDFium_SkiaPaths",
		"Build-Ubuntu-GCC-x86_64-Release-SKNX_NO_SIMD",
		"Build-Ubuntu-GCC-x86_64-Release-Shared",
		"Build-Ubuntu-GCC-x86_64-Release-Valgrind",
		"Build-Win-Clang-arm64-Release-Android",
		"Build-Win-MSVC-x86-Debug",
		"Build-Win-MSVC-x86-Debug-ANGLE",
		"Build-Win-MSVC-x86-Debug-Exceptions",
		"Build-Win-MSVC-x86-Debug-GDI",
		"Build-Win-MSVC-x86-Release",
		"Build-Win-MSVC-x86-Release-ANGLE",
		"Build-Win-MSVC-x86-Release-GDI",
		"Build-Win-MSVC-x86_64-Debug",
		"Build-Win-MSVC-x86_64-Debug-ANGLE",
		"Build-Win-MSVC-x86_64-Debug-GDI",
		"Build-Win-MSVC-x86_64-Debug-Vulkan",
		"Build-Win-MSVC-x86_64-Release",
		"Build-Win-MSVC-x86_64-Release-ANGLE",
		"Build-Win-MSVC-x86_64-Release-GDI",
		"Build-Win-MSVC-x86_64-Release-Vulkan",
		"Housekeeper-Nightly-RecreateSKPs_Canary",
		"Housekeeper-PerCommit",
		"Housekeeper-PerCommit-InfraTests",
		"Housekeeper-Weekly-RecreateSKPs",
		"Perf-Android-Clang-AndroidOne-CPU-MT6582-arm-Debug-Android",
		"Perf-Android-Clang-AndroidOne-CPU-MT6582-arm-Release-Android",
		"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android",
		"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-Android",
		"Perf-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Debug-Android",
		"Perf-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Debug-Android_Vulkan",
		"Perf-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Release-Android",
		"Perf-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Release-Android_Vulkan",
		"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-Android",
		"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-Android_Vulkan",
		"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-Android",
		"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-Android_Vulkan",
		"Perf-Android-Clang-Nexus10-GPU-MaliT604-arm-Debug-Android",
		"Perf-Android-Clang-Nexus10-GPU-MaliT604-arm-Release-Android",
		"Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-Android",
		"Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-Android",
		"Perf-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Debug-Android",
		"Perf-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Debug-Android_Vulkan",
		"Perf-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Release-Android",
		"Perf-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Release-Android_Vulkan",
		"Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-Android",
		"Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-Android",
		"Perf-Android-Clang-NexusPlayer-CPU-Moorefield-x86-Debug-Android",
		"Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-Android",
		// "Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-Android_Vulkan",
		"Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-Android",
		// "Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-Android_Vulkan",
		"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-Android",
		"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-Android_Vulkan",
		"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-Android",
		"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-Android_Vulkan",
		"Perf-Android-Clang-PixelC-CPU-TegraX1-arm64-Debug-Android",
		"Perf-Android-Clang-PixelC-CPU-TegraX1-arm64-Release-Android",
		"Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-Android_Skpbench",
		"Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-Android_Vulkan_Skpbench",
		"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Debug",
		"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Release",
		"Perf-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Debug",
		"Perf-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release",
		"Perf-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Debug",
		"Perf-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Release",
		"Perf-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Release-CommandBuffer",
		"Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug",
		"Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN",
		"Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-MSAN",
		"Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release",
		"Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-ASAN",
		"Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-Fast",
		"Perf-Ubuntu-Clang-Golo-GPU-GT610-x86_64-Debug-ASAN",
		"Perf-Ubuntu-Clang-Golo-GPU-GT610-x86_64-Release-ASAN",
		"Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86-Debug",
		"Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug",
		"Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE",
		"Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release",
		"Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-CT_BENCH_1k_SKPs",
		"Perf-Ubuntu-GCC-Golo-GPU-GT610-x86_64-Release-CT_BENCH_1k_SKPs",
		"Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind",
		"Perf-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Debug",
		"Perf-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Release",
		"Perf-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Debug",
		"Perf-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Release",
		"Perf-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Debug-Vulkan",
		"Perf-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Release-Vulkan",
		"Perf-Win10-MSVC-Golo-GPU-GT610-x86_64-Release",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Debug",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Debug-ANGLE",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Debug-Vulkan",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Release",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Release-ANGLE",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Release-Vulkan",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris6100-x86_64-Debug-ANGLE",
		"Perf-Win10-MSVC-NUC-GPU-IntelIris6100-x86_64-Release-ANGLE",
		"Perf-Win10-MSVC-ShuttleA-GPU-AMDHD7770-x86_64-Debug",
		"Perf-Win10-MSVC-ShuttleA-GPU-AMDHD7770-x86_64-Release",
		"Perf-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Debug",
		"Perf-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Debug-Vulkan",
		"Perf-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Release",
		"Perf-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Release-Vulkan",
		"Perf-Win10-MSVC-ShuttleB-GPU-IntelHD4600-x86_64-Debug",
		"Perf-Win10-MSVC-ShuttleB-GPU-IntelHD4600-x86_64-Release",
		"Perf-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Debug",
		"Perf-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Debug-ANGLE",
		"Perf-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Release",
		"Perf-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Release-ANGLE",
		"Perf-Win10-MSVC-ShuttleC-GPU-iHD530-x86_64-Debug",
		"Perf-Win10-MSVC-ShuttleC-GPU-iHD530-x86_64-Release",
		"Perf-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Debug",
		"Perf-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Debug-ANGLE",
		"Perf-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Debug-Vulkan",
		"Perf-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Release",
		"Perf-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Release-ANGLE",
		"Perf-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Release-Vulkan",
		"Perf-Win2k8-MSVC-GCE-CPU-AVX2-x86-Debug",
		"Perf-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Debug",
		"Perf-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Debug-GDI",
		"Perf-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Release",
		"Perf-iOS-Clang-iPadMini4-GPU-GX6450-Arm7-Debug",
		"Perf-iOS-Clang-iPadMini4-GPU-GX6450-Arm7-Release",
		"Test-Android-Clang-AndroidOne-CPU-MT6582-arm-Debug-Android",
		"Test-Android-Clang-AndroidOne-CPU-MT6582-arm-Release-Android",
		"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android",
		"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-Android",
		"Test-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Debug-Android",
		"Test-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Debug-Android_Vulkan",
		"Test-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Release-Android",
		"Test-Android-Clang-GalaxyS7-GPU-Adreno530-arm64-Release-Android_Vulkan",
		"Test-Android-Clang-GalaxyTab3-GPU-Vivante-arm-Debug-Android",
		"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-Android",
		"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-Android_Vulkan",
		"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-Android",
		"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-Android_Vulkan",
		"Test-Android-Clang-Nexus10-GPU-MaliT604-arm-Debug-Android",
		"Test-Android-Clang-Nexus10-GPU-MaliT604-arm-Release-Android",
		"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-Android",
		"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-Android",
		"Test-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Debug-Android",
		"Test-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Debug-Android_Vulkan",
		"Test-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Release-Android",
		"Test-Android-Clang-Nexus6p-GPU-Adreno430-arm64-Release-Android_Vulkan",
		"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-Android",
		"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-Android",
		"Test-Android-Clang-NexusPlayer-CPU-Moorefield-x86-Debug-Android",
		"Test-Android-Clang-NexusPlayer-CPU-Moorefield-x86-Release-Android",
		"Test-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-Android",
		// "Test-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-Android_Vulkan",
		"Test-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-Android",
		// "Test-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-Android_Vulkan",
		"Test-Android-Clang-PixelC-CPU-TegraX1-arm64-Debug-Android",
		"Test-Android-Clang-PixelC-CPU-TegraX1-arm64-Release-Android",
		"Test-Android-Clang-PixelXL-GPU-Adreno530-arm64-Debug-Android",
		"Test-Android-Clang-PixelXL-GPU-Adreno530-arm64-Debug-Android_Vulkan",
		"Test-Android-Clang-PixelXL-GPU-Adreno530-arm64-Release-Android",
		"Test-Android-Clang-PixelXL-GPU-Adreno530-arm64-Release-Android_Vulkan",
		"Test-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Debug",
		"Test-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Release",
		"Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Debug",
		"Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release",
		"Test-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Debug",
		"Test-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Debug-CommandBuffer",
		"Test-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Release",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-MSAN",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-ASAN",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-Fast",
		"Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-TSAN",
		"Test-Ubuntu-Clang-Golo-GPU-GT610-x86_64-Debug-ASAN",
		"Test-Ubuntu-Clang-Golo-GPU-GT610-x86_64-Release-ASAN",
		"Test-Ubuntu-Clang-Golo-GPU-GT610-x86_64-Release-TSAN",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86-Debug",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_100k_SKPs",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_IMG_DECODE_100k_SKPs",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release",
		"Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD",
		"Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind",
		"Test-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Debug",
		"Test-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Release",
		"Test-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Debug",
		"Test-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Release",
		"Test-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Debug-Vulkan",
		"Test-Ubuntu16-Clang-NUC-GPU-IntelIris540-x86_64-Release-Vulkan",
		"Test-Win10-MSVC-Golo-GPU-GT610-x86_64-Release",
		"Test-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Debug",
		"Test-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Debug-ANGLE",
		"Test-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Debug-Vulkan",
		"Test-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Release",
		"Test-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Release-ANGLE",
		"Test-Win10-MSVC-NUC-GPU-IntelIris540-x86_64-Release-Vulkan",
		"Test-Win10-MSVC-NUC-GPU-IntelIris6100-x86_64-Debug-ANGLE",
		"Test-Win10-MSVC-NUC-GPU-IntelIris6100-x86_64-Release-ANGLE",
		"Test-Win10-MSVC-ShuttleA-GPU-AMDHD7770-x86_64-Debug",
		"Test-Win10-MSVC-ShuttleA-GPU-AMDHD7770-x86_64-Release",
		"Test-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Debug",
		"Test-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Debug-Vulkan",
		"Test-Win10-MSVC-ShuttleA-GPU-GTX660-x86_64-Release",
		"Test-Win10-MSVC-ShuttleB-GPU-IntelHD4600-x86_64-Debug",
		"Test-Win10-MSVC-ShuttleB-GPU-IntelHD4600-x86_64-Release",
		"Test-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Debug",
		"Test-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Debug-ANGLE",
		"Test-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Release",
		"Test-Win10-MSVC-ShuttleC-GPU-GTX960-x86_64-Release-ANGLE",
		"Test-Win10-MSVC-ShuttleC-GPU-iHD530-x86_64-Debug",
		"Test-Win10-MSVC-ShuttleC-GPU-iHD530-x86_64-Release",
		"Test-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Debug",
		"Test-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Debug-ANGLE",
		"Test-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Debug-Vulkan",
		"Test-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Release",
		"Test-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Release-ANGLE",
		"Test-Win10-MSVC-ZBOX-GPU-GTX1070-x86_64-Release-Vulkan",
		"Test-Win2k8-MSVC-GCE-CPU-AVX2-x86-Debug",
		"Test-Win2k8-MSVC-GCE-CPU-AVX2-x86-Release",
		"Test-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Debug",
		"Test-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Debug-GDI",
		"Test-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Release",
		"Test-Win2k8-MSVC-GCE-CPU-AVX2-x86_64-Release-GDI",
		"Test-iOS-Clang-iPadMini4-GPU-GX6450-Arm7-Debug",
		"Test-iOS-Clang-iPadMini4-GPU-GX6450-Arm7-Release",
	}

	// LINUX_GCE_DIMENSIONS are the Swarming dimensions for Linux GCE
	// instances.
	LINUX_GCE_DIMENSIONS = []string{
		"cpu:x86-64-avx2",
		"gpu:none",
		fmt.Sprintf("os:%s", DEFAULT_OS_LINUX),
		fmt.Sprintf("pool:%s", POOL_SKIA),
	}

	// Defines the structure of job names.
	jobNameSchema *JobNameSchema
)

// deriveCompileTaskName returns the name of a compile task based on the given
// job name.
func deriveCompileTaskName(jobName string, parts map[string]string) string {
	if parts["role"] == "Housekeeper" {
		return "Build-Ubuntu-GCC-x86_64-Release-Shared"
	} else if parts["role"] == "Test" || parts["role"] == "Perf" {
		task_os := parts["os"]
		ec := parts["extra_config"]
		ec = strings.TrimSuffix(ec, "_Skpbench")
		if task_os == "Android" {
			if ec == "Vulkan" {
				ec = "Android_Vulkan"
			}
			task_os = "Ubuntu"
		} else if task_os == "iOS" {
			ec = task_os
			task_os = "Mac"
		} else if strings.Contains(task_os, "Win") {
			task_os = "Win"
		} else if strings.Contains(task_os, "Ubuntu") {
			task_os = "Ubuntu"
		}
		jobNameMap := map[string]string{
			"role":          "Build",
			"os":            task_os,
			"compiler":      parts["compiler"],
			"target_arch":   parts["arch"],
			"configuration": parts["configuration"],
		}
		if ec != "" {
			jobNameMap["extra_config"] = ec
		}
		name, err := jobNameSchema.MakeJobName(jobNameMap)
		if err != nil {
			glog.Fatal(err)
		}
		return name
	} else {
		return jobName
	}
}

// swarmDimensions generates swarming bot dimensions for the given task.
func swarmDimensions(parts map[string]string) []string {
	d := map[string]string{
		"pool": POOL_SKIA,
	}
	if os, ok := parts["os"]; ok {
		d["os"] = map[string]string{
			"Android":  "Android",
			"Mac":      "Mac-10.11",
			"Ubuntu":   DEFAULT_OS_LINUX,
			"Ubuntu16": "Ubuntu-16.04",
			"Win":      "Windows-2008ServerR2-SP1",
			"Win10":    "Windows-10-14393",
			"Win2k8":   "Windows-2008ServerR2-SP1",
			"Win8":     "Windows-8.1-SP0",
			"iOS":      "iOS-9.3.1",
		}[os]
		// Chrome Golo has a different Windows image.
		if parts["model"] == "Golo" && os == "Win10" {
			d["os"] = "Windows-10-10586"
		}
	} else {
		d["os"] = DEFAULT_OS
	}
	if parts["role"] == "Test" || parts["role"] == "Perf" {
		if strings.Contains(parts["os"], "Android") {
			// For Android, the device type is a better dimension
			// than CPU or GPU.
			deviceInfo := map[string][]string{
				"AndroidOne":    {"sprout", "MOB30Q"},
				"GalaxyS7":      {"heroqlteatt", "MMB29M"},
				"GalaxyTab3":    {"goyawifi", "JDQ39"},
				"NVIDIA_Shield": {"foster", "MRA58K"},
				"Nexus10":       {"manta", "LMY49J"},
				"Nexus5":        {"hammerhead", "M4B30Z"},
				"Nexus6":        {"shamu", "M"},
				"Nexus6p":       {"angler", "NMF26C"},
				"Nexus7":        {"grouper", "LMY47V"},
				"Nexus7v2":      {"flo", "M"},
				"NexusPlayer":   {"fugu", "N2G10B"},
				"Pixel":         {"sailfish", "NMF26Q"},
				"PixelC":        {"dragon", "NMF26H"},
				"PixelXL":       {"marlin", "NMF26Q"},
			}[parts["model"]]
			d["device_type"] = deviceInfo[0]
			d["device_os"] = deviceInfo[1]
		} else if strings.Contains(parts["os"], "iOS") {
			d["device"] = map[string]string{
				"iPadMini4": "iPad5,1",
			}[parts["model"]]
		} else if parts["cpu_or_gpu"] == "CPU" {
			d["gpu"] = "none"
			d["cpu"] = map[string]string{
				"AVX":  "x86-64",
				"AVX2": "x86-64-avx2",
				"SSE4": "x86-64",
			}[parts["cpu_or_gpu_value"]]
			if strings.Contains(parts["os"], "Win") && parts["cpu_or_gpu_value"] == "AVX2" {
				// AVX2 is not correctly detected on Windows. Fall back on other
				// dimensions to ensure that we correctly target machines which we know
				// have AVX2 support.
				d["cpu"] = "x86-64"
				d["os"] = "Windows-2008ServerR2-SP1"
			}
		} else {
			d["gpu"] = map[string]string{
				"AMDHD7770":   "1002:683d",
				"GeForce320M": "10de:08a4",
				"GT610":       "10de:104a",
				"GTX1070":     "10de:1ba1",
				"GTX550Ti":    "10de:1244",
				"GTX660":      "10de:11c0",
				"GTX960":      "10de:1401",
				// TODO(benjaminwagner): This device ID doesn't
				// match HD4000.
				"HD4000": "8086:0a2e",
				// This bot will eventually go away, so I'm not
				// going to bother renaming it.
				"iHD530":        "8086:1912",
				"IntelHD4600":   "8086:0412",
				"IntelIris540":  "8086:1926",
				"IntelIris6100": "8086:162b",
			}[parts["cpu_or_gpu_value"]]
		}
	} else {
		d["gpu"] = "none"
	}
	rv := make([]string, 0, len(d))
	for k, v := range d {
		rv = append(rv, fmt.Sprintf("%s:%s", k, v))
	}
	sort.Strings(rv)
	return rv
}

// compile generates a compile task. Returns the name of the last task in the
// generated chain of tasks, which the Job should add as a dependency.
func compile(b *specs.TasksCfgBuilder, name string, parts map[string]string) string {
	// Collect the necessary CIPD packages.
	pkgs := []*specs.CipdPackage{}

	// Android bots require a toolchain.
	if strings.Contains(name, "Android") {
		if strings.Contains(name, "Mac") {
			pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("android_ndk_darwin"))
		} else if strings.Contains(name, "Win") {
			pkg := b.MustGetCipdPackageFromAsset("android_ndk_windows")
			pkg.Path = "n"
			pkgs = append(pkgs, pkg)
		} else {
			pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("android_ndk_linux"))
		}
	} else if strings.Contains(name, "Ubuntu") {
		if strings.Contains(name, "Clang") {
			pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("clang_linux"))
		}
		if strings.Contains(name, "Vulkan") {
			pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("linux_vulkan_sdk"))
		}
	} else if strings.Contains(name, "Win") {
		pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("win_toolchain"))
		if strings.Contains(name, "Vulkan") {
			pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("win_vulkan_sdk"))
		}
	}

	// Add the task.
	b.MustAddTask(name, &specs.TaskSpec{
		CipdPackages: pkgs,
		Dimensions:   swarmDimensions(parts),
		ExtraArgs: []string{
			"--workdir", "../../..", "swarm_compile",
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		Isolate:  "compile_skia.isolate",
		Priority: 0.8,
	})
	// All compile tasks are runnable as their own Job. Assert that the Job
	// is listed in JOBS.
	if !util.In(name, JOBS) {
		glog.Fatalf("Job %q is missing from the JOBS list!", name)
	}
	return name
}

// recreateSKPs generates a RecreateSKPs task. Returns the name of the last
// task in the generated chain of tasks, which the Job should add as a
// dependency.
func recreateSKPs(b *specs.TasksCfgBuilder, name string) string {
	b.MustAddTask(name, &specs.TaskSpec{
		CipdPackages:     []*specs.CipdPackage{},
		Dimensions:       LINUX_GCE_DIMENSIONS,
		ExecutionTimeout: 4 * time.Hour,
		ExtraArgs: []string{
			"--workdir", "../../..", "swarm_RecreateSKPs",
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		IoTimeout: 40 * time.Minute,
		Isolate:   "compile_skia.isolate",
		Priority:  0.8,
	})
	return name
}

// ctSKPs generates a CT SKPs task. Returns the name of the last task in the
// generated chain of tasks, which the Job should add as a dependency.
func ctSKPs(b *specs.TasksCfgBuilder, name string) string {
	b.MustAddTask(name, &specs.TaskSpec{
		CipdPackages:     []*specs.CipdPackage{},
		Dimensions:       []string{"pool:SkiaCT"},
		ExecutionTimeout: 24 * time.Hour,
		ExtraArgs: []string{
			"--workdir", "../../..", "swarm_ct_skps",
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		IoTimeout: time.Hour,
		Isolate:   "ct_skps_skia.isolate",
		Priority:  0.8,
	})
	return name
}

// housekeeper generates a Housekeeper task. Returns the name of the last task
// in the generated chain of tasks, which the Job should add as a dependency.
func housekeeper(b *specs.TasksCfgBuilder, name, compileTaskName string) string {
	b.MustAddTask(name, &specs.TaskSpec{
		CipdPackages: []*specs.CipdPackage{b.MustGetCipdPackageFromAsset("go")},
		Dependencies: []string{compileTaskName},
		Dimensions:   LINUX_GCE_DIMENSIONS,
		ExtraArgs: []string{
			"--workdir", "../../..", "swarm_housekeeper",
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		Isolate:  "housekeeper_skia.isolate",
		Priority: 0.8,
	})
	return name
}

// infra generates an infra_tests task. Returns the name of the last task in the
// generated chain of tasks, which the Job should add as a dependency.
func infra(b *specs.TasksCfgBuilder, name string) string {
	b.MustAddTask(name, &specs.TaskSpec{
		CipdPackages: []*specs.CipdPackage{},
		Dimensions:   LINUX_GCE_DIMENSIONS,
		ExtraArgs: []string{
			"--workdir", "../../..", "swarm_infra",
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		Isolate:  "infra_skia.isolate",
		Priority: 0.8,
	})
	return name
}

// doUpload indicates whether the given Job should upload its results.
func doUpload(name string) bool {
	skipUploadBots := []string{
		"ASAN",
		"Coverage",
		"MSAN",
		"TSAN",
		"UBSAN",
		"Valgrind",
	}
	for _, s := range skipUploadBots {
		if strings.Contains(name, s) {
			return false
		}
	}
	return true
}

// test generates a Test task. Returns the name of the last task in the
// generated chain of tasks, which the Job should add as a dependency.
func test(b *specs.TasksCfgBuilder, name string, parts map[string]string, compileTaskName string, pkgs []*specs.CipdPackage) string {
	s := &specs.TaskSpec{
		CipdPackages:     pkgs,
		Dependencies:     []string{compileTaskName},
		Dimensions:       swarmDimensions(parts),
		ExecutionTimeout: 4 * time.Hour,
		Expiration:       20 * time.Hour,
		ExtraArgs: []string{
			"--workdir", "../../..", "swarm_test",
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		IoTimeout: 40 * time.Minute,
		Isolate:   "test_skia.isolate",
		Priority:  0.8,
	}
	if strings.Contains(parts["extra_config"], "Valgrind") {
		s.ExecutionTimeout = 9 * time.Hour
		s.Expiration = 48 * time.Hour
		s.IoTimeout = time.Hour
	} else if strings.Contains(parts["extra_config"], "MSAN") {
		s.ExecutionTimeout = 9 * time.Hour
	}
	b.MustAddTask(name, s)

	// Upload results if necessary.
	if doUpload(name) {
		uploadName := fmt.Sprintf("%s%s%s", PREFIX_UPLOAD, jobNameSchema.Sep, name)
		b.MustAddTask(uploadName, &specs.TaskSpec{
			Dependencies: []string{name},
			Dimensions:   LINUX_GCE_DIMENSIONS,
			ExtraArgs: []string{
				"--workdir", "../../..", "upload_dm_results",
				fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
				fmt.Sprintf("buildername=%s", name),
				"mastername=fake-master",
				"buildnumber=2",
				"slavename=fake-buildslave",
				"nobuildbot=True",
				fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
				fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
				fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
				fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
				fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
			},
			Isolate:  "upload_dm_results.isolate",
			Priority: 0.8,
		})
		return uploadName
	}
	return name
}

// perf generates a Perf task. Returns the name of the last task in the
// generated chain of tasks, which the Job should add as a dependency.
func perf(b *specs.TasksCfgBuilder, name string, parts map[string]string, compileTaskName string, pkgs []*specs.CipdPackage) string {
	recipe := "swarm_perf"
	isolate := "perf_skia.isolate"
	if strings.Contains(parts["extra_config"], "Skpbench") {
		recipe = "swarm_skpbench"
		isolate = "skpbench_skia.isolate"
	}
	s := &specs.TaskSpec{
		CipdPackages:     pkgs,
		Dependencies:     []string{compileTaskName},
		Dimensions:       swarmDimensions(parts),
		ExecutionTimeout: 4 * time.Hour,
		Expiration:       20 * time.Hour,
		ExtraArgs: []string{
			"--workdir", "../../..", recipe,
			fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
			fmt.Sprintf("buildername=%s", name),
			"mastername=fake-master",
			"buildnumber=2",
			"slavename=fake-buildslave",
			"nobuildbot=True",
			fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
			fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
			fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
			fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
			fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
		},
		IoTimeout: 40 * time.Minute,
		Isolate:   isolate,
		Priority:  0.8,
	}
	if strings.Contains(parts["extra_config"], "Valgrind") {
		s.ExecutionTimeout = 9 * time.Hour
		s.Expiration = 48 * time.Hour
		s.IoTimeout = time.Hour
	} else if strings.Contains(parts["extra_config"], "MSAN") {
		s.ExecutionTimeout = 9 * time.Hour
	}
	b.MustAddTask(name, s)

	// Upload results if necessary.
	if strings.Contains(name, "Release") && doUpload(name) {
		uploadName := fmt.Sprintf("%s%s%s", PREFIX_UPLOAD, jobNameSchema.Sep, name)
		b.MustAddTask(uploadName, &specs.TaskSpec{
			Dependencies: []string{name},
			Dimensions:   LINUX_GCE_DIMENSIONS,
			ExtraArgs: []string{
				"--workdir", "../../..", "upload_nano_results",
				fmt.Sprintf("repository=%s", specs.PLACEHOLDER_REPO),
				fmt.Sprintf("buildername=%s", name),
				"mastername=fake-master",
				"buildnumber=2",
				"slavename=fake-buildslave",
				"nobuildbot=True",
				fmt.Sprintf("swarm_out_dir=%s", specs.PLACEHOLDER_ISOLATED_OUTDIR),
				fmt.Sprintf("revision=%s", specs.PLACEHOLDER_REVISION),
				fmt.Sprintf("patch_storage=%s", specs.PLACEHOLDER_PATCH_STORAGE),
				fmt.Sprintf("patch_issue=%s", specs.PLACEHOLDER_ISSUE),
				fmt.Sprintf("patch_set=%s", specs.PLACEHOLDER_PATCHSET),
			},
			Isolate:  "upload_nano_results.isolate",
			Priority: 0.8,
		})
		return uploadName
	}
	return name
}

// process generates tasks and jobs for the given job name.
func process(b *specs.TasksCfgBuilder, name string) {
	deps := []string{}

	parts, err := jobNameSchema.ParseJobName(name)
	if err != nil {
		glog.Fatal(err)
	}

	// RecreateSKPs.
	if strings.Contains(name, "RecreateSKPs") {
		deps = append(deps, recreateSKPs(b, name))
	}

	// CT bots.
	if strings.Contains(name, "-CT_") {
		deps = append(deps, ctSKPs(b, name))
	}

	// Infra tests.
	if name == "Housekeeper-PerCommit-InfraTests" {
		deps = append(deps, infra(b, name))
	}

	// Compile bots.
	if parts["role"] == "Build" {
		deps = append(deps, compile(b, name, parts))
	}

	// Most remaining bots need a compile task.
	compileTaskName := deriveCompileTaskName(name, parts)
	compileTaskParts, err := jobNameSchema.ParseJobName(compileTaskName)
	if err != nil {
		glog.Fatal(err)
	}
	// These bots do not need a compile task.
	if parts["role"] != "Build" &&
		name != "Housekeeper-PerCommit-InfraTests" &&
		!strings.Contains(name, "RecreateSKPs") &&
		!strings.Contains(name, "-CT_") {
		compile(b, compileTaskName, compileTaskParts)
	}

	// Housekeeper.
	if name == "Housekeeper-PerCommit" {
		deps = append(deps, housekeeper(b, name, compileTaskName))
	}

	// Common assets needed by the remaining bots.
	pkgs := []*specs.CipdPackage{
		b.MustGetCipdPackageFromAsset("skimage"),
		b.MustGetCipdPackageFromAsset("skp"),
		b.MustGetCipdPackageFromAsset("svg"),
	}
	if strings.Contains(name, "Ubuntu") && strings.Contains(name, "SAN") {
		pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("clang_linux"))
	}
	// Skpbench only needs skps
	if strings.Contains(name, "Skpbench") {
		pkgs = []*specs.CipdPackage{
			b.MustGetCipdPackageFromAsset("skp"),
		}
	}

	// Test bots.
	if parts["role"] == "Test" && !strings.Contains(name, "-CT_") {
		deps = append(deps, test(b, name, parts, compileTaskName, pkgs))
	}

	// Perf bots.
	if parts["role"] == "Perf" && !strings.Contains(name, "-CT_") {
		deps = append(deps, perf(b, name, parts, compileTaskName, pkgs))
	}

	// Add the Job spec.
	j := &specs.JobSpec{
		Priority:  0.8,
		TaskSpecs: deps,
	}
	if name == "Housekeeper-Nightly-RecreateSKPs_Canary" {
		j.Trigger = "nightly"
	}
	if name == "Housekeeper-Weekly-RecreateSKPs" {
		j.Trigger = "weekly"
	}
	if name == "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-CT_DM_1m_SKPs" {
		j.Trigger = "weekly"
	}
	b.MustAddJob(name, j)
}

// Regenerate the tasks.json file.
func main() {
	b := specs.MustNewTasksCfgBuilder()
	// Create the JobNameSchema.
	schema, err := NewJobNameSchema(path.Join(b.CheckoutRoot(), "infra", "bots", ".recipe_deps", "skia-recipes", "recipe_modules", "builder_name_schema", "builder_name_schema.json"))
	if err != nil {
		glog.Fatal(err)
	}
	jobNameSchema = schema

	// Create Tasks and Jobs.
	for _, name := range JOBS {
		process(b, name)
	}

	b.MustFinish()
}

// TODO(borenet): The below really belongs in its own file, probably next to the
// builder_name_schema.json file.

// JobNameSchema is a struct used for (de)constructing Job names in a
// predictable format.
type JobNameSchema struct {
	Schema map[string][]string `json:"builder_name_schema"`
	Sep    string              `json:"builder_name_sep"`
}

// NewJobNameSchema returns a JobNameSchema instance based on the given JSON
// file.
func NewJobNameSchema(jsonFile string) (*JobNameSchema, error) {
	var rv JobNameSchema
	f, err := os.Open(jsonFile)
	if err != nil {
		return nil, err
	}
	defer util.Close(f)
	if err := json.NewDecoder(f).Decode(&rv); err != nil {
		return nil, err
	}
	return &rv, nil
}

// ParseJobName splits the given Job name into its component parts, according
// to the schema.
func (s *JobNameSchema) ParseJobName(n string) (map[string]string, error) {
	split := strings.Split(n, s.Sep)
	if len(split) < 2 {
		return nil, fmt.Errorf("Invalid job name: %q", n)
	}
	role := split[0]
	split = split[1:]
	keys, ok := s.Schema[role]
	if !ok {
		return nil, fmt.Errorf("Invalid job name; %q is not a valid role.", role)
	}
	extraConfig := ""
	if len(split) == len(keys)+1 {
		extraConfig = split[len(split)-1]
		split = split[:len(split)-1]
	}
	if len(split) != len(keys) {
		return nil, fmt.Errorf("Invalid job name; %q has incorrect number of parts.", n)
	}
	rv := make(map[string]string, len(keys)+2)
	rv["role"] = role
	if extraConfig != "" {
		rv["extra_config"] = extraConfig
	}
	for i, k := range keys {
		rv[k] = split[i]
	}
	return rv, nil
}

// MakeJobName assembles the given parts of a Job name, according to the schema.
func (s *JobNameSchema) MakeJobName(parts map[string]string) (string, error) {
	role, ok := parts["role"]
	if !ok {
		return "", fmt.Errorf("Invalid job parts; jobs must have a role.")
	}
	keys, ok := s.Schema[role]
	if !ok {
		return "", fmt.Errorf("Invalid job parts; unknown role %q", role)
	}
	rvParts := make([]string, 0, len(parts))
	rvParts = append(rvParts, role)
	for _, k := range keys {
		v, ok := parts[k]
		if !ok {
			return "", fmt.Errorf("Invalid job parts; missing %q", k)
		}
		rvParts = append(rvParts, v)
	}
	if _, ok := parts["extra_config"]; ok {
		rvParts = append(rvParts, parts["extra_config"])
	}
	return strings.Join(rvParts, s.Sep), nil
}
