Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add -v/--version flag to print version string #3883

Merged
merged 4 commits into from
Jul 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ endif
.PHONY: build-flags
build-flags: pre-build
$(eval BUILD_LDFLAGS := $(LDFLAGS))
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/api.buildstamp=$(BUILD_DATE)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/api.githash=$(GITHASH)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/api.version=$(STASH_VERSION)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/manager/config.officialBuild=$(OFFICIAL_BUILD)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/build.buildstamp=$(BUILD_DATE)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/build.githash=$(GITHASH)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/build.version=$(STASH_VERSION)')
$(eval BUILD_LDFLAGS += -X 'github.com/stashapp/stash/internal/build.officialBuild=$(OFFICIAL_BUILD)')
$(eval BUILD_FLAGS := -v -tags "$(GO_BUILD_TAGS)" $(GO_BUILD_FLAGS) -ldflags "$(BUILD_LDFLAGS)")

# builds a dynamically-linked debug binary
Expand Down
7 changes: 4 additions & 3 deletions internal/api/check_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"golang.org/x/sys/cpu"

"github.com/stashapp/stash/internal/build"
"github.com/stashapp/stash/pkg/logger"
)

Expand Down Expand Up @@ -170,7 +171,7 @@ func GetLatestRelease(ctx context.Context) (*LatestRelease, error) {
wantedRelease := stashReleases()[platform]

url := apiReleases
if IsDevelop() {
if build.IsDevelop() {
// get the release tagged with the development tag
url += "/tags/" + developmentTag
} else {
Expand Down Expand Up @@ -213,7 +214,7 @@ func GetLatestRelease(ctx context.Context) (*LatestRelease, error) {
}
}

_, githash, _ := GetVersion()
_, githash, _ := build.Version()
shLength := len(githash)
if shLength == 0 {
shLength = defaultSHLength
Expand Down Expand Up @@ -273,7 +274,7 @@ func printLatestVersion(ctx context.Context) {
if err != nil {
logger.Errorf("Couldn't retrieve latest version: %v", err)
} else {
_, githash, _ = GetVersion()
_, githash, _ := build.Version()
switch {
case githash == "":
logger.Infof("Latest version: %s (%s)", latestRelease.Version, latestRelease.ShortHash)
Expand Down
3 changes: 2 additions & 1 deletion internal/api/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"sort"
"strconv"

"github.com/stashapp/stash/internal/build"
"github.com/stashapp/stash/internal/manager"
"github.com/stashapp/stash/pkg/logger"
"github.com/stashapp/stash/pkg/models"
Expand Down Expand Up @@ -188,7 +189,7 @@ func (r *queryResolver) Stats(ctx context.Context) (*StatsResultType, error) {
}

func (r *queryResolver) Version(ctx context.Context) (*Version, error) {
version, hash, buildtime := GetVersion()
version, hash, buildtime := build.Version()

return &Version{
Version: &version,
Expand Down
51 changes: 2 additions & 49 deletions internal/api/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"net/http"
"os"
"path"
"regexp"
"runtime/debug"
"strconv"
"strings"
Expand All @@ -30,6 +29,7 @@ import (
"github.com/go-chi/cors"
"github.com/go-chi/httplog"
"github.com/stashapp/stash/internal/api/loaders"
"github.com/stashapp/stash/internal/build"
"github.com/stashapp/stash/internal/manager"
"github.com/stashapp/stash/internal/manager/config"
"github.com/stashapp/stash/pkg/fsutil"
Expand All @@ -46,10 +46,6 @@ const (
playgroundEndpoint = "/playground"
)

var version string
var buildstamp string
var githash string

var uiBox = ui.UIBox
var loginUIBox = ui.LoginUIBox

Expand Down Expand Up @@ -270,7 +266,7 @@ func Start() error {
TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler)),
}

printVersion()
logger.Infof("stash version: %s\n", build.VersionString())
go printLatestVersion(context.TODO())
logger.Infof("stash is listening on " + address)
if tlsConfig != nil {
Expand Down Expand Up @@ -390,49 +386,6 @@ func customLocalesHandler(c *config.Instance) func(w http.ResponseWriter, r *htt
}
}

func printVersion() {
var versionString string
switch {
case version != "":
if githash != "" && !IsDevelop() {
versionString = version + " (" + githash + ")"
} else {
versionString = version
}
case githash != "":
versionString = githash
default:
versionString = "unknown"
}
if config.IsOfficialBuild() {
versionString += " - Official Build"
} else {
versionString += " - Unofficial Build"
}
if buildstamp != "" {
versionString += " - " + buildstamp
}
logger.Infof("stash version: %s\n", versionString)
}

func GetVersion() (string, string, string) {
return version, githash, buildstamp
}

func IsDevelop() bool {
if githash == "" {
return false
}

// if the version is suffixed with -x-xxxx, then we are running a development build
develop := false
re := regexp.MustCompile(`-\d+-g\w+$`)
if re.MatchString(version) {
develop = true
}
return develop
}

func makeTLSConfig(c *config.Instance) (*tls.Config, error) {
c.InitTLS()
certFile, keyFile := c.GetTLSFiles()
Expand Down
57 changes: 57 additions & 0 deletions internal/build/version.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package build

import (
"regexp"
)

var version string
var buildstamp string
var githash string
var officialBuild string

func Version() (string, string, string) {
return version, githash, buildstamp
}

func VersionString() string {
var versionString string
switch {
case version != "":
if githash != "" && !IsDevelop() {
versionString = version + " (" + githash + ")"
} else {
versionString = version
}
case githash != "":
versionString = githash
default:
versionString = "unknown"
}
if IsOfficial() {
versionString += " - Official Build"
} else {
versionString += " - Unofficial Build"
}
if buildstamp != "" {
versionString += " - " + buildstamp
}
return versionString
}

func IsOfficial() bool {
return officialBuild == "true"
}

func IsDevelop() bool {
if githash == "" {
return false
}

// if the version is suffixed with -x-xxxx, then we are running a development build
develop := false
re := regexp.MustCompile(`-\d+-g\w+$`)
if re.MatchString(version) {
develop = true
}
return develop
}
3 changes: 2 additions & 1 deletion internal/desktop/desktop.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"strings"

"github.com/pkg/browser"
"github.com/stashapp/stash/internal/build"
"github.com/stashapp/stash/internal/manager/config"
"github.com/stashapp/stash/pkg/fsutil"
"github.com/stashapp/stash/pkg/logger"
Expand Down Expand Up @@ -104,7 +105,7 @@ func writeStashIcon(faviconProvider FaviconProvider) {
func IsAllowedAutoUpdate() bool {

// Only try to update if downloaded from official sources
if !config.IsOfficialBuild() {
if !build.IsOfficial() {
return false
}

Expand Down
6 changes: 0 additions & 6 deletions internal/manager/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ import (
"github.com/stashapp/stash/pkg/models/paths"
)

var officialBuild string

const (
Stash = "stash"
Cache = "cache"
Expand Down Expand Up @@ -275,10 +273,6 @@ func (s *StashBoxError) Error() string {
return "Stash-box: " + s.msg
}

func IsOfficialBuild() bool {
return officialBuild == "true"
}

type Instance struct {
// main instance - backed by config file
main *viper.Viper
Expand Down
8 changes: 8 additions & 0 deletions internal/manager/config/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/spf13/pflag"
"github.com/spf13/viper"

"github.com/stashapp/stash/internal/build"
"github.com/stashapp/stash/pkg/fsutil"
"github.com/stashapp/stash/pkg/logger"
)
Expand All @@ -25,6 +26,7 @@ type flagStruct struct {
cpuProfilePath string
nobrowser bool
helpFlag bool
versionFlag bool
}

func GetInstance() *Instance {
Expand All @@ -47,6 +49,11 @@ func Initialize() (*Instance, error) {
os.Exit(0)
}

if flags.versionFlag {
fmt.Printf(build.VersionString() + "\n")
os.Exit(0)
}

overrides := makeOverrideConfig()

_ = GetInstance()
Expand Down Expand Up @@ -134,6 +141,7 @@ func initFlags() flagStruct {
pflag.StringVar(&flags.cpuProfilePath, "cpuprofile", "", "write cpu profile to file")
pflag.BoolVar(&flags.nobrowser, "nobrowser", false, "Don't open a browser window after launch")
pflag.BoolVarP(&flags.helpFlag, "help", "h", false, "show this help text and exit")
pflag.BoolVarP(&flags.versionFlag, "version", "v", false, "show version number and exit")

pflag.Parse()

Expand Down
Loading