aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2022-03-18 12:50:55 -0400
committerRuss Cox <rsc@golang.org>2022-03-18 17:38:43 +0000
commit13fd0169c532e13fbcc57b3abf0f03ee49c2fa8b (patch)
tree34ffa25c6d8f839ef136038d4bde3bcd47167a82 /internal
parent7b9aa998daa093e32ba52549924a0927f5879d3f (diff)
downloadgo-x-website-13fd0169c532e13fbcc57b3abf0f03ee49c2fa8b.tar.xz
internal/play: add goprevplay, load versions from back ends
This will let us have "Go 1.17" in the dropdown on go.dev/play. And when the next release happens and goprevplay and play are updated, the versions will update automatically in the UI. Change-Id: Id76f89767c3a91a2c9e27c9fbdad5d6fd9674ab2 Reviewed-on: https://go-review.googlesource.com/c/website/+/393840 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
Diffstat (limited to 'internal')
-rw-r--r--internal/play/play.go41
1 files changed, 26 insertions, 15 deletions
diff --git a/internal/play/play.go b/internal/play/play.go
index 4c346723..b6b459ac 100644
--- a/internal/play/play.go
+++ b/internal/play/play.go
@@ -52,6 +52,7 @@ func init() {
// Default set until we get the full list from play.golang.org.
playVersions.Store([]playVersion{
{Name: "Go release", Backend: ""},
+ {Name: "Go previous release", Backend: "goprev"},
{Name: "Go dev branch", Backend: "gotip"},
})
@@ -69,22 +70,32 @@ func readVersions() (list []playVersion, err error) {
client := &http.Client{
Timeout: 2 * time.Minute,
}
- resp, err := client.Get("https://play.golang.org/versions")
- if err != nil {
- return nil, fmt.Errorf("readVersions: %v", err)
- }
- defer resp.Body.Close()
-
- js, err := io.ReadAll(resp.Body)
- if err != nil {
- return nil, fmt.Errorf("readVersions: %v", err)
- }
- if resp.StatusCode != 200 {
- return nil, fmt.Errorf("readVersions: %s\n%s", resp.Status, js)
- }
- if err := json.Unmarshal(js, &list); err != nil || len(list) < 2 {
- return nil, fmt.Errorf("readVersions: bad response: %#q", js)
+ list = append([]playVersion(nil), playVersions.Load().([]playVersion)...)
+ for i, v := range list {
+ resp, err := client.Get("https://" + v.Backend + "play.golang.org/version")
+ if err != nil {
+ log.Printf("readVersions: %v", err)
+ continue
+ }
+ js, err := io.ReadAll(resp.Body)
+ resp.Body.Close()
+ if err != nil {
+ log.Printf("readVersions: %v", err)
+ continue
+ }
+ if resp.StatusCode != 200 {
+ log.Printf("readVersions: %s\n%s", resp.Status, js)
+ continue
+ }
+ var data struct{ Name string }
+ if err := json.Unmarshal(js, &data); err != nil {
+ log.Printf("readVersions: %v", err)
+ continue
+ }
+ if data.Name != "" {
+ list[i].Name = data.Name
+ }
}
return list, nil
}