summaryrefslogtreecommitdiff
path: root/cmd/gotosocial/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/gotosocial/main.go')
-rw-r--r--cmd/gotosocial/main.go92
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, " ")
+}