@@ -8,36 +8,38 @@ package main
8
8
9
9
import (
10
10
"context"
11
- "encoding/json"
12
11
"fmt"
13
12
"io"
14
- "net/http"
15
13
"os"
16
14
"path/filepath"
17
- "strings"
18
15
"testing"
19
16
20
17
"github.com/stretchr/testify/assert"
21
18
"github.com/stretchr/testify/require"
22
19
"github.com/testcontainers/testcontainers-go"
23
- "golang.org/x/mod/semver"
24
20
)
25
21
26
22
// TODO(GODRIVER-3515): This module cannot be included in the workspace since it
27
23
// requires a version of klauspost/compress that is not compatible with the Go
28
24
// Driver. Must use GOWORK=off to run this test.
29
25
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
+ }
31
36
32
37
func TestCompileCheck (t * testing.T ) {
33
38
cwd , err := os .Getwd ()
34
39
require .NoError (t , err )
35
40
36
41
rootDir := filepath .Dir (filepath .Dir (filepath .Dir (cwd )))
37
42
38
- versions , err := getDockerGolangImages ()
39
- require .NoError (t , err )
40
-
41
43
for _ , version := range versions {
42
44
version := version // Capture range variable.
43
45
@@ -85,67 +87,3 @@ func TestCompileCheck(t *testing.T) {
85
87
})
86
88
}
87
89
}
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