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 }