playground: trigger playground deploys from master

This change adds configuration to trigger a playground deploy when
master is updated. Configuration for deploying a build with the latest
release of go is shared in deploy/deploy.json. Cloud Build
configurations have been moved to the deploy directory.

In order to help share configurations, the build triggers will create a
separate deployment build asynchronously.

The README is updated to help describe common deployment scenarios.

Tested deploy steps with README instructions.

Updates golang/go#32606

Change-Id: I6eced05d3aa2904135e95e8b40e5a30a5b0b0488
Reviewed-on: https://go-review.googlesource.com/c/playground/+/185341
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/Makefile b/Makefile
index b0c8651..2cf568d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,7 @@
-CLOUDBUILD_TRIGGER_ID := $(shell jq -r .id cloudbuild_trigger.json)
-CLOUDBUILD_TRIGGER_JSON := cloudbuild_trigger.json
+CLOUDBUILD_PLAYGROUND_TRIGGER_JSON := deploy/playground_trigger.json
+CLOUDBUILD_PLAYGROUND_TRIGGER_ID := $(shell jq -r .id ${CLOUDBUILD_PLAYGROUND_TRIGGER_JSON})
+CLOUDBUILD_GO_TRIGGER_JSON := deploy/go_trigger.json
+CLOUDBUILD_GO_TRIGGER_ID := $(shell jq -r .id ${CLOUDBUILD_GO_TRIGGER_JSON})
 GCLOUD_ACCESS_TOKEN := $(shell gcloud auth print-access-token)
 
 .PHONY: docker test update-cloudbuild-trigger
@@ -17,5 +19,8 @@
 update-cloudbuild-trigger:
 	# The gcloud CLI doesn't yet support updating a trigger.
 	curl -H "Authorization: Bearer $(GCLOUD_ACCESS_TOKEN)" -H "Content-Type: application/json" \
-		-d @$(CLOUDBUILD_TRIGGER_JSON) \
-		-X PATCH https://cloudbuild.googleapis.com/v1/projects/golang-org/triggers/$(CLOUDBUILD_TRIGGER_ID)
+		-d @$(CLOUDBUILD_GO_TRIGGER_JSON) \
+		-X PATCH https://cloudbuild.googleapis.com/v1/projects/golang-org/triggers/$(CLOUDBUILD_GO_TRIGGER_ID)
+	curl -H "Authorization: Bearer $(GCLOUD_ACCESS_TOKEN)" -H "Content-Type: application/json" \
+		-d @$(CLOUDBUILD_PLAYGROUND_TRIGGER_JSON) \
+		-X PATCH https://cloudbuild.googleapis.com/v1/projects/golang-org/triggers/$(CLOUDBUILD_PLAYGROUND_TRIGGER_ID)
diff --git a/README.md b/README.md
index fffee73..6b8d71c 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,31 @@
 
 ## Deployment
 
+### Deployment Triggers
+
+Playground releases automatically triggered when new Go repository tags are pushed to GitHub, or when master is pushed
+on the playground repository.
+
+For details, see [deploy/go_trigger.json](deploy/go_trigger.json),
+[deploy/playground_trigger.json](deploy/playground_trigger.json),
+and [deploy/deploy.json](deploy/deploy.json).
+
+After making changes to trigger configuration, update configuration by running the following Make target:
+
+```bash
+make update-cloudbuild-trigger
+```
+
+### Deploy via Cloud Build
+
+The Cloud Build configuration will always build and deploy with the latest supported release of Go.
+
+```bash
+gcloud builds submit --config deploy/deploy.json .
+```
+
+### Deploy via gcloud app deploy
+
 Building the playground Docker container takes more than the default 10 minute time limit of cloud build, so increase
 its timeout first (note, `app/cloud_build_timeout` is a global configuration value):
 
@@ -42,17 +67,6 @@
 gcloud --project=golang-org --account=you@google.com app deploy app.yaml
 ```
 
-### Deployment Triggers
-
-Playground releases are also triggered when new tags are pushed to Github. The Cloud Build trigger configuration is
-defined in [cloudbuild_trigger.json](cloudbuild_trigger.json).
-
-Triggers can be updated by running the following Make target:
-
-```bash
-make update-cloudbuild-trigger
-```
-
 ## Contributing
 
 To submit changes to this repository, see
diff --git a/cloudbuild_trigger.json b/cloudbuild_trigger.json
deleted file mode 100644
index 620d320..0000000
--- a/cloudbuild_trigger.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "id": "5a2c9e25-a71a-4adf-a785-76c3eca2ac8a",
-  "description": "Go repository release trigger for x/playground",
-  "github": {
-    "name": "go",
-    "owner": "golang",
-    "push": {
-      "tag": "^go[0-9](\\.[0-9]+)+$"
-    }
-  },
-  "build": {
-    "steps": [
-      {
-        "name": "gcr.io/cloud-builders/git",
-        "args": [
-          "clone",
-          "--depth",
-          "1",
-          "https://go.googlesource.com/playground"
-        ]
-      },
-      {
-        "name": "golang",
-        "entrypoint": "bash",
-        "args": [
-          "-c",
-          "go get golang.org/x/build/maintner/maintq && cp /go/bin/maintq /workspace/maintq"
-        ]
-      },
-      {
-        "name": "debian:stretch",
-        "entrypoint": "bash",
-        "args": [
-          "-c",
-          "apt-get update && apt-get install -y ca-certificates && ./maintq list-releases | head -n 1 | sed -re 's/^.*tag_name:\"(go[0-9](\\.[0-9]+)+)\".*$/\\1/g' > /workspace/latestgo"
-        ]
-      },
-      {
-        "dir": "playground",
-        "name": "gcr.io/cloud-builders/docker",
-        "entrypoint": "bash",
-        "args": [
-          "-c",
-          "docker build --build-arg GO_VERSION=`cat /workspace/latestgo` -t gcr.io/$PROJECT_ID/playground ."
-        ]
-      },
-      {
-        "name": "gcr.io/cloud-builders/docker",
-        "args": [
-          "push",
-          "gcr.io/$PROJECT_ID/playground"
-        ]
-      },
-      {
-        "dir": "playground",
-        "name": "gcr.io/cloud-builders/gcloud",
-        "args": [
-          "app",
-          "deploy",
-          "app.yaml",
-          "--project=$PROJECT_ID",
-          "--image-url=gcr.io/$PROJECT_ID/playground:latest"
-        ]
-      }
-    ],
-    "timeout": "1800s"
-  }
-}
diff --git a/deploy/deploy.json b/deploy/deploy.json
new file mode 100644
index 0000000..72d9415
--- /dev/null
+++ b/deploy/deploy.json
@@ -0,0 +1,46 @@
+{
+  "steps": [
+    {
+      "name": "golang",
+      "entrypoint": "bash",
+      "args": [
+        "-c",
+        "cd go && go get golang.org/x/build/maintner/maintq && cp /go/bin/maintq /workspace/maintq"
+      ]
+    },
+    {
+      "name": "debian:stretch",
+      "entrypoint": "bash",
+      "args": [
+        "-c",
+        "apt-get update && apt-get install -y ca-certificates && ./maintq list-releases | head -n 1 | sed -re 's/^.*tag_name:\"(go[0-9](\\.[0-9]+)+)\".*$/\\1/g' > /workspace/latestgo"
+      ]
+    },
+    {
+      "name": "gcr.io/cloud-builders/docker",
+      "entrypoint": "bash",
+      "args": [
+        "-c",
+        "docker build --build-arg GO_VERSION=`cat /workspace/latestgo` -t gcr.io/$PROJECT_ID/playground ."
+      ]
+    },
+    {
+      "name": "gcr.io/cloud-builders/docker",
+      "args": [
+        "push",
+        "gcr.io/$PROJECT_ID/playground"
+      ]
+    },
+    {
+      "name": "gcr.io/cloud-builders/gcloud",
+      "args": [
+        "app",
+        "deploy",
+        "app.yaml",
+        "--project=$PROJECT_ID",
+        "--image-url=gcr.io/$PROJECT_ID/playground:latest"
+      ]
+    }
+  ],
+  "timeout": "1800s"
+}
diff --git a/deploy/go_trigger.json b/deploy/go_trigger.json
new file mode 100644
index 0000000..b7e7ff5
--- /dev/null
+++ b/deploy/go_trigger.json
@@ -0,0 +1,36 @@
+{
+  "id": "5a2c9e25-a71a-4adf-a785-76c3eca2ac8a",
+  "description": "Go repository release trigger for x/playground",
+  "github": {
+    "name": "go",
+    "owner": "golang",
+    "push": {
+      "tag": "^go[0-9](\\.[0-9]+)+$"
+    }
+  },
+  "build": {
+    "steps": [
+      {
+        "name": "gcr.io/cloud-builders/git",
+        "args": [
+          "clone",
+          "--depth",
+          "1",
+          "https://go.googlesource.com/playground"
+        ]
+      },
+      {
+        "dir": "playground",
+        "name": "gcr.io/cloud-builders/gcloud",
+        "args": [
+          "builds",
+          "submit",
+          "--async",
+          "--config",
+          "deploy/deploy.json",
+          "."
+        ]
+      }
+    ]
+  }
+}
diff --git a/deploy/playground_trigger.json b/deploy/playground_trigger.json
new file mode 100644
index 0000000..3685fe5
--- /dev/null
+++ b/deploy/playground_trigger.json
@@ -0,0 +1,12 @@
+{
+  "id": "cb46eb75-8665-4365-8e93-b8f7bfbd4807",
+  "description": "Playground repository release trigger for x/playground",
+  "github": {
+    "name": "playground",
+    "owner": "golang",
+    "push": {
+      "branch": "^master$"
+    }
+  },
+  "filename": "deploy/deploy.json"
+}