dashboard, cmd/coordinator: sharded ARM trybot-only builders

This is a quick & hacky version of our eventual sharding plan.  Later
we want to run make.bash once, snapshot it, and then intelligently
schedule all the tests out over N machines (starting with the built
snapshot), giving each the next test to run as they become idle.
And then we want to stitch together all of their output.

But this CL just makes 6 ARM builders, each of which runs make.bash (4
minutes) and then each which runs a statically-configured subset of
the tests. Based on measurements, each should run between 8.2 and 10.6
minutes. We can break up some of the larger test cases later into more
shardable pieces (in particular: "test").

Update golang/go#10029

Change-Id: Ib3e008b61ce6f28d799ae298c8467bf62d89e5d4
Reviewed-on: https://go-review.googlesource.com/10056
Reviewed-by: Andrew Gerrand <adg@golang.org>
diff --git a/cmd/coordinator/coordinator.go b/cmd/coordinator/coordinator.go
index 52f4f56..bcc6361 100644
--- a/cmd/coordinator/coordinator.go
+++ b/cmd/coordinator/coordinator.go
@@ -92,6 +92,12 @@
 		"plan9-386-gcepartial",
 		"nacl-386",
 		"nacl-amd64p32",
+		"linux-arm-shard_test",
+		"linux-arm-shard_std_am",
+		"linux-arm-shard_std_nz",
+		"linux-arm-shard_runtimecpu",
+		"linux-arm-shard_cgotest",
+		"linux-arm-shard_misc",
 	}
 	for _, bname := range tryList {
 		conf, ok := dashboard.Builders[bname]
@@ -935,12 +941,20 @@
 }
 
 func (st *buildStatus) build() (retErr error) {
-	pool, err := poolForConf(st.conf)
+	buildletType := st.conf.BuildletType
+	if buildletType == "" {
+		buildletType = st.conf.Name
+	}
+	bconf, ok := dashboard.Builders[buildletType]
+	if !ok {
+		return fmt.Errorf("invalid BuildletType %q for %q", buildletType, st.conf.Name)
+	}
+	pool, err := poolForConf(bconf)
 	if err != nil {
 		return err
 	}
 	st.logEventTime("get_buildlet")
-	bc, err := pool.GetBuildlet(st.conf.Name, st.rev, st)
+	bc, err := pool.GetBuildlet(buildletType, st.rev, st)
 	if err != nil {
 		return fmt.Errorf("failed to get a buildlet: %v", err)
 	}
diff --git a/cmd/coordinator/dash.go b/cmd/coordinator/dash.go
index 70e01eb..50a759c 100644
--- a/cmd/coordinator/dash.go
+++ b/cmd/coordinator/dash.go
@@ -120,6 +120,10 @@
 // pingDashboard runs in its own goroutine, created periodically to
 // POST to build.golang.org/building to let it know that we're still working on a build.
 func (st *buildStatus) pingDashboard() {
+	if st.conf.TryOnly {
+		// Builders that are trybot-only don't appear on the dashboard.
+		return
+	}
 	if *mode == "dev" {
 		log.Print("In dev mode, not pinging dashboard")
 		return