add bash completion for abra cmd
This commit is contained in:
parent
316b59b465
commit
7b6134f35e
|
@ -10,6 +10,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"coopcloud.tech/abra/cli/internal"
|
"coopcloud.tech/abra/cli/internal"
|
||||||
|
"coopcloud.tech/abra/pkg/app"
|
||||||
"coopcloud.tech/abra/pkg/autocomplete"
|
"coopcloud.tech/abra/pkg/autocomplete"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
"coopcloud.tech/abra/pkg/config"
|
||||||
|
@ -45,6 +46,17 @@ Example:
|
||||||
},
|
},
|
||||||
Before: internal.SubCommandBefore,
|
Before: internal.SubCommandBefore,
|
||||||
Subcommands: []cli.Command{appCmdListCommand},
|
Subcommands: []cli.Command{appCmdListCommand},
|
||||||
|
BashComplete: func(ctx *cli.Context) {
|
||||||
|
args := ctx.Args()
|
||||||
|
switch len(args) {
|
||||||
|
case 0:
|
||||||
|
autocomplete.AppNameComplete(ctx)
|
||||||
|
case 1:
|
||||||
|
autocomplete.ServiceNameComplete(args.Get(0))
|
||||||
|
case 2:
|
||||||
|
cmdNameComplete(args.Get(0))
|
||||||
|
}
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
app := internal.ValidateApp(c)
|
app := internal.ValidateApp(c)
|
||||||
|
|
||||||
|
@ -187,6 +199,20 @@ func parseCmdArgs(args []string, isLocal bool) (bool, string) {
|
||||||
return hasCmdArgs, parsedCmdArgs
|
return hasCmdArgs, parsedCmdArgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cmdNameComplete(appName string) {
|
||||||
|
app, err := app.Get(appName)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cmdNames, _ := getShCmdNames(app)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, n := range cmdNames {
|
||||||
|
fmt.Println(n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var appCmdListCommand = cli.Command{
|
var appCmdListCommand = cli.Command{
|
||||||
Name: "list",
|
Name: "list",
|
||||||
Aliases: []string{"ls"},
|
Aliases: []string{"ls"},
|
||||||
|
@ -222,13 +248,11 @@ var appCmdListCommand = cli.Command{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, app.Recipe, "abra.sh")
|
cmdNames, err := getShCmdNames(app)
|
||||||
cmdNames, err := config.ReadAbraShCmdNames(abraShPath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Strings(cmdNames)
|
|
||||||
for _, cmdName := range cmdNames {
|
for _, cmdName := range cmdNames {
|
||||||
fmt.Println(cmdName)
|
fmt.Println(cmdName)
|
||||||
}
|
}
|
||||||
|
@ -236,3 +260,14 @@ var appCmdListCommand = cli.Command{
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getShCmdNames(app config.App) ([]string, error) {
|
||||||
|
abraShPath := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, app.Recipe, "abra.sh")
|
||||||
|
cmdNames, err := config.ReadAbraShCmdNames(abraShPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(cmdNames)
|
||||||
|
return cmdNames, nil
|
||||||
|
}
|
||||||
|
|
|
@ -25,6 +25,16 @@ func AppNameComplete(c *cli.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ServiceNameComplete(appName string) {
|
||||||
|
serviceNames, err := config.GetAppServiceNames(appName)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, s := range serviceNames {
|
||||||
|
fmt.Println(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// RecipeNameComplete completes recipe names.
|
// RecipeNameComplete completes recipe names.
|
||||||
func RecipeNameComplete(c *cli.Context) {
|
func RecipeNameComplete(c *cli.Context) {
|
||||||
catl, err := recipe.ReadRecipeCatalogue(false)
|
catl, err := recipe.ReadRecipeCatalogue(false)
|
||||||
|
|
Loading…
Reference in New Issue