internal/worker: add build info to server home page

Change-Id: I8e6c8fff900de2b83f2b8b59cd38d4716feb3c2a
Reviewed-on: https://go-review.googlesource.com/c/vulndb/+/393841
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: kokoro <noreply+kokoro@google.com>
diff --git a/internal/worker/server.go b/internal/worker/server.go
index eda39c2..b5724e7 100644
--- a/internal/worker/server.go
+++ b/internal/worker/server.go
@@ -13,6 +13,7 @@
 	"net/http"
 	"os"
 	"path/filepath"
+	"runtime/debug"
 	"strconv"
 	"strings"
 	"sync/atomic"
@@ -234,6 +235,7 @@
 }
 
 type indexPage struct {
+	BuildInfo        string
 	CVEListRepoURL   string
 	Namespace        string
 	Updates          []*store.CommitUpdateRecord
@@ -249,6 +251,25 @@
 		Namespace:      s.cfg.Namespace,
 	}
 
+	buildInfo, ok := debug.ReadBuildInfo()
+	if !ok {
+		page.BuildInfo = "(no build information)"
+	} else {
+		commit := "unknown"
+		modified := false
+		for _, bs := range buildInfo.Settings {
+			switch bs.Key {
+			case "vcs.revision":
+				commit = bs.Value
+			case "vcs.modified":
+				modified = (bs.Value == "true")
+			}
+		}
+		page.BuildInfo = fmt.Sprintf("Commit %s", commit)
+		if modified {
+			page.BuildInfo += " (dirty)"
+		}
+	}
 	g, ctx := errgroup.WithContext(r.Context())
 	g.Go(func() error {
 		var err error
diff --git a/internal/worker/static/index.tmpl b/internal/worker/static/index.tmpl
index 6f2ca86..a06665f 100644
--- a/internal/worker/static/index.tmpl
+++ b/internal/worker/static/index.tmpl
@@ -12,6 +12,9 @@
 
 <body>
   <h1>{{.Namespace}} Vuln Worker</h1>
+
+  <p>{{.BuildInfo}}</p>
+
   <p>All times in America/New_York.</p>