package main import ( "context" "flag" "fmt" "os" "os/signal" "syscall" "backupx/server/internal/app" "backupx/server/internal/config" ) var version = "dev" func main() { var configPath string var showVersion bool flag.StringVar(&configPath, "config", "", "path to config file") flag.BoolVar(&showVersion, "version", false, "print version") flag.Parse() if showVersion { fmt.Println(version) return } cfg, err := config.Load(configPath) if err != nil { fmt.Fprintf(os.Stderr, "load config: %v\n", err) os.Exit(1) } ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() application, err := app.New(ctx, cfg, version) if err != nil { fmt.Fprintf(os.Stderr, "bootstrap app: %v\n", err) os.Exit(1) } defer application.Close() if err := application.Run(ctx); err != nil { application.Logger().Error("application exited with error", app.ErrorField(err)) os.Exit(1) } }