Add CLI structure

This commit is contained in:
Miguel de la Cruz 2021-09-13 11:38:50 +02:00
parent 7f3c5f7c1b
commit 40ae6b666f
80 changed files with 13313 additions and 35 deletions

View file

@ -0,0 +1,20 @@
package commands
import (
"github.com/spf13/cobra"
)
func RootCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "craban",
Short: "Webapp to play RPG games and manage their assets",
}
cmd.PersistentFlags().StringP("config", "c", "craban.yml", "path to the configuration file")
cmd.AddCommand(
ServeCmd(),
)
return cmd
}

View file

@ -0,0 +1,50 @@
package commands
import (
"os"
"os/signal"
"git.ctrlz.es/mgdelacroix/craban/server"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
)
func ServeCmd() *cobra.Command {
return &cobra.Command{
Use: "serve",
Short: "Starts the craban server",
Run: serveCmdF,
}
}
func serveCmdF(cmd *cobra.Command, _ []string) {
configPath, _ := cmd.Flags().GetString("config")
srv, err := server.NewServerWithConfigPath(configPath)
if err != nil {
log.Error().Err(err).Msg("cannot create server")
os.Exit(1)
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
closed := make(chan bool, 1)
go func() {
log.Info().Msg("Starting craban server")
if err := srv.Start(); err != nil {
log.Error().Err(err).Msg("error running server")
os.Exit(1)
}
closed <- true
}()
s := <-c
log.Info().Str("signal", s.String()).Msg("got signal, exiting")
if err := srv.Close(); err != nil {
log.Error().Err(err).Msg("error closing server")
os.Exit(1)
}
<-closed
}

View file

@ -1,43 +1,13 @@
package main
import (
"flag"
"os"
"os/signal"
"git.ctrlz.es/mgdelacroix/craban/server"
"git.ctrlz.es/mgdelacroix/craban/cmd/craban/commands"
"github.com/rs/zerolog/log"
)
func main() {
configFlag := flag.String("config", "craban.yml", "the configuration path")
flag.Parse()
srv, err := server.NewServerWithConfigPath(*configFlag)
if err != nil {
log.Error().Err(err).Msg("cannot create server")
os.Exit(1)
if err := commands.RootCmd().Execute(); err != nil {
log.Error().Err(err).Msg("command failed to execute")
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
closed := make(chan bool, 1)
go func() {
log.Info().Msg("Starting craban server")
if err := srv.Start(); err != nil {
log.Error().Err(err).Msg("error running server")
os.Exit(1)
}
closed <- true
}()
s := <-c
log.Info().Str("signal", s.String()).Msg("got signal, exiting")
if err := srv.Close(); err != nil {
log.Error().Err(err).Msg("error closing server")
os.Exit(1)
}
<-closed
}