playground: build playground Go from source

This changes the playground Dockerfile to build playground from source.
Cloud Builds for playground are triggered when a new Go release is
tagged. Go release tags are published to repositories before binary
releases are published. This change fetches the tagged source in order
to build Go, as a tagged binary release may not be available yet.

A binary Go release is still downloaded to be used as the
GOROOT_BOOTSTRAP.

The build steps use maintq to fetch the latest version of Go. maintq
currently only outputs in textproto format, requiring a step to parse
the git tag. It might be worth adding a flag or special command to
maintq to simplify the output to clarify this step of the release
process. It might also be worthwhile to move this step into the
Makefile, or a checked-in build script.

The trigger steps were tested on Cloud Build without the deployment
step.

Updates golang/go#32606

Change-Id: I811be6aa6b5fb53fce4491e4b4ed235a0f3e62cb
Reviewed-on: https://go-review.googlesource.com/c/playground/+/183403
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
2 files changed
tree: 979c73f210f9ab361dfa960b22a3fe00a399c708
  1. static/
  2. app.yaml
  3. AUTHORS
  4. cache.go
  5. client.go
  6. cloudbuild_trigger.json
  7. codereview.cfg
  8. CONTRIBUTING.md
  9. CONTRIBUTORS
  10. Dockerfile
  11. edit.go
  12. edit.html
  13. enable-fake-time.patch
  14. fake_fs.lst
  15. fmt.go
  16. fmt_test.go
  17. go.mod
  18. go.sum
  19. LICENSE
  20. logger.go
  21. main.go
  22. Makefile
  23. PATENTS
  24. play.go
  25. play_test.go
  26. README.md
  27. sandbox.go
  28. server.go
  29. server_test.go
  30. share.go
  31. store.go
  32. tests.go
  33. txtar.go
  34. txtar_test.go
  35. vet.go
README.md

playground

This subrepository holds the source for the Go playground: https://play.golang.org/

Building

# build the image
docker build -t playground .

Running

docker run --name=play --rm -d -p 8080:8080 playground
# run some Go code
cat /path/to/code.go | go run client.go | curl -s --upload-file - localhost:8080/compile

Deployment

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):

gcloud config set app/cloud_build_timeout 1200  # 20 mins

Alternatively, to avoid Cloud Build and build locally:

make docker
docker tag playground:latest gcr.io/golang-org/playground:latest
docker push gcr.io/golang-org/playground:latest
gcloud --project=golang-org --account=you@google.com app deploy app.yaml --image-url=gcr.io/golang-org/playground:latest

Then:

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.

Triggers can be updated by running the following Make target:

make update-cloudbuild-trigger

Contributing

To submit changes to this repository, see https://golang.org/doc/contribute.html.