func getUnregisteredVersions()

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
}