mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 09:53:54 +01:00
dc32a48246
As is customary when preparing for the next major (or minor) release, we bump the version to .99 to allow us to set the minimum required version to something like v0.18.4-beta in lndclient and it would still accept the master branch (even if that target version hasn't been released/tagged yet).
104 lines
2.9 KiB
Go
104 lines
2.9 KiB
Go
// 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-2022 The Lightning Network Developers
|
|
|
|
package build
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime/debug"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
// Commit stores the current commit of this build, which includes the
|
|
// most recent tag, the number of commits since that tag (if non-zero),
|
|
// the commit hash, and a dirty marker. This should be set using the
|
|
// -ldflags during compilation.
|
|
Commit string
|
|
|
|
// CommitHash stores the current commit hash of this build.
|
|
CommitHash string
|
|
|
|
// RawTags contains the raw set of build tags, separated by commas.
|
|
RawTags string
|
|
|
|
// GoVersion stores the go version that the executable was compiled
|
|
// with.
|
|
GoVersion string
|
|
)
|
|
|
|
// semanticAlphabet is the set of characters that are permitted for use in an
|
|
// AppPreRelease.
|
|
const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-."
|
|
|
|
// These constants define the application version and follow the semantic
|
|
// versioning 2.0.0 spec (http://semver.org/).
|
|
const (
|
|
// AppMajor defines the major version of this binary.
|
|
AppMajor uint = 0
|
|
|
|
// AppMinor defines the minor version of this binary.
|
|
AppMinor uint = 18
|
|
|
|
// AppPatch defines the application patch for this binary.
|
|
AppPatch uint = 99
|
|
|
|
// AppPreRelease MUST only contain characters from semanticAlphabet per
|
|
// the semantic versioning spec.
|
|
AppPreRelease = "beta"
|
|
)
|
|
|
|
func init() {
|
|
// Assert that AppPreRelease is valid according to the semantic
|
|
// versioning guidelines for pre-release version and build metadata
|
|
// strings. In particular it MUST only contain characters in
|
|
// semanticAlphabet.
|
|
for _, r := range AppPreRelease {
|
|
if !strings.ContainsRune(semanticAlphabet, r) {
|
|
panic(fmt.Errorf("rune: %v is not in the semantic "+
|
|
"alphabet", r))
|
|
}
|
|
}
|
|
|
|
// Get build information from the runtime.
|
|
if info, ok := debug.ReadBuildInfo(); ok {
|
|
GoVersion = info.GoVersion
|
|
for _, setting := range info.Settings {
|
|
switch setting.Key {
|
|
case "vcs.revision":
|
|
CommitHash = setting.Value
|
|
|
|
case "-tags":
|
|
RawTags = setting.Value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 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.
|
|
if AppPreRelease != "" {
|
|
version = fmt.Sprintf("%s-%s", version, AppPreRelease)
|
|
}
|
|
|
|
return version
|
|
}
|
|
|
|
// Tags returns the list of build tags that were compiled into the executable.
|
|
func Tags() []string {
|
|
if len(RawTags) == 0 {
|
|
return nil
|
|
}
|
|
|
|
return strings.Split(RawTags, ",")
|
|
}
|