diff options
Diffstat (limited to 'cmd/gotosocial/main.go')
-rw-r--r-- | cmd/gotosocial/main.go | 92 |
1 files changed, 56 insertions, 36 deletions
diff --git a/cmd/gotosocial/main.go b/cmd/gotosocial/main.go index 49560503f..1b815f6b7 100644 --- a/cmd/gotosocial/main.go +++ b/cmd/gotosocial/main.go @@ -19,14 +19,12 @@ package main import ( - "fmt" "runtime/debug" + "strings" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "github.com/spf13/viper" - "github.com/superseriousbusiness/gotosocial/cmd/gotosocial/flag" _ "github.com/superseriousbusiness/gotosocial/docs" "github.com/superseriousbusiness/gotosocial/internal/config" ) @@ -37,48 +35,28 @@ var Version string //go:generate swagger generate spec func main() { - buildInfo, ok := debug.ReadBuildInfo() - if !ok { - panic("could not read buildinfo") - } - - goVersion := buildInfo.GoVersion - var commit string - var time string - for _, s := range buildInfo.Settings { - if s.Key == "vcs.revision" { - commit = s.Value[:7] - } - if s.Key == "vcs.time" { - time = s.Value - } - } - - var versionString string - if Version != "" { - versionString = fmt.Sprintf("%s %s %s [%s]", Version, commit, time, goVersion) - } + // Load version string + version := version() - // override software version in viper store - viper.Set(config.Keys.SoftwareVersion, versionString) + // override version in config store + config.SetSoftwareVersion(version) // instantiate the root command rootCmd := &cobra.Command{ - Use: "gotosocial", - Short: "GoToSocial - a fediverse social media server", - Long: "GoToSocial - a fediverse social media server\n\nFor help, see: https://docs.gotosocial.org.\n\nCode: https://github.com/superseriousbusiness/gotosocial", - Version: versionString, + Use: "gotosocial", + Short: "GoToSocial - a fediverse social media server", + Long: "GoToSocial - a fediverse social media server\n\nFor help, see: https://docs.gotosocial.org.\n\nCode: https://github.com/superseriousbusiness/gotosocial", + Version: version, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + // before running any other cmd funcs, we must load config-path + return config.LoadEarlyFlags(cmd) + }, SilenceErrors: true, SilenceUsage: true, } // attach global flags to the root command so that they can be accessed from any subcommand - flag.Global(rootCmd, config.Defaults) - - // bind the config-path flag to viper early so that we can call it in the pre-run of following commands - if err := viper.BindPFlag(config.Keys.ConfigPath, rootCmd.PersistentFlags().Lookup(config.Keys.ConfigPath)); err != nil { - logrus.Fatalf("error attaching config flag: %s", err) - } + config.AddGlobalFlags(rootCmd) // add subcommands rootCmd.AddCommand(serverCommands()) @@ -91,3 +69,45 @@ func main() { logrus.Fatalf("error executing command: %s", err) } } + +// version will build a version string from binary's stored build information. +func version() string { + // Read build information from binary + build, ok := debug.ReadBuildInfo() + if !ok { + return "" + } + + // Define easy getter to fetch build settings + getSetting := func(key string) string { + for i := 0; i < len(build.Settings); i++ { + if build.Settings[i].Key == key { + return build.Settings[i].Value + } + } + return "" + } + + var info []string + + if Version != "" { + // Append version if set + info = append(info, Version) + } + + if vcs := getSetting("vcs"); vcs != "" { + // A VCS type was set (99.9% probably git) + + if commit := getSetting("vcs.revision"); commit != "" { + if len(commit) > 7 { + // Truncate commit + commit = commit[:7] + } + + // Append VCS + commit if set + info = append(info, vcs+"-"+commit) + } + } + + return strings.Join(info, " ") +} |