github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/api_version_warning.go (about)

     1  package command
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
     5  	"code.cloudfoundry.org/cli/version"
     6  	"github.com/blang/semver"
     7  )
     8  
     9  type APIVersionTooHighError struct{}
    10  
    11  func (a APIVersionTooHighError) Error() string {
    12  	return ""
    13  }
    14  
    15  func WarnIfCLIVersionBelowAPIDefinedMinimum(config Config, apiVersion string, ui UI) error {
    16  	minVer := config.MinCLIVersion()
    17  	currentVer := config.BinaryVersion()
    18  
    19  	isOutdated, err := checkVersionOutdated(currentVer, minVer)
    20  	if err != nil {
    21  		return err
    22  	}
    23  
    24  	if isOutdated {
    25  		ui.DisplayWarning("Cloud Foundry API version {{.APIVersion}} requires CLI version {{.MinCLIVersion}}. You are currently on version {{.BinaryVersion}}. To upgrade your CLI, please visit: https://github.com/cloudfoundry/cli#downloads",
    26  			map[string]interface{}{
    27  				"APIVersion":    apiVersion,
    28  				"MinCLIVersion": minVer,
    29  				"BinaryVersion": currentVer,
    30  			})
    31  		ui.DisplayNewline()
    32  	}
    33  
    34  	return nil
    35  }
    36  
    37  func WarnIfAPIVersionBelowSupportedMinimum(apiVersion string, ui UI) error {
    38  	isOutdated, err := checkVersionOutdated(apiVersion, ccversion.MinSupportedV2ClientVersion)
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	if isOutdated {
    44  		ui.DisplayWarning("Your API version is no longer supported. Upgrade to a newer version of the API. Please refer to https://github.com/cloudfoundry/cli/wiki/Versioning-Policy#cf-cli-minimum-supported-version")
    45  	}
    46  
    47  	return nil
    48  }
    49  
    50  func FailIfAPIVersionAboveMaxServiceProviderVersion(apiVersion string) error {
    51  	isTooNew, err := checkVersionNewerThan(apiVersion, ccversion.MaxVersionServiceProviderV2)
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	if isTooNew {
    57  		return APIVersionTooHighError{}
    58  	}
    59  
    60  	return nil
    61  }
    62  
    63  func checkVersionNewerThan(current, maximum string) (bool, error) {
    64  	currentSemver, err := semver.Make(current)
    65  	if err != nil {
    66  		return false, err
    67  	}
    68  
    69  	maximumSemver, err := semver.Make(maximum)
    70  	if err != nil {
    71  		return false, err
    72  	}
    73  
    74  	if currentSemver.Compare(maximumSemver) == 1 {
    75  		return true, nil
    76  	}
    77  
    78  	return false, nil
    79  }
    80  
    81  func checkVersionOutdated(current string, minimum string) (bool, error) {
    82  	if current == version.DefaultVersion || minimum == "" {
    83  		return false, nil
    84  	}
    85  
    86  	currentSemver, err := semver.Make(current)
    87  	if err != nil {
    88  		return false, err
    89  	}
    90  
    91  	minimumSemver, err := semver.Make(minimum)
    92  	if err != nil {
    93  		return false, err
    94  	}
    95  
    96  	if currentSemver.Compare(minimumSemver) == -1 {
    97  		return true, nil
    98  	}
    99  
   100  	return false, nil
   101  }