playground: add a goprevplay service, hosting the previous go release

Change-Id: Ibdd5f45062960cd09965df63c12cde394dca1f8b
Reviewed-on: https://go-review.googlesource.com/c/playground/+/367814
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
diff --git a/app.goprev.yaml b/app.goprev.yaml
new file mode 100644
index 0000000..2b19ccf
--- /dev/null
+++ b/app.goprev.yaml
@@ -0,0 +1,22 @@
+service: golast-play
+runtime: custom
+env: flex
+
+network:
+  name: projects/golang-org/global/networks/golang
+
+resources:
+  cpu: 2
+  memory_gb: 2
+
+automatic_scaling:
+  min_num_instances: 5
+
+readiness_check:
+  path: "/_ah/health"
+  check_interval_sec: 10
+
+env_variables:
+  MEMCACHED_ADDR: 'memcached-play-golang:11211'
+  GOTIP: "true"
+
diff --git a/cmd/latestgo/main.go b/cmd/latestgo/main.go
index 6e8a690..2fe6e3f 100644
--- a/cmd/latestgo/main.go
+++ b/cmd/latestgo/main.go
@@ -7,6 +7,7 @@
 
 import (
 	"context"
+	"flag"
 	"fmt"
 	"log"
 
@@ -14,9 +15,13 @@
 	grpc "grpc.go4.org"
 )
 
+var prev = flag.Bool("prev", false, "whether to query the previous Go release, rather than the last (e.g. 1.17 versus 1.18)")
+
 const maintnerURI = "https://maintner.golang.org"
 
 func main() {
+	flag.Parse()
+
 	conn, err := grpc.NewClient(nil, maintnerURI)
 	if err != nil {
 		log.Fatalf("error creating grpc client for %q: %v", maintnerURI, err)
@@ -27,6 +32,10 @@
 	if err != nil {
 		log.Fatalln(err)
 	}
+	idx := 0
+	if *prev {
+		idx = 1
+	}
 	// On success, the maintner API always returns at least two releases.
-	fmt.Print(resp.GetReleases()[0].GetTagName())
+	fmt.Print(resp.GetReleases()[idx].GetTagName())
 }
diff --git a/deploy/deploy_goprev.json b/deploy/deploy_goprev.json
new file mode 100644
index 0000000..31ba056
--- /dev/null
+++ b/deploy/deploy_goprev.json
@@ -0,0 +1,41 @@
+{
+  "steps": [
+    {
+      "name": "golang",
+      "env": [
+        "GO111MODULE=on"
+      ],
+      "entrypoint": "bash",
+      "args": [
+        "-c",
+        "go run golang.org/x/playground/cmd/latestgo -prev > /workspace/goversion; echo GO_VERSION=`cat /workspace/goversion`"
+      ]
+    },
+    {
+      "name": "gcr.io/cloud-builders/docker",
+      "entrypoint": "bash",
+      "args": [
+        "-c",
+        "docker build --build-arg GO_VERSION=`cat /workspace/goversion` -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.goprev.yaml",
+        "--project=$PROJECT_ID",
+        "--image-url=gcr.io/$PROJECT_ID/playground-goprev:latest"
+      ]
+    }
+  ],
+  "timeout": "3600s"
+}