gotipplay: identify the gotip playground build in the UI Attempt to clearly label the Go tip playground as a development build, and surface the version string. For some reason I had to install git in the build-playground phase of the Docker build, to avoid errors from the Go command. I'm not sure why this is, but it seems harmless. For golang/go#48517 Change-Id: I35b150686c9f177d76024cc38ff62cb8785525e0 Reviewed-on: https://go-review.googlesource.com/c/playground/+/363980 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/Dockerfile b/Dockerfile index 6a94f60..af37ec4 100644 --- a/Dockerfile +++ b/Dockerfile
@@ -50,7 +50,7 @@ # Build playground web server. FROM debian:buster as build-playground -RUN apt-get update && apt-get install -y ca-certificates --no-install-recommends +RUN apt-get update && apt-get install -y ca-certificates git --no-install-recommends # Build playground from Go built at GO_VERSION. COPY --from=build-go /usr/local/go /usr/local/go ENV GOROOT /usr/local/go
diff --git a/README.md b/README.md index 5001f98..b145b8c 100644 --- a/README.md +++ b/README.md
@@ -20,6 +20,9 @@ cat /path/to/code.go | go run client.go | curl -s --upload-file - localhost:8080/compile ``` +To run the "gotip" version of the playground, set `GOTIP=true` +in your environment (via `-e GOTIP=true` if using `docker run`). + ## Deployment ### Deployment Triggers @@ -39,7 +42,14 @@ The Cloud Build configuration will always build and deploy with the latest supported release of Go. ```bash -gcloud builds submit --config deploy/deploy.json . +gcloud --project=golang-org builds submit --config deploy/deploy.json . +``` + +To deploy the "Go tip" version of the playground, which uses the latest +development build, use `deploy_gotip.json` instead: + +```bash +gcloud --project=golang-org builds submit --config deploy/deploy_gotip.json . ``` ### Deploy via gcloud app deploy
diff --git a/app.gotip.yaml b/app.gotip.yaml index 5894c9e..2e129bc 100644 --- a/app.gotip.yaml +++ b/app.gotip.yaml
@@ -18,4 +18,5 @@ env_variables: MEMCACHED_ADDR: 'memcached-play-golang:11211' + GOTIP: true
diff --git a/edit.go b/edit.go index c8cb974..3d63848 100644 --- a/edit.go +++ b/edit.go
@@ -23,6 +23,7 @@ Share bool Analytics bool GoVersion string + Gotip bool } func (s *server) handleEdit(w http.ResponseWriter, r *http.Request) { @@ -44,7 +45,11 @@ return } - snip := &snippet{Body: []byte(hello)} + content := hello + if s.gotip { + content = helloGotip + } + snip := &snippet{Body: []byte(content)} if strings.HasPrefix(r.URL.Path, "/p/") { if !allowShare(r) { w.WriteHeader(http.StatusUnavailableForLegalReasons) @@ -82,6 +87,7 @@ Share: allowShare(r), Analytics: r.Host == hostname, GoVersion: runtime.Version(), + Gotip: s.gotip, } if err := editTemplate.Execute(w, data); err != nil { s.log.Errorf("editTemplate.Execute(w, %+v): %v", data, err) @@ -99,3 +105,23 @@ fmt.Println("Hello, playground") } ` + +var helloGotip = fmt.Sprintf(`package main + +import ( + "fmt" +) + +// This playground uses a development build of Go: +// %s + +func Print[T any](s ...T) { + for _, v := range s { + fmt.Print(v) + } +} + +func main() { + Print("Hello, ", "playground\n") +} +`, runtime.Version())
diff --git a/edit.html b/edit.html index 14b5e4b..bf5e4df 100644 --- a/edit.html +++ b/edit.html
@@ -1,7 +1,7 @@ <!doctype html> <html> <head> - <title>The Go Playground</title> + <title>The {{if .Gotip}}Gotip{{else}}Go{{end}} Playground</title> <link rel="stylesheet" href="/static/style.css"> {{if .Analytics}} <script async src="https://www.googletagmanager.com/gtag/js?id=UA-11222381-7"></script> @@ -103,7 +103,7 @@ <body itemscope itemtype="http://schema.org/CreativeWork"> <input type="button" value="Run" id="embedRun"> <div id="banner"> - <div id="head" itemprop="name">The Go Playground</div> + <div id="head" itemprop="name">The {{if .Gotip}}<a href="https://golang.org/dl/gotip">Gotip</a>{{else}}Go{{end}} Playground</div> <input type="button" value="Run" id="run"> <input type="button" value="Format" id="fmt"> <div id="importsBox"> @@ -185,7 +185,11 @@ </p> <p> +{{if .Gotip}} +This playground uses a development version of Go.<br> +{{else}} The playground uses the latest stable release of Go.<br> +{{end}} The current version is <a href="/p/Ztyu2FJaajl">{{.GoVersion}}</a>. </p>
diff --git a/main.go b/main.go index ed59695..1d6c9ac 100644 --- a/main.go +++ b/main.go
@@ -44,6 +44,9 @@ log.Printf("App (project ID: %q) is NOT caching results", pid) } s.log = log + if gotip := os.Getenv("GOTIP"); gotip == "true" { + s.gotip = true + } return nil }, enableMetrics) if err != nil {
diff --git a/server.go b/server.go index 8352c51..ff03baa 100644 --- a/server.go +++ b/server.go
@@ -19,6 +19,7 @@ db store log logger cache responseCache + gotip bool // if set, server is using gotip // When the executable was last modified. Used for caching headers of compiled assets. modtime time.Time
diff --git a/static/style.css b/static/style.css index 4e5fc45..e9d2c25 100644 --- a/static/style.css +++ b/static/style.css
@@ -182,4 +182,4 @@ z-index: 1; top: 10px; right: 10px; -} \ No newline at end of file +}