dashboard: disable js/wasm TryBot (with Node 14) on Go 1.21 tree

The js/wasm port maintainers want to start landing changes for
Go 1.21 that replace Node.js 14 support with Node.js 18 support.
Disable the js-wasm TryBot on tip so that work can begin.

Once done, the js-wasm-node18 builder can become the new TryBot
on tip, and the temporary misc-compile trybot can be removed.

For golang/go#57614.

Change-Id: I18ebbc69c8da2b7296dd06a5a10c8557395d600d
Reviewed-on: https://go-review.googlesource.com/c/build/+/463915
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
diff --git a/dashboard/builders.go b/dashboard/builders.go
index 4bf46d5..6b3ee5c 100644
--- a/dashboard/builders.go
+++ b/dashboard/builders.go
@@ -52,7 +52,7 @@
 	"freebsd-riscv64":       "freebsd-riscv64-unmatched",
 	"illumos":               "illumos-amd64",
 	"ios":                   "ios-arm64-corellium",
-	"js":                    "js-wasm",
+	"js":                    "js-wasm-node18",
 	"linux":                 "linux-amd64",
 	"linux-arm":             "linux-arm-aws",
 	"linux-loong64":         "linux-loong64-3a5000",
@@ -95,7 +95,7 @@
 	"s390x":                 "linux-s390x-ibm",
 	"solaris":               "solaris-amd64-oraclerel",
 	"solaris-amd64":         "solaris-amd64-oraclerel",
-	"wasm":                  "js-wasm",
+	"wasm":                  "js-wasm-node18",
 	"windows":               "windows-amd64-2016",
 	"windows-386":           "windows-386-2008",
 	"windows-amd64":         "windows-amd64-2016",
@@ -1583,6 +1583,7 @@
 	addMiscCompile("-other-1", "dragonfly-amd64", "linux-loong64")
 	addMiscCompile("-other-2", "linux-riscv64", "linux-s390x", "linux-arm-arm5") // 'linux-arm-arm5' is linux/arm with GOARM=5.
 	addMiscCompileGo1(20, "-go1.20", "freebsd-riscv64")
+	addMiscCompileGo1(21, "-go1.21", "js-wasm") // TODO(go.dev/issue/57614): Use a misc-compile trybot for js/wasm until Node 18 builder can work as a trybot.
 
 	// TODO: Issue 25963, get the misc-compile trybots for Android/iOS.
 	// Then consider subrepos too, so "mobile" can at least be included
@@ -1869,7 +1870,8 @@
 		HostType: "host-linux-amd64-js-wasm",
 		tryBot:   explicitTrySet("go"),
 		buildsRepo: func(repo, branch, goBranch string) bool {
-			b := buildRepoByDefault(repo)
+			// Go 1.20 is the last Go release that works with Node 14. See issue 57614.
+			b := buildRepoByDefault(repo) && atMostGo1(goBranch, 20)
 			switch repo {
 			case "benchmarks", "debug", "perf", "talks", "tools", "tour", "website":
 				// Don't test these golang.org/x repos.
@@ -1904,7 +1906,8 @@
 	addBuilder(BuildConfig{
 		Name:        "js-wasm-node18",
 		HostType:    "host-linux-amd64-js-wasm-node18",
-		KnownIssues: []int{57614},
+		KnownIssues: []int{57614}, // After this known issue is resolved, re-enable it as a TryBot below:
+		//tryBot:      explicitTrySet("go"),
 		buildsRepo: func(repo, branch, goBranch string) bool {
 			b := buildRepoByDefault(repo) && atLeastGo1(goBranch, 21)
 			switch repo {
diff --git a/dashboard/builders_test.go b/dashboard/builders_test.go
index a280757..3f48c88 100644
--- a/dashboard/builders_test.go
+++ b/dashboard/builders_test.go
@@ -94,7 +94,6 @@
 			branch: "master",
 			want: []string{
 				"freebsd-amd64-12_3",
-				"js-wasm",
 				"linux-386",
 				"linux-amd64",
 				"linux-amd64-boringcrypto",
@@ -120,6 +119,46 @@
 				"misc-compile-other-1",
 				"misc-compile-other-2",
 				"misc-compile-go1.20",
+				"misc-compile-go1.21",
+			},
+		},
+		{
+			repo:   "go",
+			branch: "release-branch.go1.21",
+			want: []string{
+				"freebsd-amd64-12_3",
+				"linux-386",
+				"linux-amd64",
+				"linux-amd64-boringcrypto",
+				"linux-amd64-race",
+				"linux-arm-aws",
+				"linux-arm64",
+				"openbsd-amd64-72",
+				"windows-386-2012",
+				"windows-amd64-2016",
+
+				"misc-compile-darwin",
+				"misc-compile-freebsd",
+				"misc-compile-windows-arm",
+				"misc-compile-mips",
+				"misc-compile-mipsle",
+				"misc-compile-netbsd",
+				"misc-compile-netbsd-arm",
+				"misc-compile-openbsd",
+				"misc-compile-openbsd-arm",
+				"misc-compile-plan9",
+				"misc-compile-ppc",
+				"misc-compile-solaris",
+				"misc-compile-other-1",
+				"misc-compile-other-2",
+				"misc-compile-go1.20",
+				"misc-compile-go1.21",
+
+				// Include longtest builders on Go repo release branches. See issue 37827.
+				"linux-386-longtest",
+				"linux-amd64-longtest",
+				"linux-arm64-longtest",
+				"windows-amd64-longtest",
 			},
 		},
 		{
@@ -462,20 +501,26 @@
 		{b("android-amd64-emu", "go"), onlyPost},
 		{b("android-386-emu", "go"), onlyPost},
 
-		// Only test tip for js/wasm, and only for some repos:
-		{b("js-wasm", "go"), both},
-		{b("js-wasm", "arch"), onlyPost},
-		{b("js-wasm", "crypto"), onlyPost},
-		{b("js-wasm", "sys"), onlyPost},
-		{b("js-wasm", "net"), onlyPost},
-		{b("js-wasm", "benchmarks"), none},
-		{b("js-wasm", "debug"), none},
-		{b("js-wasm", "mobile"), none},
-		{b("js-wasm", "perf"), none},
-		{b("js-wasm", "talks"), none},
-		{b("js-wasm", "tools"), none},
-		{b("js-wasm", "tour"), none},
-		{b("js-wasm", "website"), none},
+		{b("js-wasm-node18", "go"), onlyPost},
+		{b("js-wasm-node18@go1.21", "go"), onlyPost},
+		{b("js-wasm-node18@go1.20", "go"), none},
+		// Keep using js-wasm builder (with Node 14) only for Go 1.20 and older:
+		{b("js-wasm", "go"), none},
+		{b("js-wasm@go1.21", "go"), none},
+		{b("js-wasm@go1.20", "go"), both},
+		// Test js/wasm on a subset of golang.org/x repos:
+		{b("js-wasm-node18", "arch"), onlyPost},
+		{b("js-wasm-node18", "crypto"), onlyPost},
+		{b("js-wasm-node18", "sys"), onlyPost},
+		{b("js-wasm-node18", "net"), onlyPost},
+		{b("js-wasm-node18", "benchmarks"), none},
+		{b("js-wasm-node18", "debug"), none},
+		{b("js-wasm-node18", "mobile"), none},
+		{b("js-wasm-node18", "perf"), none},
+		{b("js-wasm-node18", "talks"), none},
+		{b("js-wasm-node18", "tools"), none},
+		{b("js-wasm-node18", "tour"), none},
+		{b("js-wasm-node18", "website"), none},
 
 		// Race builders. Linux for all, GCE builders for
 		// post-submit, and only post-submit for "go" for