cmd/coordinator: link to trybot failure URL log more prominently

Fixes golang/go#10312 (4+ years later)

Change-Id: Iffd2e4e3a2182d9c1adfd69900f941d973f86e43
Reviewed-on: https://go-review.googlesource.com/c/build/+/179657
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/cmd/coordinator/coordinator.go b/cmd/coordinator/coordinator.go
index f94fdff..ea5e411 100644
--- a/cmd/coordinator/coordinator.go
+++ b/cmd/coordinator/coordinator.go
@@ -670,7 +670,11 @@
 			if bs.succeeded {
 				status = "pass"
 			} else {
-				status = "<b>FAIL</b>"
+				if u := bs.failURL; u != "" {
+					status = fmt.Sprintf("<a href='%s'><b>FAIL</b></a>", html.EscapeString(u))
+				} else {
+					status = "<b>FAIL</b>"
+				}
 			}
 		} else {
 			status = fmt.Sprintf("<i>running</i> %s", time.Since(bs.startTime).Round(time.Second))
@@ -3242,9 +3246,9 @@
 		state = "<font color='#700000'>failed</font>"
 	}
 	if full {
-		fmt.Fprintf(&buf, "; <a href='%s'>%s</a>; %s", st.logsURLLocked(), state, html.EscapeString(st.bc.String()))
+		fmt.Fprintf(&buf, "; <a href='%s'>%s</a>; %s", html.EscapeString(st.logsURLLocked()), state, html.EscapeString(st.bc.String()))
 	} else {
-		fmt.Fprintf(&buf, "; <a href='%s'>%s</a>", st.logsURLLocked(), state)
+		fmt.Fprintf(&buf, "; <a href='%s'>%s</a>", html.EscapeString(st.logsURLLocked()), state)
 	}
 
 	t := st.done
@@ -3260,6 +3264,9 @@
 }
 
 func (st *buildStatus) logsURLLocked() string {
+	if st.failURL != "" {
+		return st.failURL
+	}
 	var urlPrefix string
 	if buildEnv == buildenv.Production {
 		urlPrefix = "https://farmer.golang.org"