code: func EnforceVersionPolicies(newK8sVersionStr string, newK8sVersion *version.Version, flags *applyFlags, versionGetter upgrade.VersionGetter) error {
  	fmt.Printf("[upgrade/version] You have chosen to change the cluster version to %q\n", newK8sVersionStr)
  
  	versionSkewErrs := upgrade.EnforceVersionPolicies(versionGetter, newK8sVersionStr, newK8sVersion, flags.allowExperimentalUpgrades, flags.allowRCUpgrades)
  	if versionSkewErrs != nil {
  
  		if len(versionSkewErrs.Mandatory) > 0 {
  			return errors.Errorf("the --version argument is invalid due to these fatal errors:\n\n%v\nPlease fix the misalignments highlighted above and try upgrading again",
  				kubeadmutil.FormatErrMsg(versionSkewErrs.Mandatory))
  		}
  
  		if len(versionSkewErrs.Skippable) > 0 {
  			// Return the error if the user hasn't specified the --force flag
  			if !flags.force {
  				return errors.Errorf("the --version argument is invalid due to these errors:\n\n%v\nCan be bypassed if you pass the --force flag",
  					kubeadmutil.FormatErrMsg(versionSkewErrs.Skippable))
  			}
  			// Soft errors found, but --force was specified
  			fmt.Printf("[upgrade/version] Found %d potential version compatibility errors but skipping since the --force flag is set: \n\n%v", len(versionSkewErrs.Skippable), kubeadmutil.FormatErrMsg(versionSkewErrs.Skippable))
  		}
  	}
  	return nil
  }
docs: // EnforceVersionPolicies makes sure that the version the user specified is valid to upgrade to
  // There are both fatal and skippable (with --force) errors