fix: more robust <app> autocomplete + error handling
All checks were successful
continuous-integration/drone/push Build is passing

See toolshed/organising#652
This commit is contained in:
decentral1se 2024-12-28 22:22:13 +01:00
parent 8ac31330be
commit fab93a559a
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
6 changed files with 38 additions and 32 deletions

View File

@ -52,8 +52,8 @@ Please note, "upgrade"/"rollback" do not support chaos operations.`,
case 1: case 1:
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.RecipeVersionComplete(app.Recipe.Name) return autocomplete.RecipeVersionComplete(app.Recipe.Name)
default: default:

View File

@ -2,6 +2,7 @@ package app
import ( import (
"context" "context"
"fmt"
"io" "io"
"os" "os"
"slices" "slices"
@ -37,8 +38,8 @@ var AppLogsCommand = &cobra.Command{
case 1: case 1:
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.ServiceNameComplete(app.Name) return autocomplete.ServiceNameComplete(app.Name)
default: default:

View File

@ -46,8 +46,8 @@ beforehand.`,
case 1: case 1:
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.RecipeVersionComplete(app.Recipe.Name) return autocomplete.RecipeVersionComplete(app.Recipe.Name)
default: default:

View File

@ -34,8 +34,8 @@ var AppSecretGenerateCommand = &cobra.Command{
case 1: case 1:
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.SecretComplete(app.Recipe.Name) return autocomplete.SecretComplete(app.Recipe.Name)
default: default:
@ -159,8 +159,8 @@ environment. Typically, you can let Abra generate them for you on app creation
case 1: case 1:
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.SecretComplete(app.Recipe.Name) return autocomplete.SecretComplete(app.Recipe.Name)
default: default:
@ -245,8 +245,8 @@ var AppSecretRmCommand = &cobra.Command{
if !rmAllSecrets { if !rmAllSecrets {
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.SecretComplete(app.Recipe.Name) return autocomplete.SecretComplete(app.Recipe.Name)
} }

View File

@ -40,8 +40,8 @@ beforehand.`,
case 1: case 1:
app, err := appPkg.Get(args[0]) app, err := appPkg.Get(args[0])
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) errMsg := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveDefault return []string{errMsg}, cobra.ShellCompDirectiveError
} }
return autocomplete.RecipeVersionComplete(app.Recipe.Name) return autocomplete.RecipeVersionComplete(app.Recipe.Name)
default: default:

View File

@ -1,21 +1,26 @@
package autocomplete package autocomplete
import ( import (
"fmt"
"sort" "sort"
"coopcloud.tech/abra/pkg/app" "coopcloud.tech/abra/pkg/app"
appPkg "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app"
"coopcloud.tech/abra/pkg/log"
"coopcloud.tech/abra/pkg/recipe" "coopcloud.tech/abra/pkg/recipe"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
// AppNameComplete copletes app names. // AppNameComplete copletes app names.
func AppNameComplete() ([]string, cobra.ShellCompDirective) { func AppNameComplete() ([]string, cobra.ShellCompDirective) {
appNames, err := app.GetAppNames() appFiles, err := app.LoadAppFiles("")
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
}
var appNames []string
for appName := range appFiles {
appNames = append(appNames, appName)
} }
return appNames, cobra.ShellCompDirectiveDefault return appNames, cobra.ShellCompDirectiveDefault
@ -24,8 +29,8 @@ func AppNameComplete() ([]string, cobra.ShellCompDirective) {
func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) { func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
serviceNames, err := app.GetAppServiceNames(appName) serviceNames, err := app.GetAppServiceNames(appName)
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
return serviceNames, cobra.ShellCompDirectiveDefault return serviceNames, cobra.ShellCompDirectiveDefault
@ -35,8 +40,8 @@ func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
func RecipeNameComplete() ([]string, cobra.ShellCompDirective) { func RecipeNameComplete() ([]string, cobra.ShellCompDirective) {
catl, err := recipe.ReadRecipeCatalogue(false) catl, err := recipe.ReadRecipeCatalogue(false)
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
var recipeNames []string var recipeNames []string
@ -51,8 +56,8 @@ func RecipeNameComplete() ([]string, cobra.ShellCompDirective) {
func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirective) { func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
catl, err := recipe.ReadRecipeCatalogue(false) catl, err := recipe.ReadRecipeCatalogue(false)
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
var recipeVersions []string var recipeVersions []string
@ -69,8 +74,8 @@ func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirectiv
func ServerNameComplete() ([]string, cobra.ShellCompDirective) { func ServerNameComplete() ([]string, cobra.ShellCompDirective) {
files, err := app.LoadAppFiles("") files, err := app.LoadAppFiles("")
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
var serverNames []string var serverNames []string
@ -85,14 +90,14 @@ func ServerNameComplete() ([]string, cobra.ShellCompDirective) {
func CommandNameComplete(appName string) ([]string, cobra.ShellCompDirective) { func CommandNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
app, err := app.Get(appName) app, err := app.Get(appName)
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
cmdNames, err := appPkg.ReadAbraShCmdNames(app.Recipe.AbraShPath) cmdNames, err := appPkg.ReadAbraShCmdNames(app.Recipe.AbraShPath)
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
sort.Strings(cmdNames) sort.Strings(cmdNames)
@ -106,8 +111,8 @@ func SecretComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
config, err := r.GetComposeConfig(nil) config, err := r.GetComposeConfig(nil)
if err != nil { if err != nil {
log.Debugf("autocomplete failed: %s", err) err := fmt.Sprintf("autocomplete failed: %s", err)
return nil, cobra.ShellCompDirectiveError return []string{err}, cobra.ShellCompDirectiveError
} }
var secretNames []string var secretNames []string