@@ -52,6 +52,7 @@ func init() {
52
52
// Default set until we get the full list from play.golang.org.
53
53
playVersions .Store ([]playVersion {
54
54
{Name : "Go release" , Backend : "" },
55
+ {Name : "Go previous release" , Backend : "goprev" },
55
56
{Name : "Go dev branch" , Backend : "gotip" },
56
57
})
57
58
@@ -69,22 +70,32 @@ func readVersions() (list []playVersion, err error) {
69
70
client := & http.Client {
70
71
Timeout : 2 * time .Minute ,
71
72
}
72
- resp , err := client .Get ("https://play.golang.org/versions" )
73
- if err != nil {
74
- return nil , fmt .Errorf ("readVersions: %v" , err )
75
- }
76
- defer resp .Body .Close ()
77
-
78
- js , err := io .ReadAll (resp .Body )
79
- if err != nil {
80
- return nil , fmt .Errorf ("readVersions: %v" , err )
81
- }
82
- if resp .StatusCode != 200 {
83
- return nil , fmt .Errorf ("readVersions: %s\n %s" , resp .Status , js )
84
- }
85
73
86
- if err := json .Unmarshal (js , & list ); err != nil || len (list ) < 2 {
87
- return nil , fmt .Errorf ("readVersions: bad response: %#q" , js )
74
+ list = append ([]playVersion (nil ), playVersions .Load ().([]playVersion )... )
75
+ for i , v := range list {
76
+ resp , err := client .Get ("https://" + v .Backend + "play.golang.org/version" )
77
+ if err != nil {
78
+ log .Printf ("readVersions: %v" , err )
79
+ continue
80
+ }
81
+ js , err := io .ReadAll (resp .Body )
82
+ resp .Body .Close ()
83
+ if err != nil {
84
+ log .Printf ("readVersions: %v" , err )
85
+ continue
86
+ }
87
+ if resp .StatusCode != 200 {
88
+ log .Printf ("readVersions: %s\n %s" , resp .Status , js )
89
+ continue
90
+ }
91
+ var data struct { Name string }
92
+ if err := json .Unmarshal (js , & data ); err != nil {
93
+ log .Printf ("readVersions: %v" , err )
94
+ continue
95
+ }
96
+ if data .Name != "" {
97
+ list [i ].Name = data .Name
98
+ }
88
99
}
89
100
return list , nil
90
101
}
0 commit comments