all: fix build timeouts for std dependent snippets

This change addresses two issues that were causing the first build of a
snippet to be unusually slow.

One is to build the standard library with faketime, and CGO_ENABLED=0 in
our final container, which is more similar to our actual build
environment. This fixes staleness issues from std.

Another is to pre-vet std with --tags=faketime. The first vet of a
snippet that contained a significant std package such as net/http would
take 5-6 seconds, and frequently longer than our maxBuildTime of 10s.

Finally, execute vet with the correct tags when a user is vetting their

Fixes golang/go#44822

Change-Id: Ie5674bb6aa5f79694bffc6902c46297ac553419a
Trust: Alexander Rakoczy <>
Run-TryBot: Alexander Rakoczy <>
TryBot-Result: Go Bot <>
Reviewed-by: Heschi Kreinick <>
2 files changed
tree: 62d5222df9b8cf684b75b9c755de5e92e4570e7f
  1. cmd/
  2. deploy/
  3. examples/
  4. internal/
  5. sandbox/
  6. static/
  7. .gitignore
  8. app.yaml
  10. cache.go
  11. client.go
  12. codereview.cfg
  15. Dockerfile
  16. edit.go
  17. edit.html
  18. enable-fake-time.patch
  19. fake_fs.lst
  20. fmt.go
  21. fmt_test.go
  22. go.mod
  23. go.sum
  25. logger.go
  26. main.go
  27. Makefile
  28. metrics.go
  30. play.go
  31. play_test.go
  33. sandbox.go
  34. sandbox_test.go
  35. server.go
  36. server_test.go
  37. share.go
  38. store.go
  39. tests.go
  40. txtar.go
  41. txtar_test.go
  42. vet.go


Go Reference

This subrepository holds the source for the Go playground:


# build the image
docker build -t golang/playground .


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


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.yaml, deploy/playground_trigger.yaml, and deploy/deploy.json.

Changes to the trigger configuration can be made to the YAML files, or in the GCP UI, which should be kept in sync using the push-cloudbuild-trigger and pull-cloudbuild-trigger make targets.

Deploy via Cloud Build

The Cloud Build configuration will always build and deploy with the latest supported release of Go.

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

gcloud config set app/cloud_build_timeout 1200  # 20 mins

Alternatively, to avoid Cloud Build and build locally:

make docker
docker tag golang/playground:latest
docker push
gcloud --project=golang-org app deploy app.yaml


gcloud --project=golang-org app deploy app.yaml


To submit changes to this repository, see