From 7563087befbf64b85457cc5896c88c13183deee6 Mon Sep 17 00:00:00 2001 From: Ilya Groshev Date: Fri, 24 Apr 2026 19:08:56 +0300 Subject: [PATCH] Enhance wizard CLI with support for --prefer-saved flag to skip confirmation prompts and reuse saved configurations --- README.md | 19 +++++++++++++------ server/cmd/wizard/main.go | 20 +++++++++++++++++--- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dd5299e..972a562 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,13 @@ cd server go run ./cmd/wizard ``` -Your choices are saved so next time you just press Enter to relaunch with the same settings. +Your choices are saved so next time you just press Enter to relaunch with the same settings. To skip the confirmation prompt entirely (useful for scripts or quick relaunches), pass `--prefer-saved`: + +```bash +go run ./cmd/wizard --prefer-saved +``` + +If no saved config exists, the flag prints an error and exits. #### Custom Ports @@ -34,11 +40,12 @@ By default the wizard uses ports 8003 (gRPC), 8080 (CDN), and 3000 (auth). Overr go run ./cmd/wizard --grpc-port 9003 --cdn-port 9080 ``` -| Flag | Default | Description | -| ------------- | ------- | ---------------- | -| `--grpc-port` | `8003` | gRPC server port | -| `--cdn-port` | `8080` | CDN server port | -| `--auth-port` | `3000` | Auth server port | +| Flag | Default | Description | +| ---------------- | ------- | ---------------------------------- | +| `--prefer-saved` | `false` | Reuse saved config without prompting | +| `--grpc-port` | `8003` | gRPC server port | +| `--cdn-port` | `8080` | CDN server port | +| `--auth-port` | `3000` | Auth server port | Custom ports are saved to `.wizard.json` alongside your other settings. On the next run the saved ports are reused automatically — no need to pass the flags again. If you later pass different port flags, the wizard warns you that the ports changed and asks for confirmation before continuing. diff --git a/server/cmd/wizard/main.go b/server/cmd/wizard/main.go index fc9d947..c00ccac 100644 --- a/server/cmd/wizard/main.go +++ b/server/cmd/wizard/main.go @@ -55,6 +55,7 @@ type ports struct { func main() { setupOnly := flag.Bool("setup-only", false, "show patching instructions and exit without building or launching") + preferSaved := flag.Bool("prefer-saved", false, "reuse saved config without prompting") grpcPort := flag.Int("grpc-port", defaultGRPCPort, "gRPC server port") cdnPort := flag.Int("cdn-port", defaultCDNPort, "CDN server port") authPort := flag.Int("auth-port", defaultAuthPort, "auth server port") @@ -77,7 +78,7 @@ func main() { downloadDeps() } - ip, cfg, firstRun := resolveIP() + ip, cfg, firstRun := resolveIP(*preferSaved) p := resolvePorts(flagSet, *grpcPort, *cdnPort, *authPort, cfg) savedPorts := portsFromConfig(cfg) @@ -311,12 +312,25 @@ func runQuiet(cmd *exec.Cmd, label string) { } } -func resolveIP() (string, config, bool) { - if cfg, err := loadConfig(); err == nil { +func resolveIP(preferSaved bool) (string, config, bool) { + cfg, err := loadConfig() + if err == nil { + if preferSaved { + if isLANBased(cfg) { + if ip, updated, ok := recheckLANIP(cfg); ok { + return ip, updated, false + } + } + return cfg.IP, cfg, false + } + ip, cfg, done := handleSavedConfig(cfg) if done { return ip, cfg, false } + } else if preferSaved { + fmt.Fprintln(os.Stderr, " --prefer-saved: no saved config found; run without the flag first.") + os.Exit(1) } ip, cfg := runWizard()