mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-07 12:10:26 -06:00
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package command
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/shroff/phylum/server/internal/command/appcmd"
|
|
"github.com/shroff/phylum/server/internal/command/fs"
|
|
"github.com/shroff/phylum/server/internal/core/db"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
func SetupCommand() {
|
|
viper.SetEnvPrefix("phylum")
|
|
|
|
var rootCmd = &cobra.Command{Use: path.Base(os.Args[0])}
|
|
flags := rootCmd.PersistentFlags()
|
|
|
|
flags.BoolP("debug", "d", false, "Debug mode")
|
|
viper.BindPFlag("debug", flags.Lookup("debug"))
|
|
|
|
flags.Bool("trace-db", false, "Trace db Queries")
|
|
viper.BindPFlag("trace_sql", flags.Lookup("trace-db"))
|
|
|
|
flags.StringP("working-dir", "W", "data", "Working Directory")
|
|
viper.BindPFlag("working_dir", flags.Lookup("working-dir"))
|
|
|
|
flags.String("database-url", "postgres://phylum:phylum@localhost:5432/phylum", "Database URL or DSN")
|
|
viper.BindPFlag("database_url", flags.Lookup("database-url"))
|
|
|
|
rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
|
|
debug := viper.GetBool("debug")
|
|
if debug {
|
|
logrus.SetLevel(logrus.TraceLevel)
|
|
logrus.Debug("Running in debug mode")
|
|
}
|
|
|
|
workDir := viper.GetString("working_dir")
|
|
if workDir != "." {
|
|
logrus.Debug("Setting working directory to " + workDir)
|
|
os.Mkdir(workDir, 0750)
|
|
os.Chdir(workDir)
|
|
}
|
|
|
|
var err error
|
|
if err = db.Create(context.Background(), viper.GetString("database_url"), debug && viper.GetBool("trace_sql")); err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|
|
|
|
defer func() {
|
|
if db.Default != nil {
|
|
logrus.Debug("Shutting Down App")
|
|
db.Default.Close()
|
|
}
|
|
}()
|
|
|
|
rootCmd.AddCommand([]*cobra.Command{
|
|
appcmd.SetupCommand(),
|
|
fs.SetupCommand(),
|
|
setupSchemaCommand(),
|
|
}...)
|
|
rootCmd.Execute()
|
|
}
|