in tools/kompat/pkg/kompat/kompat.go [60:90]
func IsCompatible(filePath string, appVersion string, k8sVersion string) error {
contents, err := readFromFile(filePath)
if err != nil {
return err
}
kompats, err := toKompats(contents)
if err != nil {
return err
}
for _, k := range kompats {
k8sToAppVersions := k.expand()
appVersions, ok := k8sToAppVersions[k8sVersion]
if !ok {
return fmt.Errorf("%s version %s is not compatible with K8s version %s", k.Name, appVersion, k8sVersion)
}
// check if there is any exact matches across any k8s version buckets since that signifies an override
allAppVersions := lo.Uniq(lo.Flatten(lo.Values(k8sToAppVersions)))
if exactMatch := lo.Contains(allAppVersions, appVersion); exactMatch {
if ok := lo.Contains(appVersions, appVersion); !ok {
return fmt.Errorf("%s version %s is not compatible with K8s version %s", k.Name, appVersion, k8sVersion)
}
} else {
if ok := lo.ContainsBy(appVersions, func(version string) bool {
return strings.HasPrefix(appVersion, strings.ReplaceAll(version, ".x", ""))
}); !ok {
return fmt.Errorf("%s version %s is not compatible with K8s version %s", k.Name, appVersion, k8sVersion)
}
}
}
return nil
}