diff --git a/cmd/internal/agentcontainer/daemon.go b/cmd/internal/agentcontainer/daemon.go index 8e1962dd55..e5bbe5fd94 100644 --- a/cmd/internal/agentcontainer/daemon.go +++ b/cmd/internal/agentcontainer/daemon.go @@ -90,7 +90,6 @@ func (cmd *DaemonCmd) Run(c *cobra.Command, args []string) error { } ctx, stop := signal.NotifyContext(c.Context(), os.Interrupt, syscall.SIGTERM) - defer stop() g, ctx := errgroup.WithContext(ctx) var tasksStarted bool @@ -136,6 +135,7 @@ func (cmd *DaemonCmd) Run(c *cobra.Command, args []string) error { } err := g.Wait() + stop() // Restore default signal handling before exiting. if err != nil { log.Errorf("daemon error: %v", err) os.Exit(1) diff --git a/cmd/internal/sh.go b/cmd/internal/sh.go index e1834594a4..4992bf330a 100644 --- a/cmd/internal/sh.go +++ b/cmd/internal/sh.go @@ -37,11 +37,12 @@ func NewShellCmd() *cobra.Command { } func (cmd *ShellCommand) Run(ctx context.Context, args []string) error { - if cmd.Command == "" && len(args) == 0 { + switch { + case cmd.Command == "" && len(args) == 0: return nil - } else if cmd.Command != "" && len(args) > 0 { + case cmd.Command != "" && len(args) > 0: return fmt.Errorf("either use -c or provide a script file") - } else if len(args) > 1 { + case len(args) > 1: return fmt.Errorf("only a single script file can be used") } diff --git a/cmd/pro/start.go b/cmd/pro/start.go index d302c4091c..2890a41633 100644 --- a/cmd/pro/start.go +++ b/cmd/pro/start.go @@ -872,11 +872,12 @@ func (cmd *StartCmd) runInDocker(ctx context.Context, name string) (string, erro args = append(args, cmd.DockerArgs...) // set image - if cmd.DockerImage != "" { + switch { + case cmd.DockerImage != "": args = append(args, cmd.DockerImage) - } else if cmd.Version != "" { + case cmd.Version != "": args = append(args, "ghcr.io/devsy-org/devsy-pro:"+strings.TrimPrefix(cmd.Version, "v")) - } else { + default: args = append(args, "ghcr.io/devsy-org/devsy-pro:latest") } @@ -955,14 +956,15 @@ func (cmd *StartCmd) findLoftContainer( runningContainerID := "" for _, containerID := range arr { containerState, err := cmd.inspectContainer(ctx, containerID) - if err != nil { + switch { + case err != nil: return "", err - } else if onlyRunning && strings.ToLower(containerState.State.Status) != "running" { + case onlyRunning && strings.ToLower(containerState.State.Status) != "running": err = cmd.removeContainer(ctx, containerID) if err != nil { return "", err } - } else { + default: runningContainerID = containerID } } @@ -1772,9 +1774,10 @@ func ensureAdminPassword( } admin, err := loftClient.StorageV1().Users().Get(ctx, "admin", metav1.GetOptions{}) - if err != nil && !kerrors.IsNotFound(err) { + switch { + case err != nil && !kerrors.IsNotFound(err): return false, err - } else if admin == nil { + case admin == nil: admin, err = loftClient.StorageV1().Users().Create(ctx, &storagev1.User{ ObjectMeta: metav1.ObjectMeta{ Name: "admin", @@ -1794,7 +1797,9 @@ func ensureAdminPassword( if err != nil { return false, err } - } else if admin.Spec.PasswordRef == nil || admin.Spec.PasswordRef.SecretName == "" || admin.Spec.PasswordRef.SecretNamespace == "" { + case admin.Spec.PasswordRef == nil || + admin.Spec.PasswordRef.SecretName == "" || + admin.Spec.PasswordRef.SecretNamespace == "": return false, nil } diff --git a/e2e/framework/framework.go b/e2e/framework/framework.go index 595cb15667..e434964a36 100644 --- a/e2e/framework/framework.go +++ b/e2e/framework/framework.go @@ -13,22 +13,22 @@ func NewDefaultFramework(path string) *Framework { binName := "devsy-" switch runtime.GOOS { case "darwin": - binName = binName + "darwin-" + binName += "darwin-" case "linux": - binName = binName + "linux-" + binName += "linux-" case "windows": - binName = binName + "windows-" + binName += "windows-" } switch runtime.GOARCH { case "amd64": - binName = binName + "amd64" + binName += "amd64" case "arm64": - binName = binName + "arm64" + binName += "arm64" } if runtime.GOOS == "windows" { - binName = binName + ".exe" + binName += ".exe" } return &Framework{DevsyBinDir: path, DevsyBinName: binName} diff --git a/e2e/framework/util.go b/e2e/framework/util.go index 9d6687d93c..98c2264f56 100644 --- a/e2e/framework/util.go +++ b/e2e/framework/util.go @@ -82,21 +82,20 @@ func createTempDir(baseDir string) (string, error) { var dir string var err error - if os.Getenv("GITHUB_ACTIONS") == "true" { + switch { + case os.Getenv("GITHUB_ACTIONS") == "true": runnerTemp := os.Getenv("RUNNER_TEMP") if runnerTemp != "" { dir, err = os.MkdirTemp(runnerTemp, "temp-*") } else { dir, err = os.MkdirTemp("", "temp-*") } - } else if os.Getenv("ACT") == "true" { + case os.Getenv("ACT") == "true": dir, err = os.MkdirTemp("/tmp", "temp-*") - } else { - if baseDir == "" { - dir, err = os.MkdirTemp("", "temp-*") - } else { - dir, err = os.MkdirTemp(baseDir, "temp-*") - } + case baseDir == "": + dir, err = os.MkdirTemp("", "temp-*") + default: + dir, err = os.MkdirTemp(baseDir, "temp-*") } if err != nil { diff --git a/pkg/agent/agent.go b/pkg/agent/agent.go index 04e4c58ee7..de8d497487 100644 --- a/pkg/agent/agent.go +++ b/pkg/agent/agent.go @@ -128,12 +128,13 @@ func ReadAgentWorkspaceInfo( // check if we need to become root log.Debug("checking if root privileges are required") shouldExit, err := rerunAsRoot(workspaceInfo) - if err != nil { + switch { + case err != nil: return false, nil, fmt.Errorf("rerun as root: %w", err) - } else if shouldExit { + case shouldExit: log.Debug("rerunning as root, exiting current process") return true, nil, nil - } else if workspaceInfo == nil { + case workspaceInfo == nil: log.Debug("no workspace info available and not rerunning as root") return false, nil, ErrFindAgentHomeDir } diff --git a/pkg/agent/tunnelserver/tunnelserver.go b/pkg/agent/tunnelserver/tunnelserver.go index cddac49426..23fde17fce 100644 --- a/pkg/agent/tunnelserver/tunnelserver.go +++ b/pkg/agent/tunnelserver/tunnelserver.go @@ -9,6 +9,7 @@ import ( "io" "os" "path/filepath" + "slices" "strings" "github.com/devsy-org/api/pkg/devsy" @@ -40,13 +41,13 @@ func RunServicesServer( workspace *provider2.Workspace, options ...Option, ) error { - opts := append(options, []Option{ + options = append(options, WithForwarder(forwarder), WithAllowGitCredentials(allowGitCredentials), WithAllowDockerCredentials(allowDockerCredentials), WithWorkspace(workspace), - }...) - tunnelServ := New(opts...) + ) + tunnelServ := New(options...) return tunnelServ.Run(ctx, reader, writer) } @@ -59,12 +60,12 @@ func RunUpServer( workspace *provider2.Workspace, options ...Option, ) (*config.Result, error) { - opts := append(options, []Option{ + options = append(options, WithWorkspace(workspace), WithAllowGitCredentials(allowGitCredentials), WithAllowDockerCredentials(allowDockerCredentials), - }...) - tunnelServ := New(opts...) + ) + tunnelServ := New(options...) return tunnelServ.RunWithResult(ctx, reader, writer) } @@ -77,13 +78,13 @@ func RunSetupServer( mounts []*config.Mount, options ...Option, ) (*config.Result, error) { - opts := append(options, []Option{ + options = append(options, WithMounts(mounts), WithAllowGitCredentials(allowGitCredentials), WithAllowDockerCredentials(allowDockerCredentials), WithAllowKubeConfig(true), - }...) - tunnelServ := New(opts...) + ) + tunnelServ := New(options...) tunnelServ.allowPlatformOptions = true return tunnelServ.RunWithResult(ctx, reader, writer) @@ -267,9 +268,9 @@ func (t *tunnelServer) GitCredentials( } if t.platformOptions != nil && t.platformOptions.Enabled { - gitHttpCredentials := append( + gitHttpCredentials := slices.Concat( t.platformOptions.UserCredentials.GitHttp, - t.platformOptions.ProjectCredentials.GitHttp...) + t.platformOptions.ProjectCredentials.GitHttp) if len(gitHttpCredentials) > 0 { if len(gitHttpCredentials) == 1 { credentials.Username = gitHttpCredentials[0].User diff --git a/pkg/client/clientimplementation/daemonclient/client.go b/pkg/client/clientimplementation/daemonclient/client.go index 775f8de2c7..a64d412c12 100644 --- a/pkg/client/clientimplementation/daemonclient/client.go +++ b/pkg/client/clientimplementation/daemonclient/client.go @@ -159,15 +159,16 @@ func (c *client) CheckWorkspaceReachable(ctx context.Context) error { } } - if getWorkspaceErr != nil { + switch { + case getWorkspaceErr != nil: return fmt.Errorf("couldn't get workspace: %w", getWorkspaceErr) - } else if instance.Status.Phase != storagev1.InstanceReady { + case instance.Status.Phase != storagev1.InstanceReady: return fmt.Errorf( "workspace is %q, run `devsy workspace up %s` to start it again", instance.Status.Phase, c.workspace.ID, ) - } else if instance.Status.LastWorkspaceStatus != storagev1.WorkspaceStatusRunning { + case instance.Status.LastWorkspaceStatus != storagev1.WorkspaceStatusRunning: return fmt.Errorf( "workspace is %q, run `devsy workspace up %s` to start it again", instance.Status.LastWorkspaceStatus, diff --git a/pkg/client/clientimplementation/daemonclient/delete.go b/pkg/client/clientimplementation/daemonclient/delete.go index 7606e4bad8..7206b26d6a 100644 --- a/pkg/client/clientimplementation/daemonclient/delete.go +++ b/pkg/client/clientimplementation/daemonclient/delete.go @@ -112,11 +112,12 @@ func (c *client) Delete(ctx context.Context, opt clientpkg.DeleteOptions) error ManagementV1(). DevsyWorkspaceInstances(workspace.Namespace). Get(ctx, workspace.Name, metav1.GetOptions{}) - if kerrors.IsNotFound(err) { + switch { + case kerrors.IsNotFound(err): return true, nil - } else if err != nil { + case err != nil: return false, fmt.Errorf("error getting workspace: %w", err) - } else if workspaceInstance.DeletionTimestamp == nil { + case workspaceInstance.DeletionTimestamp == nil: // this can occur if the workspace is already deleted and was recreated return true, nil } diff --git a/pkg/client/clientimplementation/daemonclient/up.go b/pkg/client/clientimplementation/daemonclient/up.go index ac60c598c4..9516ca3fc3 100644 --- a/pkg/client/clientimplementation/daemonclient/up.go +++ b/pkg/client/clientimplementation/daemonclient/up.go @@ -148,11 +148,12 @@ func waitTaskDone( }, builders.ParameterCodec). Do(ctx). Into(tasks) - if err != nil { + switch { + case err != nil: return nil, fmt.Errorf("error getting up result: %w", err) - } else if len(tasks.Tasks) == 0 || tasks.Tasks[0].Result == nil { + case len(tasks.Tasks) == 0 || tasks.Tasks[0].Result == nil: return nil, fmt.Errorf("up result not found") - } else if len(tasks.Tasks) > 1 { + case len(tasks.Tasks) > 1: return nil, fmt.Errorf("multiple up results found") } diff --git a/pkg/devcontainer/config/config.go b/pkg/devcontainer/config/config.go index 067d1a8647..017786d28b 100644 --- a/pkg/devcontainer/config/config.go +++ b/pkg/devcontainer/config/config.go @@ -96,15 +96,15 @@ type DevContainerConfigBase struct { // The path of the workspace folder inside the container. WorkspaceFolder string `json:"workspaceFolder,omitempty"` - // DEPRECATED: Use 'customizations/vscode/settings' instead + // Deprecated: Use 'customizations/vscode/settings' instead // Machine specific settings that should be copied into the container. These are only copied when connecting to the container for the first time, rebuilding the container then triggers it again. Settings map[string]any `json:"settings,omitempty"` - // DEPRECATED: Use 'customizations/vscode/extensions' instead + // Deprecated: Use 'customizations/vscode/extensions' instead // An array of extensions that should be installed into the container. Extensions []string `json:"extensions,omitempty"` - // DEPRECATED: Use 'customizations/vscode/devPort' instead + // Deprecated: Use 'customizations/vscode/devPort' instead // The port VS Code can use to connect to its backend. DevPort int `json:"devPort,omitempty"` diff --git a/pkg/devcontainer/prebuild.go b/pkg/devcontainer/prebuild.go index facc6d30e2..cca41a3e1d 100644 --- a/pkg/devcontainer/prebuild.go +++ b/pkg/devcontainer/prebuild.go @@ -42,11 +42,12 @@ func (r *runner) Build(ctx context.Context, options provider.BuildOptions) (stri // prebuild already exists var prebuildImage string - if options.Repository != "" { + switch { + case options.Repository != "": prebuildImage = options.Repository + ":" + buildInfo.PrebuildHash - } else if prebuildRepo != "" { + case prebuildRepo != "": prebuildImage = prebuildRepo + ":" + buildInfo.PrebuildHash - } else { + default: prebuildImage = build.GetImageName(r.localWorkspaceFolder, buildInfo.PrebuildHash) } diff --git a/pkg/driver/kubernetes/run.go b/pkg/driver/kubernetes/run.go index 944344770c..5696bc96e1 100644 --- a/pkg/driver/kubernetes/run.go +++ b/pkg/driver/kubernetes/run.go @@ -111,16 +111,17 @@ func (k *KubernetesDriver) runContainer( if k.options.WorkspaceVolumeMount != "" { // Ensure workspace volume mount option is parent or same dir as workspace mount rel, err := filepath.Rel(k.options.WorkspaceVolumeMount, mount.Target) - if err != nil { + switch { + case err != nil: log.Warnf("Relative filepath: %v", err) - } else if strings.HasPrefix(rel, "..") { + case strings.HasPrefix(rel, ".."): log.Warnf( "Workspace volume mount needs to be the same as the workspace mount or a parent, skipping option. "+ "WorkspaceVolumeMount: %s, MountTarget: %s", k.options.WorkspaceVolumeMount, mount.Target, ) - } else { + default: mount.Target = k.options.WorkspaceVolumeMount log.Debugf("Using workspace volume mount: %s", k.options.WorkspaceVolumeMount) } diff --git a/pkg/ide/ideparse/parse.go b/pkg/ide/ideparse/parse.go index 705f5ffd7b..d932c8461d 100644 --- a/pkg/ide/ideparse/parse.go +++ b/pkg/ide/ideparse/parse.go @@ -242,11 +242,12 @@ func RefreshIDEOptions( ) (*provider.Workspace, error) { ide = strings.ToLower(ide) if ide == "" { - if workspace.IDE.Name != "" { + switch { + case workspace.IDE.Name != "": ide = workspace.IDE.Name - } else if devsyConfig.Current().DefaultIDE != "" { + case devsyConfig.Current().DefaultIDE != "": ide = devsyConfig.Current().DefaultIDE - } else { + default: ide = detect() } } diff --git a/pkg/inject/inject.go b/pkg/inject/inject.go index 6493608a49..6e8cca205a 100644 --- a/pkg/inject/inject.go +++ b/pkg/inject/inject.go @@ -319,11 +319,12 @@ func readLine(reader io.Reader) (string, error) { str := "" for { n, err := reader.Read(buf) - if err != nil { + switch { + case err != nil: return "", err - } else if n == 0 { + case n == 0: continue - } else if buf[0] == '\n' { + case buf[0] == '\n': return str, nil } diff --git a/pkg/options/resolver/resolve.go b/pkg/options/resolver/resolve.go index 6e381c8ada..57a7c2537f 100644 --- a/pkg/options/resolver/resolve.go +++ b/pkg/options/resolver/resolve.go @@ -100,13 +100,14 @@ func (r *Resolver) resolveOption( } // resolve option - if userValueOk { + switch { + case userValueOk: resolvedOptionValues[optionName] = config.OptionValue{ Value: userValue, Children: beforeValue.Children, UserProvided: true, } - } else if option.Default != "" { + case option.Default != "": resolvedOptionValues[optionName] = config.OptionValue{ Children: beforeValue.Children, Value: ResolveDefaultValue( @@ -114,7 +115,7 @@ func (r *Resolver) resolveOption( combine(resolvedOptionValues, r.extraValues), ), } - } else if option.Command != "" { + case option.Command != "": optionValue, err := resolveFromCommand(ctx, option, resolvedOptionValues, r.extraValues) if err != nil { return err @@ -122,12 +123,12 @@ func (r *Resolver) resolveOption( optionValue.Children = beforeValue.Children resolvedOptionValues[optionName] = optionValue - } else if len(option.Enum) == 1 { + case len(option.Enum) == 1: resolvedOptionValues[optionName] = config.OptionValue{ Children: beforeValue.Children, Value: option.Enum[0].Value, } - } else { + default: resolvedOptionValues[optionName] = config.OptionValue{ Children: beforeValue.Children, } diff --git a/pkg/platform/deploy.go b/pkg/platform/deploy.go index 3cdf7f7ed6..3f4d78d576 100644 --- a/pkg/platform/deploy.go +++ b/pkg/platform/deploy.go @@ -62,14 +62,15 @@ func WaitForPodReady( loftPod := &pods.Items[0] found := false for _, containerStatus := range loftPod.Status.ContainerStatuses { - if containerStatus.State.Running != nil && containerStatus.Ready { + switch { + case containerStatus.State.Running != nil && containerStatus.Ready: if containerStatus.Name == "manager" { found = true } continue - } else if containerStatus.State.Terminated != nil || - (containerStatus.State.Waiting != nil && CriticalStatus[containerStatus.State.Waiting.Reason]) { + case containerStatus.State.Terminated != nil || + (containerStatus.State.Waiting != nil && CriticalStatus[containerStatus.State.Waiting.Reason]): reason := "" message := "" if containerStatus.State.Terminated != nil { @@ -116,21 +117,22 @@ func WaitForPodReady( message, reason, ) - } else if containerStatus.State.Waiting != nil && time.Now().After(now.Add(time.Second*10)) { - if containerStatus.State.Waiting.Message != "" { + case containerStatus.State.Waiting != nil && time.Now().After(now.Add(time.Second*10)): + switch { + case containerStatus.State.Waiting.Message != "": log.Infof( "Keep waiting, %s container is still starting up: %s (%s)", pkgconfig.ProductNamePro, containerStatus.State.Waiting.Message, containerStatus.State.Waiting.Reason, ) - } else if containerStatus.State.Waiting.Reason != "" { + case containerStatus.State.Waiting.Reason != "": log.Infof( "Keep waiting, %s container is still starting up: %s", pkgconfig.ProductNamePro, containerStatus.State.Waiting.Reason, ) - } else { + default: log.Infof( "Keep waiting, %s container is still starting up", pkgconfig.ProductNamePro, diff --git a/pkg/provider/workspace.go b/pkg/provider/workspace.go index 4e0a132fa0..92d813df62 100644 --- a/pkg/provider/workspace.go +++ b/pkg/provider/workspace.go @@ -331,21 +331,23 @@ type BuildOptions struct { } func (w WorkspaceSource) String() string { - if w.GitRepository != "" { - if w.GitPRReference != "" { + switch { + case w.GitRepository != "": + switch { + case w.GitPRReference != "": return WorkspaceSourceGit + w.GitRepository + "@" + w.GitPRReference - } else if w.GitBranch != "" { + case w.GitBranch != "": return WorkspaceSourceGit + w.GitRepository + "@" + w.GitBranch - } else if w.GitCommit != "" { + case w.GitCommit != "": return WorkspaceSourceGit + w.GitRepository + git.CommitDelimiter + w.GitCommit } return WorkspaceSourceGit + w.GitRepository - } else if w.LocalFolder != "" { + case w.LocalFolder != "": return WorkspaceSourceLocal + w.LocalFolder - } else if w.Image != "" { + case w.Image != "": return WorkspaceSourceImage + w.Image - } else if w.Container != "" { + case w.Container != "": return WorkspaceSourceContainer + w.Container } @@ -353,21 +355,23 @@ func (w WorkspaceSource) String() string { } func (w WorkspaceSource) Type() string { - if w.GitRepository != "" { - if w.GitPRReference != "" { + switch { + case w.GitRepository != "": + switch { + case w.GitPRReference != "": return WorkspaceSourceGit + "pr" - } else if w.GitBranch != "" { + case w.GitBranch != "": return WorkspaceSourceGit + "branch" - } else if w.GitCommit != "" { + case w.GitCommit != "": return WorkspaceSourceGit + "commit" } return WorkspaceSourceGit - } else if w.LocalFolder != "" { + case w.LocalFolder != "": return WorkspaceSourceLocal - } else if w.Image != "" { + case w.Image != "": return WorkspaceSourceImage - } else if w.Container != "" { + case w.Container != "": return WorkspaceSourceContainer } diff --git a/pkg/ssh/config.go b/pkg/ssh/config.go index a144b9655a..155e1bf674 100644 --- a/pkg/ssh/config.go +++ b/pkg/ssh/config.go @@ -433,13 +433,14 @@ func transformHostSection(path, host string, transform func(line string) string) endMarker := MarkerEndPrefix + host for configScanner.Scan() { text := configScanner.Text() - if strings.HasPrefix(text, startMarker) { + switch { + case strings.HasPrefix(text, startMarker): inSection = true - } else if strings.HasPrefix(text, endMarker) { + case strings.HasPrefix(text, endMarker): inSection = false - } else if !inSection { + case !inSection: newLines = append(newLines, text) - } else if inSection { + case inSection: text = transform(text) if text != "" { newLines = append(newLines, text) diff --git a/pkg/types/types.go b/pkg/types/types.go index 22105a3f9a..e5bc6a8018 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -176,46 +176,45 @@ func (e *OptionEnumArray) UnmarshalJSON(data []byte) error { if err != nil { return err } - switch obj := jsonObj.(type) { - case []any: - if len(obj) == 0 { - *e = OptionEnumArray{} - return nil + obj, ok := jsonObj.([]any) + if !ok { + return ErrUnsupportedType + } + if len(obj) == 0 { + *e = OptionEnumArray{} + return nil + } + ret := make([]OptionEnum, 0, len(obj)) + switch obj[0].(type) { + case string: + for _, v := range obj { + if s, ok := v.(string); ok { + ret = append(ret, OptionEnum{Value: s}) + } } - ret := make([]OptionEnum, 0, len(obj)) - switch obj[0].(type) { - case string: - for _, v := range obj { - if s, ok := v.(string); ok { - ret = append(ret, OptionEnum{Value: s}) - } + case map[string]any: + for _, v := range obj { + m, ok := v.(map[string]any) + if !ok { + return ErrUnsupportedType } - case map[string]any: - for _, v := range obj { - m, ok := v.(map[string]any) - if !ok { - return ErrUnsupportedType - } - value := "" - if s, ok := m["value"].(string); ok { - value = s - } - displayName := "" - if s, ok := m["displayName"].(string); ok { - displayName = s - } - ret = append(ret, OptionEnum{ - Value: value, - DisplayName: displayName, - }) + value := "" + if s, ok := m["value"].(string); ok { + value = s + } + displayName := "" + if s, ok := m["displayName"].(string); ok { + displayName = s } - default: - return ErrUnsupportedType + ret = append(ret, OptionEnum{ + Value: value, + DisplayName: displayName, + }) } - - *e = OptionEnumArray(ret) - return nil + default: + return ErrUnsupportedType } - return ErrUnsupportedType + *e = OptionEnumArray(ret) + return nil } diff --git a/pkg/workspace/list.go b/pkg/workspace/list.go index a0cde653e5..2fbd307a49 100644 --- a/pkg/workspace/list.go +++ b/pkg/workspace/list.go @@ -218,16 +218,17 @@ func listProWorkspacesForProvider( instances []managementv1.DevsyWorkspaceInstance err error ) - if providerConfig.IsProxyProvider() { + switch { + case providerConfig.IsProxyProvider(): instances, err = listInstancesProxyProvider( ctx, devsyConfig, provider, providerConfig, ) - } else if providerConfig.IsDaemonProvider() { + case providerConfig.IsDaemonProvider(): instances, err = listInstancesDaemonProvider(ctx, provider, owner) - } else { + default: return nil, fmt.Errorf("cannot list pro workspaces with provider %s", provider) } if err != nil {