Deployment and lifecycle management for Nix
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

client(services): stub out list and upgrade subcommands

+52 -20
+48 -19
cmd/client/main.go
··· 21 21 var version = "dev" 22 22 23 23 type config struct { 24 - Builder *builderCmd `arg:"subcommand:builder"` 25 - Daemon *daemonCmd `arg:"subcommand:daemon"` 26 - Seed *seedCmd `arg:"subcommand:seed"` 24 + Builder *builderCmd `arg:"subcommand:builder"` 25 + Daemon *daemonCmd `arg:"subcommand:daemon"` 26 + Seed *seedCmd `arg:"subcommand:seed"` 27 + Services *servicesCmd `arg:"subcommand:services"` 27 28 28 29 ApiTokenFile string `arg:"--api-token-file,env:SOWER_API_TOKEN_FILE" json:"api-token-file"` 29 30 ApiToken string `arg:"--api-token,env:SOWER_API_TOKEN"` ··· 83 84 Yes bool `arg:"--yes,-y"` 84 85 } 85 86 87 + type Service string 88 + 89 + type servicesCmd struct { 90 + List *servicesListCmd `arg:"subcommand:list"` 91 + Upgrade *servicesUpgradeCmd `arg:"subcommand:upgrade"` 92 + Services []Service 93 + } 94 + 95 + type servicesListCmd struct{} 96 + type servicesUpgradeCmd struct{} 97 + 86 98 func main() { 87 99 var cfg config 88 - var parseResult error 89 - p, err := arg.NewParser(arg.Config{}, &cfg) 100 + 101 + parsedConfig, err := arg.NewParser(arg.Config{}, &cfg) 90 102 if err != nil { 91 103 log.Fatalf("Fatal error in argument specification") 92 104 os.Exit(1) 93 105 } 94 106 95 107 // read args for finding config files 96 - _ = p.Parse(os.Args[1:]) 108 + _ = parsedConfig.Parse(os.Args[1:]) 109 + 110 + args := cfg 97 111 98 112 initLogger(cfg.Debug) 99 113 ··· 124 138 os.Exit(1) 125 139 } 126 140 141 + // merge into config 127 142 if err := json.Unmarshal(j, &cfg); err != nil { 128 143 slog.Error("Failed to parse configuration file", "config-file", configFile) 129 144 os.Exit(1) 130 145 } 131 146 } 132 147 133 - // reparse flags on top of config 134 - parseResult = p.Parse(os.Args[1:]) 148 + // reparse args on top of config 149 + parseResult := parsedConfig.Parse(os.Args[1:]) 150 + 151 + slog.Debug("CLI args", "args", args) 152 + slog.Debug("Final merged config", "config", cfg) 135 153 136 154 // re-initialize logging in case level is only set in config 137 155 initLogger(cfg.Debug) 138 156 139 - slog.Debug("Loaded args", "args", cfg) 140 - 141 157 if cfg.ApiToken == "" && cfg.ApiTokenFile != "" { 142 158 slog.Debug("Reading api-token file", "file", cfg.ApiTokenFile) 143 159 ··· 165 181 slog.Info("Version", "version", version) 166 182 os.Exit(0) 167 183 case parseResult == arg.ErrHelp: // found "--help" on command line 168 - p.WriteHelp(os.Stdout) 184 + parsedConfig.WriteHelp(os.Stdout) 169 185 os.Exit(0) 170 186 case parseResult != nil: 171 187 slog.Error("Unknown error", "error", parseResult) 172 188 os.Exit(1) 173 - } 174 - 175 - switch { 176 - case cfg.Builder != nil: 189 + case args.Builder != nil: 177 190 buildCommand(cfg) 178 - case cfg.Daemon != nil: 191 + case args.Daemon != nil: 179 192 daemonCommand(cfg) 180 - case cfg.Seed != nil: 193 + case args.Seed != nil: 181 194 err := seedSubcommand(cfg) 182 195 if err != nil { 183 - p.WriteHelp(os.Stdout) 196 + parsedConfig.WriteHelp(os.Stdout) 184 197 } 198 + case cfg.Services != nil: 199 + servicesCommand(cfg) 185 200 default: 186 - p.WriteHelp(os.Stdout) 201 + parsedConfig.WriteHelp(os.Stdout) 202 + } 203 + } 204 + 205 + func servicesCommand(cfg config) { 206 + switch { 207 + case cfg.Services.List != nil: 208 + if len(cfg.Services.Services) == 0 { 209 + slog.Warn("No services configured") 210 + os.Exit(0) 211 + } 212 + 213 + for _, service := range cfg.Services.Services { 214 + slog.Info("Found service", "service", service) 215 + } 187 216 } 188 217 } 189 218
+4 -1
dev-client.json
··· 1 1 { 2 2 "endpoint": "http://localhost:7150", 3 - "api-token-file": ".dev-api-token" 3 + "api-token-file": ".dev-api-token", 4 + "services": { 5 + "services": ["tracker"] 6 + } 4 7 }