cmd/coordinator: don't snapshot in dev mode

In dev mode, we have no GCS storage client, so attempting to write a
snapshot will panic.

For golang/go#48803

Change-Id: Id37264ebd765f914a55acf2fd18274020850331f
Reviewed-on: https://go-review.googlesource.com/c/build/+/353909
Trust: Michael Pratt <mpratt@google.com>
Run-TryBot: Michael Pratt <mpratt@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/cmd/coordinator/coordinator.go b/cmd/coordinator/coordinator.go
index 88968e3..f75ed24 100644
--- a/cmd/coordinator/coordinator.go
+++ b/cmd/coordinator/coordinator.go
@@ -2557,6 +2557,10 @@
 	if st.conf.SkipSnapshot {
 		return nil
 	}
+	if pool.NewGCEConfiguration().BuildEnv().SnapBucket == "" {
+		// Build environment isn't configured to do snapshots.
+		return nil
+	}
 	if err := st.cleanForSnapshot(bc); err != nil {
 		return fmt.Errorf("cleanForSnapshot: %v", err)
 	}
@@ -2624,7 +2628,15 @@
 	}
 	defer tgz.Close()
 
-	wr := pool.NewGCEConfiguration().StorageClient().Bucket(pool.NewGCEConfiguration().BuildEnv().SnapBucket).Object(st.SnapshotObjectName()).NewWriter(ctx)
+	sc := pool.NewGCEConfiguration().StorageClient()
+	if sc == nil {
+		return errors.New("GCE configuration missing storage client")
+	}
+	bucket := pool.NewGCEConfiguration().BuildEnv().SnapBucket
+	if bucket == "" {
+		return errors.New("build environment missing snapshot bucket")
+	}
+	wr := sc.Bucket(bucket).Object(st.SnapshotObjectName()).NewWriter(ctx)
 	wr.ContentType = "application/octet-stream"
 	wr.ACL = append(wr.ACL, storage.ACLRule{Entity: storage.AllUsers, Role: storage.RoleReader})
 	if _, err := io.Copy(wr, tgz); err != nil {