diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/cmd/gvncli/main.go b/cmd/gvncli/main.go index 9102011..ffe1adb 100644 --- a/cmd/gvncli/main.go +++ b/cmd/gvncli/main.go @@ -3,6 +3,7 @@ package main import ( "os" + "github.com/lightninglabs/governator" "github.com/urfave/cli" ) @@ -15,6 +16,7 @@ func main() { app := cli.NewApp() app.Name = "gvncli" app.Usage = "command line tool for governator" + app.Version = governator.Version() app.Flags = []cli.Flag{ cli.StringFlag{ Name: "rpcserver", diff --git a/version.go b/version.go new file mode 100644 index 0000000..41b4df0 --- /dev/null +++ b/version.go @@ -0,0 +1,67 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2016 The Decred developers +// Heavily inspired by https://github.com/btcsuite/btcd/blob/master/version.go +// Copyright (C) 2015-2020 The Lightning Network Developers + +package governator + +import ( + "bytes" + "fmt" + "strings" +) + +// Commit stores the current commit hash of this build, this should be set using +// the -ldflags during compilation. +var Commit string + +// semanticAlphabet is a list of all allowed characters that can be used in the +// appPreRelease part. +const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-" + +// These constants define the application version and follow the semantic +// versioning 2.0.0 spec (http://semver.org/). +const ( + appMajor uint = 0 + appMinor uint = 1 + appPatch uint = 0 + + // appPreRelease MUST only contain characters from semanticAlphabet + // per the semantic versioning spec. + appPreRelease = "alpha" +) + +// Version returns the application version as a properly formed string per the +// semantic versioning 2.0.0 spec (http://semver.org/). +func Version() string { + // Start with the major, minor, and patch versions. + version := fmt.Sprintf("%d.%d.%d", appMajor, appMinor, appPatch) + + // Append pre-release version if there is one. The hyphen called for + // by the semantic versioning spec is automatically appended and should + // not be contained in the pre-release string. The pre-release version + // is not appended if it contains invalid characters. + preRelease := normalizeVerString(appPreRelease) + if preRelease != "" { + version = fmt.Sprintf("%s-%s", version, preRelease) + } + + // Append commit hash of current build to version. + version = fmt.Sprintf("%s commit=%s", version, Commit) + + return version +} + +// normalizeVerString returns the passed string stripped of all characters which +// are not valid according to the semantic versioning guidelines for pre-release +// version and build metadata strings. In particular they MUST only contain +// characters in semanticAlphabet. +func normalizeVerString(str string) string { + var result bytes.Buffer + for _, r := range str { + if strings.ContainsRune(semanticAlphabet, r) { + result.WriteRune(r) + } + } + return result.String() +}