Deployment and lifecycle management for Nix
0
fork

Configure Feed

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

client: can list services

+33 -15
+22 -4
cmd/client/main.go
··· 203 203 } 204 204 205 205 func servicesCommand(cfg config) { 206 + if len(cfg.Services.Services) == 0 { 207 + slog.Warn("No services configured") 208 + os.Exit(0) 209 + } 210 + 206 211 switch { 207 212 case cfg.Services.List != nil: 208 - if len(cfg.Services.Services) == 0 { 209 - slog.Warn("No services configured") 210 - os.Exit(0) 213 + seedClient, err := client.NewSeedClient(cfg.Endpoint, cfg.ApiToken) 214 + if err != nil { 215 + slog.Error("Failed to initialize seed client") 216 + os.Exit(1) 211 217 } 212 218 213 219 for _, service := range cfg.Services.Services { 214 - slog.Info("Found service", "service", service) 220 + seed, err := seedClient.GetSeed(string(service), string(client.Service)) 221 + if err != nil { 222 + slog.Error("Failed to get seed", "error", err, "name", string(service), "type", client.Service) 223 + continue 224 + } 225 + 226 + storePath, err := seedClient.GetSeedLatestPath(seed) 227 + if err != nil { 228 + slog.Error("Failed to get seed store path", "error", err) 229 + continue 230 + } 231 + 232 + slog.Info("Found service", "service", service, "store_path", storePath.Path) 215 233 } 216 234 } 217 235 }
+10 -10
cmd/client/seed.go
··· 20 20 cmd := exec.Command(fmt.Sprintf("%s/activate", storePath)) 21 21 err = commands.SimpleRun(cmd) 22 22 if err != nil { 23 - return fmt.Errorf("Failed to activate home-manager generation: %v", err) 23 + return fmt.Errorf("failed to activate home-manager generation: %v", err) 24 24 } 25 25 26 26 case client.Nixos: 27 27 profileCmd := exec.Command("nix-env", "--set", "--profile", "/nix/var/nix/profiles/system", storePath) 28 28 err = commands.SimpleRun(profileCmd) 29 29 if err != nil { 30 - return fmt.Errorf("Failed to set nixos profile: %v", err) 30 + return fmt.Errorf("failed to set nixos profile: %v", err) 31 31 } 32 32 33 33 switchCmd := exec.Command(fmt.Sprintf("%s/bin/switch-to-configuration", storePath), mode) 34 34 err = commands.SimpleRun(switchCmd) 35 35 if err != nil { 36 - return fmt.Errorf("Failed to set nixos profile: %v", err) 36 + return fmt.Errorf("failed to set nixos profile: %v", err) 37 37 } 38 38 39 39 default: 40 - return fmt.Errorf("Unsupported seed type: %s", seedType) 40 + return fmt.Errorf("unsupported seed type: %s", seedType) 41 41 } 42 42 43 43 return nil ··· 47 47 slog.Debug("Realizing path", "path", storePath) 48 48 49 49 if storePath == "" { 50 - return fmt.Errorf("Cannot download without seed out_path") 50 + return fmt.Errorf("cannot download without seed out_path") 51 51 } 52 52 53 53 cmd := []string{"--realize", storePath} ··· 80 80 81 81 profileStorePath, err := filepath.EvalSymlinks("/nix/var/nix/profiles/system") 82 82 if err != nil { 83 - return fmt.Errorf("Failed to eval symlink for %s: %v", "/nix/var/nix/profiles/system", err) 83 + return fmt.Errorf("failed to eval symlink for %s: %v", "/nix/var/nix/profiles/system", err) 84 84 } 85 85 currentStorePath, err := filepath.EvalSymlinks("/run/current-system") 86 86 if err != nil { 87 - return fmt.Errorf("Failed to eval symlink for %s: %v", "/run/current-system", err) 87 + return fmt.Errorf("failed to eval symlink for %s: %v", "/run/current-system", err) 88 88 } 89 89 bootedStorePath, err := filepath.EvalSymlinks("/run/booted-system") 90 90 if err != nil { 91 - return fmt.Errorf("Failed to eval symlink for %s: %v", "/run/booted-system", err) 91 + return fmt.Errorf("failed to eval symlink for %s: %v", "/run/booted-system", err) 92 92 } 93 93 94 94 var needReboot bool ··· 117 117 cmd := exec.Command("systemd-run", "--on-active=5s", "--no-block", "--unit=sower-client-reboot", "systemctl", "reboot") 118 118 err := commands.SimpleRun(cmd) 119 119 if err != nil { 120 - return fmt.Errorf("Failed to schedule reboot: %v", err) 120 + return fmt.Errorf("failed to schedule reboot: %v", err) 121 121 } 122 122 } else { 123 123 slog.Warn("Reboot needed, but skipping without --yes") ··· 138 138 case string(client.Service): 139 139 versionFile = fmt.Sprintf("%v/.sower/systemd", storePath) 140 140 default: 141 - return fmt.Errorf("Unsupported seed type %s", seedType) 141 + return fmt.Errorf("unsupported seed type %s", seedType) 142 142 } 143 143 144 144 _, err := os.Stat(versionFile)
+1 -1
dev-client.json
··· 2 2 "endpoint": "http://localhost:7150", 3 3 "api-token-file": ".dev-api-token", 4 4 "services": { 5 - "services": ["tracker"] 5 + "services": ["sower-server"] 6 6 } 7 7 }