in ci-tools/main.go [344:410]
func getUnregisteredVersions(maxNumOfVersions int) (string, error) {
wasmVersionsFilePath := lookupWasmVersionsJSONPath()
registeredVersions := map[string]bool{}
_, err := os.Stat(wasmVersionsFilePath)
if err == nil {
var wasmVersionsFileBytes []byte
wasmVersionsFileBytes, err = os.ReadFile(wasmVersionsFilePath)
if err != nil {
return "", err
}
if len(wasmVersionsFileBytes) > 0 {
var fileContent map[string]any
err = json.Unmarshal(wasmVersionsFileBytes, &fileContent)
if err != nil {
return "", err
}
for _, v := range fileContent["versions"].([]any) {
registeredVersions[v.(map[string]any)["version"].(string)] = true
}
}
}
tagsRes, err := http.Get("https://api.github.com/repos/open-telemetry/opentelemetry-collector-contrib/releases")
if err != nil {
return "", err
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(tagsRes.Body)
if tagsRes.StatusCode != http.StatusOK {
return "", fmt.Errorf("failed to get release list. status: %s", tagsRes.Status)
}
var data []map[string]any
err = json.NewDecoder(tagsRes.Body).Decode(&data)
if err != nil {
return "", err
}
ignoredVersions := map[string]struct{}{}
for _, ignoredVersion := range strings.Split(os.Getenv("IGNORED_WASM_PROCESSORS_VERSIONS"), " ") {
ignoredVersions[ignoredVersion] = struct{}{}
}
var newVersions []string
for _, release := range data {
version := release["name"].(string)
if _, ok := ignoredVersions[version]; ok {
continue
}
// versions <= v0.110.0 fails to compile due to some breaking changes
if !registeredVersions[version] && semver.Compare(version, "v0.110.0") > 0 {
newVersions = append(newVersions, version)
}
}
slices.SortFunc(newVersions, semver.Compare)
if len(newVersions) > maxNumOfVersions {
newVersions = newVersions[len(newVersions)-maxNumOfVersions:]
}
return strings.Join(newVersions, " "), nil
}