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")
}