2021-02-28 15:17:18 +01:00
/ *
2021-03-01 15:41:43 +01:00
GoToSocial
2021-12-20 18:42:19 +01:00
Copyright ( C ) 2021 - 2022 GoToSocial Authors admin @ gotosocial . org
2021-02-28 15:17:18 +01:00
2021-03-01 15:41:43 +01:00
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
2021-02-28 15:17:18 +01:00
2021-03-01 15:41:43 +01:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
2021-02-28 15:17:18 +01:00
2021-03-01 15:41:43 +01:00
You should have received a copy of the GNU Affero General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2021-02-28 15:17:18 +01:00
* /
2021-02-27 22:57:50 +01:00
package main
import (
2022-07-19 10:47:55 +02:00
"log"
2022-04-02 15:40:09 +02:00
"runtime/debug"
2022-05-30 14:41:24 +02:00
"strings"
2022-04-02 15:40:09 +02:00
2021-12-07 13:31:39 +01:00
"github.com/spf13/cobra"
2021-03-03 11:28:28 +01:00
2021-07-31 17:49:59 +02:00
_ "github.com/superseriousbusiness/gotosocial/docs"
2021-12-07 13:31:39 +01:00
"github.com/superseriousbusiness/gotosocial/internal/config"
2021-02-27 22:57:50 +01:00
)
2022-04-02 15:40:09 +02:00
// Version is the version of GoToSocial being used.
// It's injected into the binary by the build script.
2021-06-28 12:17:20 +02:00
var Version string
2021-07-31 17:49:59 +02:00
//go:generate swagger generate spec
2021-02-27 22:57:50 +01:00
func main ( ) {
2022-05-30 14:41:24 +02:00
// Load version string
version := version ( )
2021-05-09 11:25:13 +02:00
2022-05-30 14:41:24 +02:00
// override version in config store
config . SetSoftwareVersion ( version )
2021-12-07 13:31:39 +01:00
// instantiate the root command
rootCmd := & cobra . Command {
2022-05-30 14:41:24 +02:00
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 )
} ,
2021-12-07 13:31:39 +01:00
SilenceErrors : true ,
SilenceUsage : true ,
}
// attach global flags to the root command so that they can be accessed from any subcommand
2022-05-30 14:41:24 +02:00
config . AddGlobalFlags ( rootCmd )
2021-03-02 22:52:31 +01:00
2021-12-07 13:31:39 +01:00
// add subcommands
rootCmd . AddCommand ( serverCommands ( ) )
rootCmd . AddCommand ( testrigCommands ( ) )
rootCmd . AddCommand ( debugCommands ( ) )
rootCmd . AddCommand ( adminCommands ( ) )
// run
if err := rootCmd . Execute ( ) ; err != nil {
2022-07-19 10:47:55 +02:00
log . Fatalf ( "error executing command: %s" , err )
2021-03-02 22:52:31 +01:00
}
2021-02-27 22:57:50 +01:00
}
2022-05-30 14:41:24 +02:00
// 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 , " " )
}