func getLatestEksSource()

in internal/aws/source.go [60:110]


func getLatestEksSource(eksVersion string, manifest *Manifest) (EksPatchRelease, error) {
	if eksVersion == "" {
		return EksPatchRelease{}, fmt.Errorf("eks version is empty")
	}

	if !semver.IsValid("v" + eksVersion) {
		return EksPatchRelease{}, fmt.Errorf("invalid semantic version: %v", eksVersion)
	}

	// Check if input is major.minor or major.minor.patch
	// semver.MajorMinor requires "v" to prepended
	majorMinorVersion := semver.MajorMinor("v" + eksVersion)

	// remove v from the majorMinor
	majorMinorVersion = strings.ReplaceAll(majorMinorVersion, "v", "")

	// find if input version has patch version
	patch, hasPatchVersion := strings.CutPrefix(eksVersion, majorMinorVersion+".")

	// Find the patch release
	var matchedPatchReleases []EksPatchRelease
	for _, supportedRelease := range manifest.SupportedEksReleases {
		if supportedRelease.MajorMinorVersion == majorMinorVersion {
			for _, release := range supportedRelease.PatchReleases {
				// Check if patch version was provided in the input
				if hasPatchVersion {
					if release.PatchVersion == patch {
						matchedPatchReleases = append(matchedPatchReleases, release)
					}
				} else {
					if release.PatchVersion == supportedRelease.LatestPatchVersion {
						matchedPatchReleases = append(matchedPatchReleases, release)
					}
				}
			}
		}
	}

	if len(matchedPatchReleases) == 1 {
		return matchedPatchReleases[0], nil
	} else if len(matchedPatchReleases) > 1 {
		return getLatestDateEksPatchRelease(matchedPatchReleases)
	}

	// If patch version was provided in the input and associated release was not found, throw an error
	if hasPatchVersion {
		return EksPatchRelease{}, fmt.Errorf("input semver did not match with available releases. Try again with major.minor version")
	}

	return EksPatchRelease{}, fmt.Errorf("input semver did not match with any available releases")
}