[infra] Use command_wrapper task driver to pull CIPD packages

Change-Id: I98f01aa4bbf024656a54d712bd867c487d6186cb
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/611424
Commit-Queue: Eric Boren <borenet@google.com>
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
diff --git a/cipd.ensure b/cipd.ensure
index f710bc4..1d61f7f 100644
--- a/cipd.ensure
+++ b/cipd.ensure
@@ -49,6 +49,7 @@
 @subdir task_drivers
 skia/tools/bazel_build_all/${platform}           git_revision:2195169c3c8754d261f092b32704003ee21bd9bf
 skia/tools/bazel_test_all/${platform}            git_revision:2195169c3c8754d261f092b32704003ee21bd9bf
+skia/tools/command_wrapper/${platform}           git_revision:b65a23129f1d7028291ccb0cead545d60b84d296
 skia/tools/presubmit/${platform}                 git_revision:2195169c3c8754d261f092b32704003ee21bd9bf
 
 @Subdir
diff --git a/go/cipd/asset_versions_gen.go b/go/cipd/asset_versions_gen.go
index 7fda13d..c1ce4ba 100644
--- a/go/cipd/asset_versions_gen.go
+++ b/go/cipd/asset_versions_gen.go
@@ -203,6 +203,11 @@
 		Name:    "skia/tools/bazel_test_all/${platform}",
 		Version: "git_revision:2195169c3c8754d261f092b32704003ee21bd9bf",
 	},
+	"skia/tools/command_wrapper/${platform}": {
+		Path:    "task_drivers",
+		Name:    "skia/tools/command_wrapper/${platform}",
+		Version: "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296",
+	},
 	"skia/tools/goldctl/${platform}": {
 		Path:    "cipd_bin_packages",
 		Name:    "skia/tools/goldctl/${platform}",
diff --git a/infra/bots/gen_tasks.go b/infra/bots/gen_tasks.go
index 7e78c59..20e12c0 100644
--- a/infra/bots/gen_tasks.go
+++ b/infra/bots/gen_tasks.go
@@ -137,9 +137,11 @@
 		Dimensions: linuxGceDimensions(machineTypeMedium),
 		// This task is idempotent but unlikely to ever be deduped
 		// because it depends on the entire repo...
-		Idempotent: true,
+		Idempotent:     true,
+		ServiceAccount: compileServiceAccount,
 	}
 	usesBazelisk(b, t)
+	usesWrapperTaskDriver(b, name, false, t)
 	b.MustAddTask(name, t)
 	return name
 }
@@ -179,6 +181,7 @@
 	// call to usePreBuiltTaskDrivers.
 	usesPreBuiltTaskDrivers(b, t)
 	usesBazelisk(b, t)
+	usesWrapperTaskDriver(b, name, true, t)
 	b.MustAddTask(name, t)
 	return name
 }
@@ -216,6 +219,7 @@
 		ServiceAccount: recreateSKPsServiceAccount,
 	}
 	usesBazelisk(b, t)
+	usesWrapperTaskDriver(b, name, true, t)
 	b.MustAddTask(name, t)
 	return name
 }
@@ -243,6 +247,30 @@
 	t.Dependencies = newDeps
 }
 
+func usesWrapperTaskDriver(b *specs.TasksCfgBuilder, name string, isTaskDriver bool, t *specs.TaskSpec) {
+	newCmd := []string{
+		"./task_drivers/command_wrapper",
+		"--project_id", "skia-swarming-bots",
+		"--task_id", specs.PLACEHOLDER_TASK_ID,
+		"--task_name", name,
+		"--workdir", ".",
+	}
+	for _, pkg := range t.CipdPackages {
+		flag := fmt.Sprintf("%s:%s@%s", pkg.Path, pkg.Name, pkg.Version)
+		newCmd = append(newCmd, "--cipd", flag)
+	}
+	if isTaskDriver {
+		newCmd = append(newCmd, "--command-is-task-driver")
+	}
+	newCmd = append(newCmd, "--")
+	newCmd = append(newCmd, t.Command...)
+	t.Command = newCmd
+
+	t.CipdPackages = []*specs.CipdPackage{
+		cipd.MustGetPackage("skia/tools/command_wrapper/${platform}"),
+	}
+}
+
 func bazelBuild(b *specs.TasksCfgBuilder, name string, rbe bool) string {
 	pkgs := append([]*specs.CipdPackage{}, specs.CIPD_PKGS_GIT_LINUX_AMD64...)
 
@@ -279,6 +307,7 @@
 	// call to usePreBuiltTaskDrivers.
 	usesPreBuiltTaskDrivers(b, t)
 	usesBazelisk(b, t)
+	usesWrapperTaskDriver(b, name, true, t)
 	b.MustAddTask(name, t)
 	return name
 }
@@ -323,6 +352,7 @@
 	// call to usePreBuiltTaskDrivers.
 	usesPreBuiltTaskDrivers(b, t)
 	usesBazelisk(b, t)
+	usesWrapperTaskDriver(b, name, true, t)
 	b.MustAddTask(name, t)
 	return name
 }
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index 91f141b..7d28fa4 100755
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -39,32 +39,33 @@
       "casSpec": "empty",
       "cipd_packages": [
         {
-          "name": "infra/3pp/tools/git/linux-amd64",
-          "path": "cipd_bin_packages",
-          "version": "version:2@2.38.1.chromium.9"
-        },
-        {
-          "name": "infra/tools/git/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/git-credential-luci/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
-        },
-        {
-          "name": "skia/tools/presubmit/${platform}",
+          "name": "skia/tools/command_wrapper/${platform}",
           "path": "task_drivers",
-          "version": "git_revision:2195169c3c8754d261f092b32704003ee21bd9bf"
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Housekeeper-OnDemand-Presubmit",
+        "--workdir",
+        ".",
+        "--cipd",
+        "cipd_bin_packages:infra/3pp/tools/git/linux-amd64@version:2@2.38.1.chromium.9",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/git/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/git-credential-luci/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "task_drivers:skia/tools/presubmit/${platform}@git_revision:2195169c3c8754d261f092b32704003ee21bd9bf",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--command-is-task-driver",
+        "--",
         "./task_drivers/presubmit",
         "--project_id",
         "skia-swarming-bots",
@@ -110,12 +111,24 @@
       "casSpec": "whole-repo",
       "cipd_packages": [
         {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
+          "name": "skia/tools/command_wrapper/${platform}",
+          "path": "task_drivers",
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Housekeeper-PerCommit-BuildTaskDrivers-Linux-x86_64",
+        "--workdir",
+        ".",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--",
         "/bin/bash",
         "buildbot/infra/bots/build_task_drivers.sh",
         "${ISOLATED_OUTDIR}",
@@ -134,7 +147,8 @@
           "bazelisk"
         ]
       },
-      "idempotent": true
+      "idempotent": true,
+      "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
     },
     "Housekeeper-Weekly-UpdateCIPDPackages": {
       "caches": [
@@ -150,37 +164,35 @@
       "casSpec": "empty",
       "cipd_packages": [
         {
-          "name": "infra/3pp/tools/git/linux-amd64",
-          "path": "cipd_bin_packages",
-          "version": "version:2@2.38.1.chromium.9"
-        },
-        {
-          "name": "infra/tools/git/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/git-credential-luci/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
-        },
-        {
-          "name": "skia/bots/go",
-          "path": "go",
-          "version": "version:16"
-        },
-        {
-          "name": "skia/bots/protoc",
-          "path": "protoc",
-          "version": "version:0"
+          "name": "skia/tools/command_wrapper/${platform}",
+          "path": "task_drivers",
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Housekeeper-Weekly-UpdateCIPDPackages",
+        "--workdir",
+        ".",
+        "--cipd",
+        "cipd_bin_packages:infra/3pp/tools/git/linux-amd64@version:2@2.38.1.chromium.9",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/git/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/git-credential-luci/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "go:skia/bots/go@version:16",
+        "--cipd",
+        "protoc:skia/bots/protoc@version:0",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--command-is-task-driver",
+        "--",
         "./roll_cipd_packages",
         "--project_id",
         "skia-swarming-bots",
@@ -232,32 +244,33 @@
       "casSpec": "empty",
       "cipd_packages": [
         {
-          "name": "infra/3pp/tools/git/linux-amd64",
-          "path": "cipd_bin_packages",
-          "version": "version:2@2.38.1.chromium.9"
-        },
-        {
-          "name": "infra/tools/git/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/git-credential-luci/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
-        },
-        {
-          "name": "skia/tools/bazel_build_all/${platform}",
+          "name": "skia/tools/command_wrapper/${platform}",
           "path": "task_drivers",
-          "version": "git_revision:2195169c3c8754d261f092b32704003ee21bd9bf"
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Infra-PerCommit-Build-Bazel-Local",
+        "--workdir",
+        ".",
+        "--cipd",
+        "cipd_bin_packages:infra/3pp/tools/git/linux-amd64@version:2@2.38.1.chromium.9",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/git/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/git-credential-luci/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "task_drivers:skia/tools/bazel_build_all/${platform}@git_revision:2195169c3c8754d261f092b32704003ee21bd9bf",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--command-is-task-driver",
+        "--",
         "./task_drivers/bazel_build_all",
         "--project_id",
         "skia-swarming-bots",
@@ -302,32 +315,33 @@
       "casSpec": "empty",
       "cipd_packages": [
         {
-          "name": "infra/3pp/tools/git/linux-amd64",
-          "path": "cipd_bin_packages",
-          "version": "version:2@2.38.1.chromium.9"
-        },
-        {
-          "name": "infra/tools/git/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/git-credential-luci/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
-        },
-        {
-          "name": "skia/tools/bazel_build_all/${platform}",
+          "name": "skia/tools/command_wrapper/${platform}",
           "path": "task_drivers",
-          "version": "git_revision:2195169c3c8754d261f092b32704003ee21bd9bf"
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Infra-PerCommit-Build-Bazel-RBE",
+        "--workdir",
+        ".",
+        "--cipd",
+        "cipd_bin_packages:infra/3pp/tools/git/linux-amd64@version:2@2.38.1.chromium.9",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/git/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/git-credential-luci/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "task_drivers:skia/tools/bazel_build_all/${platform}@git_revision:2195169c3c8754d261f092b32704003ee21bd9bf",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--command-is-task-driver",
+        "--",
         "./task_drivers/bazel_build_all",
         "--project_id",
         "skia-swarming-bots",
@@ -373,42 +387,37 @@
       "casSpec": "empty",
       "cipd_packages": [
         {
-          "name": "infra/3pp/tools/git/linux-amd64",
-          "path": "cipd_bin_packages",
-          "version": "version:2@2.38.1.chromium.9"
-        },
-        {
-          "name": "infra/tools/git/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/git-credential-luci/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/isolate/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/isolated/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:dc3a3dc4272aeef30698752d137ccd4f09526d69"
-        },
-        {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
-        },
-        {
-          "name": "skia/tools/bazel_test_all/${platform}",
+          "name": "skia/tools/command_wrapper/${platform}",
           "path": "task_drivers",
-          "version": "git_revision:2195169c3c8754d261f092b32704003ee21bd9bf"
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Infra-PerCommit-Test-Bazel-Local",
+        "--workdir",
+        ".",
+        "--cipd",
+        "cipd_bin_packages:infra/3pp/tools/git/linux-amd64@version:2@2.38.1.chromium.9",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/git/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/git-credential-luci/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/isolate/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/isolated/${platform}@git_revision:dc3a3dc4272aeef30698752d137ccd4f09526d69",
+        "--cipd",
+        "task_drivers:skia/tools/bazel_test_all/${platform}@git_revision:2195169c3c8754d261f092b32704003ee21bd9bf",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--command-is-task-driver",
+        "--",
         "./task_drivers/bazel_test_all",
         "--project_id",
         "skia-swarming-bots",
@@ -455,42 +464,37 @@
       "casSpec": "empty",
       "cipd_packages": [
         {
-          "name": "infra/3pp/tools/git/linux-amd64",
-          "path": "cipd_bin_packages",
-          "version": "version:2@2.38.1.chromium.9"
-        },
-        {
-          "name": "infra/tools/git/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/git-credential-luci/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/isolate/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024"
-        },
-        {
-          "name": "infra/tools/luci/isolated/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:dc3a3dc4272aeef30698752d137ccd4f09526d69"
-        },
-        {
-          "name": "skia/bots/bazelisk",
-          "path": "bazelisk",
-          "version": "version:0"
-        },
-        {
-          "name": "skia/tools/bazel_test_all/${platform}",
+          "name": "skia/tools/command_wrapper/${platform}",
           "path": "task_drivers",
-          "version": "git_revision:2195169c3c8754d261f092b32704003ee21bd9bf"
+          "version": "git_revision:b65a23129f1d7028291ccb0cead545d60b84d296"
         }
       ],
       "command": [
+        "./task_drivers/command_wrapper",
+        "--project_id",
+        "skia-swarming-bots",
+        "--task_id",
+        "<(TASK_ID)",
+        "--task_name",
+        "Infra-PerCommit-Test-Bazel-RBE",
+        "--workdir",
+        ".",
+        "--cipd",
+        "cipd_bin_packages:infra/3pp/tools/git/linux-amd64@version:2@2.38.1.chromium.9",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/git/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/git-credential-luci/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/isolate/${platform}@git_revision:4f585e471d9b3ba86b2ac0ec0cdefaa8fdb67024",
+        "--cipd",
+        "cipd_bin_packages:infra/tools/luci/isolated/${platform}@git_revision:dc3a3dc4272aeef30698752d137ccd4f09526d69",
+        "--cipd",
+        "task_drivers:skia/tools/bazel_test_all/${platform}@git_revision:2195169c3c8754d261f092b32704003ee21bd9bf",
+        "--cipd",
+        "bazelisk:skia/bots/bazelisk@version:0",
+        "--command-is-task-driver",
+        "--",
         "./task_drivers/bazel_test_all",
         "--project_id",
         "skia-swarming-bots",