package cmd import ( "context" "fmt" "os" "os/signal" "syscall" "github.com/spf13/cobra" "github.com/dhao2001/mygo/internal/app" "github.com/dhao2001/mygo/internal/config" "github.com/dhao2001/mygo/internal/server" ) var serveConfigFile string var serveCmd = &cobra.Command{ Use: "serve", Short: "Start the MyGO HTTP server", RunE: func(cmd *cobra.Command, args []string) error { v := config.New() cfg, err := config.Load(v, serveConfigFile) if err != nil { return fmt.Errorf("load config: %w", err) } ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() webApp := app.NewWebApp(cfg) router := server.NewRouter(webApp) addr := server.Address(webApp.Config.Server) return server.RunWithGracefulShutdown(ctx, addr, router) }, } func init() { serveCmd.Flags().StringVar(&serveConfigFile, "config", "", "config file path") rootCmd.AddCommand(serveCmd) }