cmd/xb, app/appengine: simplify build.golang.org deployment docs

Change-Id: I0057e5133f395de6924b94d130748db78d8b5ffc
Reviewed-on: https://go-review.googlesource.com/c/build/+/205597
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/.gcloudignore b/.gcloudignore
new file mode 100644
index 0000000..db45b05
--- /dev/null
+++ b/.gcloudignore
@@ -0,0 +1,3 @@
+*.iso
+*.raw
+\.#*
diff --git a/app/appengine/Makefile b/app/appengine/Makefile
new file mode 100644
index 0000000..2f8567b
--- /dev/null
+++ b/app/appengine/Makefile
@@ -0,0 +1,7 @@
+usage:
+	echo "See Makefile for usage"
+	exit 1
+
+deploy:
+	go install golang.org/x/build/cmd/xb
+	GO111MODULE=on gcloud app --account=$$(xb google-email) --project=golang-org deploy app.yaml
diff --git a/app/appengine/README.md b/app/appengine/README.md
index d4330d9..eaae5a9 100644
--- a/app/appengine/README.md
+++ b/app/appengine/README.md
@@ -19,12 +19,5 @@
 ## Deploying
 
 ```sh
-gcloud config set project golang-org
-GO111MODULE=on gcloud app deploy app.yaml
-```
-
-or, to not affect your gcloud state, use:
-
-```
-GO111MODULE=on gcloud app --account=username@google.com --project=golang-org deploy app.yaml
+make deploy
 ```
diff --git a/cmd/xb/xb.go b/cmd/xb/xb.go
index 07e2443..e976ce0 100644
--- a/cmd/xb/xb.go
+++ b/cmd/xb/xb.go
@@ -13,9 +13,9 @@
 // Examples:
 //
 //    xb --staging kubectl ...
+//    xb --prod kubectl ...
+//    xb google-email  # print the @google.com account from gcloud
 //
-// Currently kubectl is the only supported subcommand.
-
 package main // import "golang.org/x/build/cmd/xb"
 
 import (
@@ -25,6 +25,7 @@
 	"log"
 	"os"
 	"os/exec"
+	"regexp"
 	"strings"
 
 	"golang.org/x/build/buildenv"
@@ -36,10 +37,10 @@
 )
 
 func usage() {
-	fmt.Fprintf(os.Stderr, `xb {prod,staging} <CMD> [<ARGS>...]
+	fmt.Fprintf(os.Stderr, `xb [--prod or --staging] <CMD> [<ARGS>...]
 Example:
-   xb staging kubectl ...
-   xb prod gcloud ...
+   xb --staging kubectl ...
+   xb google-email
 `)
 	os.Exit(1)
 }
@@ -68,6 +69,17 @@
 		runCmd()
 	case "docker":
 		runDocker()
+	case "google-email":
+		out, err := exec.Command("gcloud", "config", "configurations", "list").CombinedOutput()
+		if err != nil {
+			log.Fatalf("gcloud: %v, %s", err, out)
+		}
+		googRx := regexp.MustCompile(`\S+@google\.com\b`)
+		e := googRx.FindString(string(out))
+		if e == "" {
+			log.Fatalf("didn't find @google.com address in gcloud config configurations list: %s", out)
+		}
+		fmt.Println(e)
 	default:
 		log.Fatalf("unknown command %q", cmd)
 	}