cmd/release: start using the FreeBSD 11.4 builder for Go 1.17

This change uses the latest patch release of the oldest major release
of FreeBSD for packaging Go 1.17 and beyond.

Updates golang/go#40561
Fixes golang/go#45727

Change-Id: I1adc77560affa0db0e001388884431248e3a20ec
Reviewed-on: https://go-review.googlesource.com/c/build/+/315889
Trust: Carlos Amedee <carlos@golang.org>
Run-TryBot: Carlos Amedee <carlos@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/cmd/release/release.go b/cmd/release/release.go
index d142762..7b23134 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -177,17 +177,17 @@
 		Builder: "linux-arm64-aws",
 	},
 	{
-		GoQuery: ">= go1.15rc2", // See #40563.
+		GoQuery: ">= go1.17beta1", // See #45727.
 		OS:      "freebsd",
 		Arch:    "386",
-		Builder: "freebsd-386-11_2",
+		Builder: "freebsd-386-11_4",
 	},
 	{
-		GoQuery: ">= go1.15rc2", // See #40563.
+		GoQuery: ">= go1.17beta1", // See #45727.
 		OS:      "freebsd",
 		Arch:    "amd64",
 		Race:    true,
-		Builder: "freebsd-amd64-11_2",
+		Builder: "freebsd-amd64-11_4",
 	},
 	{
 		OS:      "windows",
@@ -260,6 +260,19 @@
 		Arch:    "arm64",
 		Builder: "linux-arm64-packet",
 	},
+	{
+		GoQuery: "< go1.17beta1", // See #40563.
+		OS:      "freebsd",
+		Arch:    "386",
+		Builder: "freebsd-386-11_2",
+	},
+	{
+		GoQuery: "< go1.17beta1", // See #40563.
+		OS:      "freebsd",
+		Arch:    "amd64",
+		Race:    true,
+		Builder: "freebsd-amd64-11_2",
+	},
 
 	// Test-only builds.
 	{
@@ -1022,17 +1035,14 @@
 	switch query {
 	case "": // A special case to make the zero Build.GoQuery value useful.
 		return true
+	case ">= go1.17beta1":
+		return !strings.HasPrefix(goVer, "go1.16") && !strings.HasPrefix(goVer, "go1.15")
 	case "< go1.17beta1":
 		return strings.HasPrefix(goVer, "go1.16") || strings.HasPrefix(goVer, "go1.15")
 	case ">= go1.16beta1":
 		return !strings.HasPrefix(goVer, "go1.15")
 	case "< go1.16beta1":
 		return strings.HasPrefix(goVer, "go1.15")
-	case ">= go1.15rc2":
-		// By the time this code is added, Go 1.15 RC 1 has already been released and
-		// won't be modified, that's why we only care about matching RC 2 and onwards.
-		// (We could've just done ">= go1.15", but that could be misleading in future.)
-		return goVer != "go1.15rc1" && !strings.HasPrefix(goVer, "go1.15beta")
 	default:
 		panic(fmt.Errorf("match: query %q is not supported", query))
 	}
diff --git a/cmd/release/release_test.go b/cmd/release/release_test.go
index e7d8e90..3c9e43f 100644
--- a/cmd/release/release_test.go
+++ b/cmd/release/release_test.go
@@ -104,6 +104,10 @@
 		// Go 1.16 continues to use the the FreeBSD 11.2 builder.
 		{"go1.16", "freebsd-amd64", "freebsd-amd64-11_2"},
 		{"go1.16", "freebsd-386", "freebsd-386-11_2"},
+
+		// Go 1.17 starts to use the FreeBSD 11.4 builder.
+		{"go1.17", "freebsd-amd64", "freebsd-amd64-11_4"},
+		{"go1.17", "freebsd-386", "freebsd-386-11_4"},
 	}
 	for _, tc := range testCases {
 		t.Run(tc.target+"@"+tc.goVer, func(t *testing.T) {