func IsCompatible()

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
}