github.com/hernad/nomad@v1.6.112/version/version.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package version
     5  
     6  import (
     7  	"bytes"
     8  	"fmt"
     9  	"time"
    10  )
    11  
    12  var (
    13  	// BuildDate is the time of the git commit used to build the program,
    14  	// in RFC3339 format. It is filled in by the compiler via makefile.
    15  	BuildDate string
    16  
    17  	// The git commit that was compiled. This will be filled in by the compiler.
    18  	GitCommit   string
    19  	GitDescribe string
    20  
    21  	// The main version number that is being run at the moment.
    22  	Version = "1.6.112"
    23  
    24  	// A pre-release marker for the version. If this is "" (empty string)
    25  	// then it means that it is a final release. Otherwise, this is a pre-release
    26  	// such as "dev" (in development), "beta", "rc1", etc.
    27  	VersionPrerelease = ""
    28  
    29  	// VersionMetadata is metadata further describing the build type.
    30  	VersionMetadata = ""
    31  )
    32  
    33  // VersionInfo
    34  type VersionInfo struct {
    35  	BuildDate         time.Time
    36  	Revision          string
    37  	Version           string
    38  	VersionPrerelease string
    39  	VersionMetadata   string
    40  }
    41  
    42  func (v *VersionInfo) Copy() *VersionInfo {
    43  	if v == nil {
    44  		return nil
    45  	}
    46  
    47  	nv := *v
    48  	return &nv
    49  }
    50  
    51  func GetVersion() *VersionInfo {
    52  	ver := Version
    53  	rel := VersionPrerelease
    54  	md := VersionMetadata
    55  	if GitDescribe != "" {
    56  		ver = GitDescribe
    57  	}
    58  	if GitDescribe == "" && rel == "" && VersionPrerelease != "" {
    59  		rel = "dev"
    60  	}
    61  
    62  	// on parse error, will be zero value time.Time{}
    63  	built, _ := time.Parse(time.RFC3339, BuildDate)
    64  
    65  	return &VersionInfo{
    66  		BuildDate:         built,
    67  		Revision:          GitCommit,
    68  		Version:           ver,
    69  		VersionPrerelease: rel,
    70  		VersionMetadata:   md,
    71  	}
    72  }
    73  
    74  func (c *VersionInfo) VersionNumber() string {
    75  	version := c.Version
    76  
    77  	if c.VersionPrerelease != "" {
    78  		version = fmt.Sprintf("%s-%s", version, c.VersionPrerelease)
    79  	}
    80  
    81  	if c.VersionMetadata != "" {
    82  		version = fmt.Sprintf("%s+%s", version, c.VersionMetadata)
    83  	}
    84  
    85  	return version
    86  }
    87  
    88  func (c *VersionInfo) FullVersionNumber(rev bool) string {
    89  	var versionString bytes.Buffer
    90  
    91  	fmt.Fprintf(&versionString, "Nomad v%s", c.Version)
    92  	if c.VersionPrerelease != "" {
    93  		fmt.Fprintf(&versionString, "-%s", c.VersionPrerelease)
    94  	}
    95  
    96  	if c.VersionMetadata != "" {
    97  		fmt.Fprintf(&versionString, "+%s", c.VersionMetadata)
    98  	}
    99  
   100  	if !c.BuildDate.IsZero() {
   101  		fmt.Fprintf(&versionString, "\nBuildDate %s", c.BuildDate.Format(time.RFC3339))
   102  	}
   103  
   104  	if rev && c.Revision != "" {
   105  		fmt.Fprintf(&versionString, "\nRevision %s", c.Revision)
   106  	}
   107  
   108  	return versionString.String()
   109  }