@@ -8,36 +8,38 @@ package main
88
99import (
1010 "context"
11- "encoding/json"
1211 "fmt"
1312 "io"
14- "net/http"
1513 "os"
1614 "path/filepath"
17- "strings"
1815 "testing"
1916
2017 "github.com/stretchr/testify/assert"
2118 "github.com/stretchr/testify/require"
2219 "github.com/testcontainers/testcontainers-go"
23- "golang.org/x/mod/semver"
2420)
2521
2622// TODO(GODRIVER-3515): This module cannot be included in the workspace since it
2723// requires a version of klauspost/compress that is not compatible with the Go
2824// Driver. Must use GOWORK=off to run this test.
2925
30- const minSupportedVersion = "1.19"
26+ // TODO(GODRIVER-3592): Add "1.25" to the list when Go 1.25 is released.
27+ // Estimated release date is August 2025.
28+ var versions = []string {
29+ "1.19" ,
30+ "1.20" ,
31+ "1.21" ,
32+ "1.22" ,
33+ "1.23" ,
34+ "1.24" ,
35+ }
3136
3237func TestCompileCheck (t * testing.T ) {
3338 cwd , err := os .Getwd ()
3439 require .NoError (t , err )
3540
3641 rootDir := filepath .Dir (filepath .Dir (filepath .Dir (cwd )))
3742
38- versions , err := getDockerGolangImages ()
39- require .NoError (t , err )
40-
4143 for _ , version := range versions {
4244 version := version // Capture range variable.
4345
@@ -85,67 +87,3 @@ func TestCompileCheck(t *testing.T) {
8587 })
8688 }
8789}
88-
89- // getDockerGolangImages retrieves the available Golang Docker image tags from
90- // Docker Hub that are considered valid and meet the specified version
91- // condition. It returns a slice of version strings in the MajorMinor format and
92- // an error, if any.
93- func getDockerGolangImages () ([]string , error ) {
94- // URL to fetch the Golang tags from Docker Hub with a page size of 100
95- // records.
96- var url = "https://hub.docker.com/v2/repositories/library/golang/tags?page_size=100"
97-
98- versionSet := map [string ]bool {}
99- versions := []string {}
100-
101- // Iteratively fetch and process tags from Docker Hub as long as there is a
102- // valid next page URL.
103- for url != "" {
104- resp , err := http .Get (url )
105- if err != nil {
106- return nil , fmt .Errorf ("failed to get response from Docker Hub: %w" , err )
107- }
108-
109- var data struct {
110- Results []struct {
111- Name string `json:"name"`
112- } `json:"results"`
113- Next string `json:"next"` // URL of the next page for pagination.
114- }
115-
116- if err := json .NewDecoder (resp .Body ).Decode (& data ); err != nil {
117- resp .Body .Close ()
118-
119- return nil , fmt .Errorf ("failed to decode response Body from Docker Hub: %w" , err )
120- }
121-
122- resp .Body .Close ()
123-
124- for _ , tag := range data .Results {
125- // Skip tags that don't start with a digit (typically version numbers).
126- if len (tag .Name ) == 0 || tag .Name [0 ] < '0' || tag .Name [0 ] > '9' {
127- continue
128- }
129-
130- // Split the tag name and extract the base version part.
131- // This handles tags like `1.18.1-alpine` by extracting `1.18.1`.
132- base := strings .Split (tag .Name , "-" )[0 ]
133-
134- // Reduce the base version to MajorMinor format (e.g., `v1.18`).
135- baseMajMin := semver .MajorMinor ("v" + base )
136- if ! semver .IsValid (baseMajMin ) || versionSet [baseMajMin ] {
137- continue
138- }
139-
140- if semver .Compare (baseMajMin , "v" + minSupportedVersion ) >= 0 {
141- versionSet [baseMajMin ] = true
142- versions = append (versions , baseMajMin [1 :])
143- }
144- }
145-
146- // Move to the next page of results, set by the `Next` field.
147- url = data .Next
148- }
149-
150- return versions , nil
151- }
0 commit comments