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  }