dashboard/builders: add github handles

Adds an initial set of github handles for builder owners and displays a link in
coordinator if set.

Updates golang/go#19848

Change-Id: I85aa98a48b8a094482b22021b32b465af5313bbe
Reviewed-on: https://go-review.googlesource.com/40654
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/cmd/coordinator/builders.go b/cmd/coordinator/builders.go
index e3e6702..d5e5334 100644
--- a/cmd/coordinator/builders.go
+++ b/cmd/coordinator/builders.go
@@ -47,7 +47,7 @@
 <tr>
 	<td>{{.Name}}</td>
 	<td><a href='#{{.HostType}}'>{{.HostType}}</a></td>
-	<td>{{.ShortOwner}}</td>
+	<td>{{if .OwnerGithub}}<a href='https://github.com/{{.OwnerGithub}}'>@{{.OwnerGithub}}</a>{{else}}{{.ShortOwner}}{{end}}</td>
 	<td>{{.Notes}}</td>
 </tr>
 {{end}}
diff --git a/dashboard/builders.go b/dashboard/builders.go
index abfd0ec..b9ff2c4 100644
--- a/dashboard/builders.go
+++ b/dashboard/builders.go
@@ -204,6 +204,7 @@
 	},
 	"host-linux-s390x": &HostConfig{
 		Notes:          "run by IBM",
+		OwnerGithub:    "mundaym",
 		IsReverse:      true,
 		env:            []string{"GOROOT_BOOTSTRAP=/var/buildlet/go-linux-s390x-bootstrap"},
 		ReverseAliases: []string{"linux-s390x-ibm"},
@@ -243,9 +244,10 @@
 		ReverseAliases: []string{"solaris-amd64-smartosbuildlet"},
 	},
 	"host-linux-mips": &HostConfig{
-		Notes:     "Run by Brendan Kirby (@MIPSbkirby), imgtec.com",
-		IsReverse: true,
-		ExpectNum: 1,
+		Notes:       "Run by Brendan Kirby, imgtec.com",
+		OwnerGithub: "MIPSbkirby",
+		IsReverse:   true,
+		ExpectNum:   1,
 		env: []string{
 			"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap-mips",
 			"GOARCH=mips",
@@ -255,9 +257,10 @@
 		ReverseAliases: []string{"linux-mips"},
 	},
 	"host-linux-mipsle": &HostConfig{
-		Notes:     "Run by Brendan Kirby (@MIPSbkirby), imgtec.com",
-		IsReverse: true,
-		ExpectNum: 1,
+		Notes:       "Run by Brendan Kirby, imgtec.com",
+		OwnerGithub: "MIPSbkirby",
+		IsReverse:   true,
+		ExpectNum:   1,
 		env: []string{
 			"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap-mipsle",
 			"GOARCH=mipsle",
@@ -266,9 +269,10 @@
 		ReverseAliases: []string{"linux-mipsle"},
 	},
 	"host-linux-mips64": &HostConfig{
-		Notes:     "Run by Brendan Kirby (@MIPSbkirby), imgtec.com",
-		IsReverse: true,
-		ExpectNum: 1,
+		Notes:       "Run by Brendan Kirby, imgtec.com",
+		OwnerGithub: "MIPSbkirby",
+		IsReverse:   true,
+		ExpectNum:   1,
 		env: []string{
 			"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap-mips64",
 			"GOARCH=mips64",
@@ -278,9 +282,10 @@
 		ReverseAliases: []string{"linux-mips64"},
 	},
 	"host-linux-mips64le": &HostConfig{
-		Notes:     "Run by Brendan Kirby (@MIPSbkirby), imgtec.com",
-		IsReverse: true,
-		ExpectNum: 1,
+		Notes:       "Run by Brendan Kirby, imgtec.com",
+		OwnerGithub: "MIPSbkirby",
+		IsReverse:   true,
+		ExpectNum:   1,
 		env: []string{
 			"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap-mips64le",
 			"GOARCH=mips64le",
@@ -289,9 +294,10 @@
 		ReverseAliases: []string{"linux-mips64le"},
 	},
 	"host-darwin-amd64-eliasnaur-android": &HostConfig{
-		Notes:     "Mac Mini hosted by Elias Naur, running the android reverse buildlet",
-		IsReverse: true,
-		ExpectNum: 1,
+		Notes:       "Mac Mini hosted by Elias Naur, running the android reverse buildlet",
+		OwnerGithub: "eliasnaur",
+		IsReverse:   true,
+		ExpectNum:   1,
 		env: []string{
 			"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap",
 			"GOHOSTARCH=amd64",
@@ -299,9 +305,10 @@
 		},
 	},
 	"host-darwin-amd64-eliasnaur-ios": &HostConfig{
-		Notes:     "Mac Mini hosted by Elias Naur, running the ios reverse buildlet",
-		IsReverse: true,
-		ExpectNum: 1,
+		Notes:       "Mac Mini hosted by Elias Naur, running the ios reverse buildlet",
+		OwnerGithub: "eliasnaur",
+		IsReverse:   true,
+		ExpectNum:   1,
 		env: []string{
 			"GOROOT_BOOTSTRAP=/usr/local/go-bootstrap",
 			"GOHOSTARCH=amd64",
@@ -376,8 +383,9 @@
 	// relevant Cloud Storage bucket as specified by the build environment.
 	goBootstrapURLTmpl string // optional URL to a built Go 1.4+ tar.gz
 
-	Owner string // optional email of owner; "bradfitz@golang.org", empty means golang-dev
-	Notes string // notes for humans
+	Owner       string // optional email of owner; "bradfitz@golang.org", empty means golang-dev
+	OwnerGithub string // optional GitHub username of owner
+	Notes       string // notes for humans
 
 	// ReverseAliases lists alternate names for this buildlet
 	// config, for older clients doing a reverse dial into the
@@ -654,6 +662,11 @@
 	return strings.TrimSuffix(owner, "@golang.org")
 }
 
+// OwnerGithub returns the Github handle of the owner.
+func (c BuildConfig) OwnerGithub() string {
+	return c.hostConf().OwnerGithub
+}
+
 // PoolName returns a short summary of the builder's host type for the
 // https://farmer.golang.org/builders page.
 func (c *HostConfig) PoolName() string {