[infra] Roll back Python to 3.8.10

The roller keeps updating it to 3.9, even though upstream code doesn't
support 3.9.

Change-Id: I0b68d59a67ac4bed60fb34a2ee3c923df0b3d7b3
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/431096
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Eric Boren <borenet@google.com>
diff --git a/cipd.ensure b/cipd.ensure
index fb5c771..9cda085 100644
--- a/cipd.ensure
+++ b/cipd.ensure
@@ -39,12 +39,12 @@
 infra/3pp/tools/cpython/windows-amd64            version:2@2.7.18.chromium.39
 
 @subdir cipd_bin_packages/cpython3
-infra/3pp/tools/cpython3/linux-amd64             version:2@3.9.6.chromium.19
-infra/3pp/tools/cpython3/linux-arm64             version:2@3.9.6.chromium.19
-infra/3pp/tools/cpython3/linux-armv6l            version:2@3.9.6.chromium.19
-infra/3pp/tools/cpython3/mac-amd64               version:2@3.9.6.chromium.19
-infra/3pp/tools/cpython3/windows-386             version:2@3.9.6.chromium.19
-infra/3pp/tools/cpython3/windows-amd64           version:2@3.9.6.chromium.19
+infra/3pp/tools/cpython3/linux-amd64             version:2@3.8.10.chromium.19
+infra/3pp/tools/cpython3/linux-arm64             version:2@3.8.10.chromium.19
+infra/3pp/tools/cpython3/linux-armv6l            version:2@3.8.10.chromium.19
+infra/3pp/tools/cpython3/mac-amd64               version:2@3.8.10.chromium.19
+infra/3pp/tools/cpython3/windows-386             version:2@3.8.10.chromium.19
+infra/3pp/tools/cpython3/windows-amd64           version:2@3.8.10.chromium.19
 
 @Subdir
 infra/tools/luci/kitchen/${platform}    git_revision:cadd7dad6e9466c9988ec9eaed70210f2aa1ca86
diff --git a/go/cipd/asset_versions_gen.go b/go/cipd/asset_versions_gen.go
index dc4661e..972f428 100644
--- a/go/cipd/asset_versions_gen.go
+++ b/go/cipd/asset_versions_gen.go
@@ -36,32 +36,32 @@
 	"infra/3pp/tools/cpython3/linux-amd64": {
 		Path:    "cipd_bin_packages/cpython3",
 		Name:    "infra/3pp/tools/cpython3/linux-amd64",
-		Version: "version:2@3.9.6.chromium.19",
+		Version: "version:2@3.8.10.chromium.19",
 	},
 	"infra/3pp/tools/cpython3/linux-arm64": {
 		Path:    "cipd_bin_packages/cpython3",
 		Name:    "infra/3pp/tools/cpython3/linux-arm64",
-		Version: "version:2@3.9.6.chromium.19",
+		Version: "version:2@3.8.10.chromium.19",
 	},
 	"infra/3pp/tools/cpython3/linux-armv6l": {
 		Path:    "cipd_bin_packages/cpython3",
 		Name:    "infra/3pp/tools/cpython3/linux-armv6l",
-		Version: "version:2@3.9.6.chromium.19",
+		Version: "version:2@3.8.10.chromium.19",
 	},
 	"infra/3pp/tools/cpython3/mac-amd64": {
 		Path:    "cipd_bin_packages/cpython3",
 		Name:    "infra/3pp/tools/cpython3/mac-amd64",
-		Version: "version:2@3.9.6.chromium.19",
+		Version: "version:2@3.8.10.chromium.19",
 	},
 	"infra/3pp/tools/cpython3/windows-386": {
 		Path:    "cipd_bin_packages/cpython3",
 		Name:    "infra/3pp/tools/cpython3/windows-386",
-		Version: "version:2@3.9.6.chromium.19",
+		Version: "version:2@3.8.10.chromium.19",
 	},
 	"infra/3pp/tools/cpython3/windows-amd64": {
 		Path:    "cipd_bin_packages/cpython3",
 		Name:    "infra/3pp/tools/cpython3/windows-amd64",
-		Version: "version:2@3.9.6.chromium.19",
+		Version: "version:2@3.8.10.chromium.19",
 	},
 	"infra/3pp/tools/git/linux-amd64": {
 		Path:    "cipd_bin_packages",
diff --git a/infra/bots/gen_tasks.go b/infra/bots/gen_tasks.go
index 3522915..5540b04 100644
--- a/infra/bots/gen_tasks.go
+++ b/infra/bots/gen_tasks.go
@@ -577,6 +577,7 @@
 			"--patch_set", specs.PLACEHOLDER_PATCHSET,
 			"--patch_server", specs.PLACEHOLDER_CODEREVIEW_SERVER,
 			"--alsologtostderr",
+			"--skip", "cpython3",
 		},
 		Dependencies: []string{buildTaskDrivers(b, "Linux", "x86_64")},
 		Dimensions:   linuxGceDimensions(machineType),
diff --git a/infra/bots/task_drivers/roll_cipd_packages/BUILD.bazel b/infra/bots/task_drivers/roll_cipd_packages/BUILD.bazel
index b981dcb..63ee45a 100644
--- a/infra/bots/task_drivers/roll_cipd_packages/BUILD.bazel
+++ b/infra/bots/task_drivers/roll_cipd_packages/BUILD.bazel
@@ -8,6 +8,7 @@
     deps = [
         "//go/auth",
         "//go/cipd",
+        "//go/common",
         "//go/git",
         "//go/gitiles",
         "//go/sklog",
diff --git a/infra/bots/task_drivers/roll_cipd_packages/roll_cipd_packages.go b/infra/bots/task_drivers/roll_cipd_packages/roll_cipd_packages.go
index 28aee5b..968a218 100644
--- a/infra/bots/task_drivers/roll_cipd_packages/roll_cipd_packages.go
+++ b/infra/bots/task_drivers/roll_cipd_packages/roll_cipd_packages.go
@@ -7,12 +7,14 @@
 	"os"
 	"path"
 	"path/filepath"
+	"regexp"
 	"sort"
 	"strconv"
 	"strings"
 
 	"go.skia.org/infra/go/auth"
 	"go.skia.org/infra/go/cipd"
+	"go.skia.org/infra/go/common"
 	"go.skia.org/infra/go/git"
 	"go.skia.org/infra/go/gitiles"
 	"go.skia.org/infra/go/sklog"
@@ -49,8 +51,9 @@
 	checkoutFlags = checkout.SetupFlags(nil)
 
 	// Optional flags.
-	local  = flag.Bool("local", false, "True if running locally (as opposed to on the bots)")
-	output = flag.String("o", "", "If provided, dump a JSON blob of step data to the given file. Prints to stdout if '-' is given.")
+	skipPackages = common.NewMultiStringFlag("skip", nil, "List of regular expressions matching package names which should not be rolled.")
+	local        = flag.Bool("local", false, "True if running locally (as opposed to on the bots)")
+	output       = flag.String("o", "", "If provided, dump a JSON blob of step data to the given file. Prints to stdout if '-' is given.")
 )
 
 func main() {
@@ -74,6 +77,23 @@
 		td.Fatal(ctx, err)
 	}
 
+	skipRegexes := make([]*regexp.Regexp, 0, len(*skipPackages))
+	if len(*skipPackages) > 0 {
+		if err := td.Do(ctx, td.Props("Compile skipped package regexes"),
+			func(ctx context.Context) error {
+				for _, pattern := range *skipPackages {
+					regex, err := regexp.Compile(pattern)
+					if err != nil {
+						return err
+					}
+					skipRegexes = append(skipRegexes, regex)
+				}
+				return nil
+			}); err != nil {
+			td.Fatal(ctx, err)
+		}
+	}
+
 	// Check out the code.
 	co, err := checkout.EnsureGitCheckout(ctx, path.Join(wd, "repo"), rs)
 	if err != nil {
@@ -85,9 +105,9 @@
 
 	// Read packages from cipd.ensure.
 	ensureFile := filepath.Join(co.Dir(), "cipd.ensure")
-	var pkgs []*cipd.Package
+	var allPkgs []*cipd.Package
 	if err := td.Do(ctx, td.Props("Read cipd.ensure").Infra(), func(ctx context.Context) error {
-		pkgs, err = cipd.ParseEnsureFile(ensureFile)
+		allPkgs, err = cipd.ParseEnsureFile(ensureFile)
 		if err != nil {
 			return err
 		}
@@ -95,6 +115,19 @@
 	}); err != nil {
 		td.Fatal(ctx, err)
 	}
+	pkgs := make([]*cipd.Package, 0, len(allPkgs))
+	for _, pkg := range allPkgs {
+		skip := false
+		for _, regex := range skipRegexes {
+			if regex.MatchString(pkg.Name) {
+				skip = true
+				break
+			}
+		}
+		if !skip {
+			pkgs = append(pkgs, pkg)
+		}
+	}
 	sort.Sort(cipd.PackageSlice(pkgs))
 
 	// Find the latest versions of the desired packages.
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index 86affd5..91451b5 100755
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -211,7 +211,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -432,7 +432,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -623,7 +623,9 @@
         "<(PATCHSET)",
         "--patch_server",
         "<(CODEREVIEW_SERVER)",
-        "--alsologtostderr"
+        "--alsologtostderr",
+        "--skip",
+        "cpython3"
       ],
       "dependencies": [
         "Housekeeper-PerCommit-BuildTaskDrivers-Linux-x86_64"
@@ -667,7 +669,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -767,7 +769,7 @@
         {
           "name": "infra/3pp/tools/cpython3/windows-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/windows-amd64",
@@ -870,7 +872,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -1287,7 +1289,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -1440,7 +1442,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -1557,7 +1559,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -1771,7 +1773,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -1914,7 +1916,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -2031,7 +2033,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",
@@ -2173,7 +2175,7 @@
         {
           "name": "infra/3pp/tools/cpython3/linux-amd64",
           "path": "cipd_bin_packages/cpython3",
-          "version": "version:2@3.9.6.chromium.19"
+          "version": "version:2@3.8.10.chromium.19"
         },
         {
           "name": "infra/3pp/tools/git/linux-amd64",