github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/model/version.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package model 5 6 import ( 7 "fmt" 8 "strconv" 9 "strings" 10 ) 11 12 // This is a list of all the current versions including any patches. 13 // It should be maintained in chronological order with most current 14 // release at the front of the list. 15 var versions = []string{ 16 "5.28.0", 17 "5.27.0", 18 "5.26.0", 19 "5.25.0", 20 "5.24.0", 21 "5.23.0", 22 "5.22.0", 23 "5.21.0", 24 "5.20.0", 25 "5.19.0", 26 "5.18.0", 27 "5.17.0", 28 "5.16.0", 29 "5.15.0", 30 "5.14.0", 31 "5.13.0", 32 "5.12.0", 33 "5.11.0", 34 "5.10.0", 35 "5.9.0", 36 "5.8.0", 37 "5.7.0", 38 "5.6.0", 39 "5.5.0", 40 "5.4.0", 41 "5.3.0", 42 "5.2.0", 43 "5.1.0", 44 "5.0.0", 45 "4.10.0", 46 "4.9.0", 47 "4.8.1", 48 "4.8.0", 49 "4.7.2", 50 "4.7.1", 51 "4.7.0", 52 "4.6.0", 53 "4.5.0", 54 "4.4.0", 55 "4.3.0", 56 "4.2.0", 57 "4.1.0", 58 "4.0.0", 59 "3.10.0", 60 "3.9.0", 61 "3.8.0", 62 "3.7.0", 63 "3.6.0", 64 "3.5.0", 65 "3.4.0", 66 "3.3.0", 67 "3.2.0", 68 "3.1.0", 69 "3.0.0", 70 "2.2.0", 71 "2.1.0", 72 "2.0.0", 73 "1.4.0", 74 "1.3.0", 75 "1.2.1", 76 "1.2.0", 77 "1.1.0", 78 "1.0.0", 79 "0.7.1", 80 "0.7.0", 81 "0.6.0", 82 "0.5.0", 83 } 84 85 var CurrentVersion string = versions[0] 86 var BuildNumber string 87 var BuildDate string 88 var BuildHash string 89 var BuildHashEnterprise string 90 var BuildEnterpriseReady string 91 var versionsWithoutHotFixes []string 92 93 func init() { 94 versionsWithoutHotFixes = make([]string, 0, len(versions)) 95 seen := make(map[string]string) 96 97 for _, version := range versions { 98 maj, min, _ := SplitVersion(version) 99 verStr := fmt.Sprintf("%v.%v.0", maj, min) 100 101 if seen[verStr] == "" { 102 versionsWithoutHotFixes = append(versionsWithoutHotFixes, verStr) 103 seen[verStr] = verStr 104 } 105 } 106 } 107 108 func SplitVersion(version string) (int64, int64, int64) { 109 parts := strings.Split(version, ".") 110 111 major := int64(0) 112 minor := int64(0) 113 patch := int64(0) 114 115 if len(parts) > 0 { 116 major, _ = strconv.ParseInt(parts[0], 10, 64) 117 } 118 119 if len(parts) > 1 { 120 minor, _ = strconv.ParseInt(parts[1], 10, 64) 121 } 122 123 if len(parts) > 2 { 124 patch, _ = strconv.ParseInt(parts[2], 10, 64) 125 } 126 127 return major, minor, patch 128 } 129 130 func GetPreviousVersion(version string) string { 131 verMajor, verMinor, _ := SplitVersion(version) 132 verStr := fmt.Sprintf("%v.%v.0", verMajor, verMinor) 133 134 for index, v := range versionsWithoutHotFixes { 135 if v == verStr && len(versionsWithoutHotFixes) > index+1 { 136 return versionsWithoutHotFixes[index+1] 137 } 138 } 139 140 return "" 141 } 142 143 func IsCurrentVersion(versionToCheck string) bool { 144 currentMajor, currentMinor, _ := SplitVersion(CurrentVersion) 145 toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck) 146 147 if toCheckMajor == currentMajor && toCheckMinor == currentMinor { 148 return true 149 } else { 150 return false 151 } 152 } 153 154 func IsPreviousVersionsSupported(versionToCheck string) bool { 155 toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck) 156 versionToCheckStr := fmt.Sprintf("%v.%v.0", toCheckMajor, toCheckMinor) 157 158 // Current Supported 159 if versionsWithoutHotFixes[0] == versionToCheckStr { 160 return true 161 } 162 163 // Current - 1 Supported 164 if versionsWithoutHotFixes[1] == versionToCheckStr { 165 return true 166 } 167 168 // Current - 2 Supported 169 if versionsWithoutHotFixes[2] == versionToCheckStr { 170 return true 171 } 172 173 // Current - 3 Supported 174 if versionsWithoutHotFixes[3] == versionToCheckStr { 175 return true 176 } 177 178 return false 179 }