From fab93a559a65a46ae97fec513b1e0030c4648be5 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sat, 28 Dec 2024 22:22:13 +0100 Subject: [PATCH] fix: more robust autocomplete + error handling See https://git.coopcloud.tech/toolshed/organising/issues/652 --- cli/app/deploy.go | 4 ++-- cli/app/logs.go | 5 ++-- cli/app/rollback.go | 4 ++-- cli/app/secret.go | 12 +++++----- cli/app/upgrade.go | 4 ++-- pkg/autocomplete/autocomplete.go | 41 ++++++++++++++++++-------------- 6 files changed, 38 insertions(+), 32 deletions(-) diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 3fc06e16..6a8738fe 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -52,8 +52,8 @@ Please note, "upgrade"/"rollback" do not support chaos operations.`, case 1: app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.RecipeVersionComplete(app.Recipe.Name) default: diff --git a/cli/app/logs.go b/cli/app/logs.go index 9b2ff18b..b0cfa269 100644 --- a/cli/app/logs.go +++ b/cli/app/logs.go @@ -2,6 +2,7 @@ package app import ( "context" + "fmt" "io" "os" "slices" @@ -37,8 +38,8 @@ var AppLogsCommand = &cobra.Command{ case 1: app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.ServiceNameComplete(app.Name) default: diff --git a/cli/app/rollback.go b/cli/app/rollback.go index da4057a6..3535a393 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -46,8 +46,8 @@ beforehand.`, case 1: app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.RecipeVersionComplete(app.Recipe.Name) default: diff --git a/cli/app/secret.go b/cli/app/secret.go index 5931c344..9364a6da 100644 --- a/cli/app/secret.go +++ b/cli/app/secret.go @@ -34,8 +34,8 @@ var AppSecretGenerateCommand = &cobra.Command{ case 1: app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.SecretComplete(app.Recipe.Name) default: @@ -159,8 +159,8 @@ environment. Typically, you can let Abra generate them for you on app creation case 1: app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.SecretComplete(app.Recipe.Name) default: @@ -245,8 +245,8 @@ var AppSecretRmCommand = &cobra.Command{ if !rmAllSecrets { app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.SecretComplete(app.Recipe.Name) } diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index 2756dae6..7e5624cf 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -40,8 +40,8 @@ beforehand.`, case 1: app, err := appPkg.Get(args[0]) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveDefault + errMsg := fmt.Sprintf("autocomplete failed: %s", err) + return []string{errMsg}, cobra.ShellCompDirectiveError } return autocomplete.RecipeVersionComplete(app.Recipe.Name) default: diff --git a/pkg/autocomplete/autocomplete.go b/pkg/autocomplete/autocomplete.go index dc4c6a6f..93f8eb9d 100644 --- a/pkg/autocomplete/autocomplete.go +++ b/pkg/autocomplete/autocomplete.go @@ -1,21 +1,26 @@ package autocomplete import ( + "fmt" "sort" "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app" - "coopcloud.tech/abra/pkg/log" "coopcloud.tech/abra/pkg/recipe" "github.com/spf13/cobra" ) // AppNameComplete copletes app names. func AppNameComplete() ([]string, cobra.ShellCompDirective) { - appNames, err := app.GetAppNames() + appFiles, err := app.LoadAppFiles("") if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError + } + + var appNames []string + for appName := range appFiles { + appNames = append(appNames, appName) } return appNames, cobra.ShellCompDirectiveDefault @@ -24,8 +29,8 @@ func AppNameComplete() ([]string, cobra.ShellCompDirective) { func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) { serviceNames, err := app.GetAppServiceNames(appName) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } return serviceNames, cobra.ShellCompDirectiveDefault @@ -35,8 +40,8 @@ func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) { func RecipeNameComplete() ([]string, cobra.ShellCompDirective) { catl, err := recipe.ReadRecipeCatalogue(false) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } var recipeNames []string @@ -51,8 +56,8 @@ func RecipeNameComplete() ([]string, cobra.ShellCompDirective) { func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirective) { catl, err := recipe.ReadRecipeCatalogue(false) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } var recipeVersions []string @@ -69,8 +74,8 @@ func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirectiv func ServerNameComplete() ([]string, cobra.ShellCompDirective) { files, err := app.LoadAppFiles("") if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } var serverNames []string @@ -85,14 +90,14 @@ func ServerNameComplete() ([]string, cobra.ShellCompDirective) { func CommandNameComplete(appName string) ([]string, cobra.ShellCompDirective) { app, err := app.Get(appName) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } cmdNames, err := appPkg.ReadAbraShCmdNames(app.Recipe.AbraShPath) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } sort.Strings(cmdNames) @@ -106,8 +111,8 @@ func SecretComplete(recipeName string) ([]string, cobra.ShellCompDirective) { config, err := r.GetComposeConfig(nil) if err != nil { - log.Debugf("autocomplete failed: %s", err) - return nil, cobra.ShellCompDirectiveError + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError } var secretNames []string