internal/secret: add a must constructor for the secret client

Multiple packages have a need for a secret client which exits when the
creation of the client failed. This change adds a must constructor
which would eliminate the code being duplicated.

For  golang/go#37171

Change-Id: I7f56ee681e66c42e290fa00861cb00abb56a2f47
Reviewed-on: https://go-review.googlesource.com/c/build/+/255941
Trust: Carlos Amedee <carlos@golang.org>
Trust: Alexander Rakoczy <alex@golang.org>
Run-TryBot: Carlos Amedee <carlos@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
diff --git a/cmd/coordinator/coordinator.go b/cmd/coordinator/coordinator.go
index d3b3b3d..0af9adc 100644
--- a/cmd/coordinator/coordinator.go
+++ b/cmd/coordinator/coordinator.go
@@ -4064,11 +4064,7 @@
 	if !metadata.OnGCE() {
 		return nil
 	}
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
+	return secret.MustNewClient()
 }
 
 func mustCreateEC2BuildletPool(sc *secret.Client) *pool.EC2Buildlet {
diff --git a/cmd/gerritbot/gerritbot.go b/cmd/gerritbot/gerritbot.go
index b391828..45b9a49 100644
--- a/cmd/gerritbot/gerritbot.go
+++ b/cmd/gerritbot/gerritbot.go
@@ -56,13 +56,8 @@
 
 	var secretClient *secret.Client
 	if metadata.OnGCE() {
-		var err error
-		secretClient, err = secret.NewClient()
-		if err != nil {
-			log.Fatalf("unable to create a secret manager client: %v", err)
-		}
+		secretClient = secret.MustNewClient()
 	}
-
 	if err := writeCookiesFile(secretClient); err != nil {
 		log.Fatalf("writeCookiesFile(): %v", err)
 	}
diff --git a/cmd/gitmirror/gitmirror.go b/cmd/gitmirror/gitmirror.go
index 6d6fc77..2dfe4b3 100644
--- a/cmd/gitmirror/gitmirror.go
+++ b/cmd/gitmirror/gitmirror.go
@@ -57,7 +57,7 @@
 
 	log.Printf("gitmirror running.")
 
-	sc := mustCreateSecretClient()
+	sc := secret.MustNewClient()
 	defer sc.Close()
 
 	go pollGerritAndTickle()
@@ -769,11 +769,3 @@
 		fmt.Fprintf(w, "%s\n", kv)
 	}
 }
-
-func mustCreateSecretClient() *secret.Client {
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
-}
diff --git a/cmd/gopherbot/gopherbot.go b/cmd/gopherbot/gopherbot.go
index f552b35..7131da8 100644
--- a/cmd/gopherbot/gopherbot.go
+++ b/cmd/gopherbot/gopherbot.go
@@ -197,7 +197,7 @@
 
 	var sc *secret.Client
 	if metadata.OnGCE() {
-		sc = mustCreateSecretClient()
+		sc = secret.MustNewClient()
 	}
 	ctx := context.Background()
 
@@ -2311,11 +2311,3 @@
 		fmt.Printf("\thttps://golang.org/issue/%v  %s\n", gi.Number, gi.Title)
 	}
 }
-
-func mustCreateSecretClient() *secret.Client {
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
-}
diff --git a/cmd/pubsubhelper/pubsubhelper.go b/cmd/pubsubhelper/pubsubhelper.go
index 91de894..1f6ea98 100644
--- a/cmd/pubsubhelper/pubsubhelper.go
+++ b/cmd/pubsubhelper/pubsubhelper.go
@@ -58,7 +58,7 @@
 
 	// webhooksecret should not be set in production
 	if *webhookSecret == "" {
-		sc := mustCreateSecretClient()
+		sc := secret.MustNewClient()
 		defer sc.Close()
 
 		ctxSc, cancel := context.WithTimeout(ctx, 10*time.Second)
@@ -428,11 +428,3 @@
 	log.Printf("smtpd: new connection from %v", c.Addr())
 	return nil
 }
-
-func mustCreateSecretClient() *secret.Client {
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
-}
diff --git a/cmd/scaleway/scaleway.go b/cmd/scaleway/scaleway.go
index d0ab0fc..f8e085e 100644
--- a/cmd/scaleway/scaleway.go
+++ b/cmd/scaleway/scaleway.go
@@ -55,7 +55,7 @@
 func main() {
 	flag.Parse()
 
-	secretClient := mustCreateSecretClient()
+	secretClient := secret.MustNewClient()
 	defer secretClient.Close()
 
 	if *tags == "" && !*listAll { // Tags aren't needed if -list-all flag is set.
@@ -413,11 +413,3 @@
 	}
 	return st.Machines
 }
-
-func mustCreateSecretClient() *secret.Client {
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
-}
diff --git a/internal/gitauth/gitauth.go b/internal/gitauth/gitauth.go
index fc5e083..314cc24 100644
--- a/internal/gitauth/gitauth.go
+++ b/internal/gitauth/gitauth.go
@@ -32,7 +32,7 @@
 		return nil
 	}
 
-	sc := mustCreateSecretClient()
+	sc := secret.MustNewClient()
 	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
 	defer cancel()
 
@@ -59,11 +59,3 @@
 	log.Fatalf("No HOME set in environment.")
 	panic("unreachable")
 }
-
-func mustCreateSecretClient() *secret.Client {
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
-}
diff --git a/internal/secret/gcp_secret_manager.go b/internal/secret/gcp_secret_manager.go
index ff1e589..1e0717a 100644
--- a/internal/secret/gcp_secret_manager.go
+++ b/internal/secret/gcp_secret_manager.go
@@ -9,6 +9,7 @@
 import (
 	"context"
 	"io"
+	"log"
 	"path"
 
 	"cloud.google.com/go/compute/metadata"
@@ -105,3 +106,13 @@
 func buildNamePath(projectID, name, version string) string {
 	return path.Join("projects", projectID, "secrets", name, "versions", version)
 }
+
+// MustNewClient instantiates an instance of the Secret Manager Client. If there is an error
+// this fuction will exit.
+func MustNewClient() *Client {
+	c, err := NewClient()
+	if err != nil {
+		log.Fatalf("unable to create secret client %v", err)
+	}
+	return c
+}
diff --git a/maintner/maintnerd/maintnerd.go b/maintner/maintnerd/maintnerd.go
index 7f7c3a6..0caaf50 100644
--- a/maintner/maintnerd/maintnerd.go
+++ b/maintner/maintnerd/maintnerd.go
@@ -366,7 +366,7 @@
 
 func getGithubToken(ctx context.Context) (string, error) {
 	if metadata.OnGCE() {
-		sc := mustCreateSecretClient()
+		sc := secret.MustNewClient()
 
 		ctxSc, cancel := context.WithTimeout(ctx, 10*time.Second)
 		defer cancel()
@@ -503,11 +503,3 @@
 		}
 	}
 }
-
-func mustCreateSecretClient() *secret.Client {
-	client, err := secret.NewClient()
-	if err != nil {
-		log.Fatalf("unable to create secret client %v", err)
-	}
-	return client
-}