dashboard: add windows-arm64 builder

Add the windows-arm64 builder to the dashboard and coordinator with a
known issue until we can verify builds are succeeding regularly.

Also, tweak the logic around validating ec2 configurations. The arm64
buildlet sets VMImage but not ContainerImage, unlike other ec2
buildlets. This should work for both.

For golang/go#42604

Change-Id: I7176b8f6bba837830a0565e7713c9e9a0eb76e90
Reviewed-on: https://go-review.googlesource.com/c/build/+/322656
Trust: Alexander Rakoczy <alex@golang.org>
Run-TryBot: Alexander Rakoczy <alex@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Carlos Amedee <carlos@golang.org>
diff --git a/dashboard/builders.go b/dashboard/builders.go
index 6648644..3ce54d5 100644
--- a/dashboard/builders.go
+++ b/dashboard/builders.go
@@ -473,6 +473,16 @@
 		OwnerGithub: "zx2c4",
 		env:         []string{"GOROOT_BOOTSTRAP=C:\\Program Files (Arm)\\Go"},
 	},
+	"host-windows-arm64-qemu": &HostConfig{
+		Notes:              "Ubuntu hosting Windows 10 in qemu with KVM, EC2 ARM64 instance. See x/build/env/windows-arm64/aws",
+		VMImage:            "ami-0203852dc6efbfb68",
+		SSHUsername:        "gopher", // Windows username is gopher, linux is ubuntu.
+		buildletURLTmpl:    "http://storage.googleapis.com/$BUCKET/buildlet.windows-arm64",
+		env:                []string{"GOARCH=arm64"},
+		goBootstrapURLTmpl: "https://storage.googleapis.com/$BUCKET/gobootstrap-windows-arm64-f22ec5.tar.gz",
+		isEC2:              true,
+		machineType:        "a1.metal",
+	},
 	"host-darwin-10_12": &HostConfig{
 		IsReverse: true,
 		ExpectNum: 3,
@@ -695,10 +705,10 @@
 			panic(fmt.Sprintf("HostType %q != key %q", c.HostType, key))
 		}
 		nSet := 0
-		if c.VMImage != "" && !c.isEC2 {
+		if c.VMImage != "" {
 			nSet++
 		}
-		if c.ContainerImage != "" {
+		if c.ContainerImage != "" && !c.isEC2 {
 			nSet++
 		}
 		if c.IsReverse {
@@ -2306,6 +2316,15 @@
 			"GO_TEST_TIMEOUT_SCALE=3"},
 	})
 	addBuilder(BuildConfig{
+		Name:              "windows-arm64-aws",
+		HostType:          "host-windows-arm64-qemu",
+		numTryTestHelpers: 1,
+		buildsRepo: func(repo, branch, goBranch string) bool {
+			return atLeastGo1(goBranch, 17) && buildRepoByDefault(repo)
+		},
+		KnownIssue: 42604,
+	})
+	addBuilder(BuildConfig{
 		Name:           "darwin-amd64-10_12",
 		HostType:       "host-darwin-10_12",
 		distTestAdjust: macTestPolicy,