Add separate builds status as verified message

When a change gets verified (+1 or -1) add as companion message
the details of which builds were successful or not in the overall
verification flow, with the associated deep-link into the output
console.

The verification message is included in the e-mail with a
green/red tick indicating the verification status.

Change-Id: I5ab3b569d2420bfcd3ee401b94d7daf2ae65489f
diff --git a/jenkins/gerrit-verifier-change.groovy b/jenkins/gerrit-verifier-change.groovy
index 386e80f..f8a5e36 100644
--- a/jenkins/gerrit-verifier-change.groovy
+++ b/jenkins/gerrit-verifier-change.groovy
@@ -19,6 +19,8 @@
 import groovy.json.*
 import java.text.*
 
+verbose = true
+
 String.metaClass.encodeURL = {
   java.net.URLEncoder.encode(delegate)
 }
@@ -53,7 +55,7 @@
   '-X', 'POST', '-H', 'Content-Type: application/json',
   '--data-binary', jsonPayload,
     gerritPostUrl ]
-  println "CURL/EXEC> $curl"
+  if(verbose) { println "CURL/EXEC> $curl" }
   def proc = curl.execute()
   def sout = new StringBuffer(), serr = new StringBuffer()
   proc.consumeProcessOutput(sout, serr)
@@ -71,18 +73,28 @@
     throw new IOException(error)
   }
 
-  if(!serr.toString().trim().isEmpty()) {
+  if(!serr.toString().trim().isEmpty() && verbose) {
     println "CURL/OUTPUT> $serr"
   }
 
   return 0
 }
 
-def gerritReview(buildUrl,changeNum, sha1, verified, msgPrefix) {
+def gerritReview(changeNum, sha1, verified) {
   if(verified == 0) {
     return;
   }
 
+  def resTicks = [ 'ABORTED':'\u26aa', 'SUCCESS':'\u2705', 'FAILURE':'\u274c' ]
+
+  def msgList = Globals.buildsList.collect { type,build ->
+    [ 'type': type, 'res': build.getResult().toString(), 'url': build.getBuildUrl() + "console" ]
+  } sort { a,b -> a['res'].compareTo(b['res']) }
+
+  def msgBody = msgList.collect {
+    "${resTicks[it.res]} ${it.type} : ${it.res}\n    (${it.url})"
+  } .join('\n')
+
   def addReviewerExit = gerritPost("a/changes/" + changeNum + "/reviewers", '{ "reviewer" : "' +
                                    Globals.gerritReviewer + "\" , ${Globals.addReviewerTag} }")
   if(addReviewerExit != 0) {
@@ -91,7 +103,7 @@
   }
 
   def jsonPayload = '{"labels":{"Code-Review":0,"Verified":' + verified + '},' +
-                    ' "message": "' + msgPrefix + 'Gerrit-CI Build: ' + buildUrl + '", ' +
+                    ' "message": "' + msgBody + '", ' +
                     ' "notify" : "' + (verified < 0 ? "OWNER": "OWNER_REVIEWERS") + "\" , ${Globals.addVerifiedTag} }"
   def addVerifiedExit = gerritPost("a/changes/" + changeNum + "/revisions/" + sha1 + "/review",
                                    jsonPayload)
@@ -254,7 +266,7 @@
 
   def res = buildsWithResults.inject(1) { acc, buildResult -> getVerified(acc, buildResult[1]) }
 
-  gerritReview(build.startJob.getBuildUrl() + "console", changeNum, sha1, res, "")
+  gerritReview(changeNum, sha1, res)
 
   switch(res) {
     case 0: build.state.result = ABORTED