From ae6adace501ecf15df705a9f9e114100651a61f2 Mon Sep 17 00:00:00 2001 From: cellarspoon Date: Sun, 12 Dec 2021 00:17:39 +0100 Subject: [PATCH] refactor: autocomplete package --- cli/app/backup.go | 14 ++--------- cli/app/check.go | 15 ++---------- cli/app/config.go | 15 ++---------- cli/app/cp.go | 16 ++---------- cli/app/deploy.go | 20 +++------------ cli/app/logs.go | 15 ++---------- cli/app/new.go | 22 +++-------------- cli/app/ps.go | 16 ++---------- cli/app/remove.go | 15 ++---------- cli/app/restart.go | 15 ++---------- cli/app/rollback.go | 14 ++--------- cli/app/secret.go | 15 ++---------- cli/app/undeploy.go | 17 ++----------- cli/app/upgrade.go | 14 ++--------- cli/app/version.go | 16 ++---------- cli/app/volume.go | 17 ++----------- cli/catalogue/generate.go | 14 ++--------- cli/recipe/lint.go | 15 ++---------- cli/recipe/sync.go | 15 ++---------- pkg/autocomplete/autocomplete.go | 42 ++++++++++++++++++++++++++++++++ 20 files changed, 83 insertions(+), 259 deletions(-) create mode 100644 pkg/autocomplete/autocomplete.go diff --git a/cli/app/backup.go b/cli/app/backup.go index 29a940240..26d2a7f6b 100644 --- a/cli/app/backup.go +++ b/cli/app/backup.go @@ -10,6 +10,7 @@ import ( "strings" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -72,16 +73,5 @@ var appBackupCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/check.go b/cli/app/check.go index 54e544ee2..1025d09bb 100644 --- a/cli/app/check.go +++ b/cli/app/check.go @@ -1,12 +1,12 @@ package app import ( - "fmt" "os" "path" "strings" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -49,16 +49,5 @@ var appCheckCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/config.go b/cli/app/config.go index e3bcc25df..846bb4c51 100644 --- a/cli/app/config.go +++ b/cli/app/config.go @@ -2,11 +2,11 @@ package app import ( "errors" - "fmt" "os" "os/exec" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" "github.com/AlecAivazis/survey/v2" "github.com/sirupsen/logrus" @@ -55,16 +55,5 @@ var appConfigCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/cp.go b/cli/app/cp.go index 3dd901744..00b9db8fe 100644 --- a/cli/app/cp.go +++ b/cli/app/cp.go @@ -1,12 +1,11 @@ package app import ( - "fmt" "os" "strings" "coopcloud.tech/abra/cli/internal" - "coopcloud.tech/abra/pkg/config" + "coopcloud.tech/abra/pkg/autocomplete" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) @@ -83,16 +82,5 @@ And if you want to copy that file back to your current working directory locally return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 60bbd0287..812ca9316 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -1,11 +1,8 @@ package app import ( - "fmt" - "coopcloud.tech/abra/cli/internal" - "coopcloud.tech/abra/pkg/config" - "github.com/sirupsen/logrus" + "coopcloud.tech/abra/pkg/autocomplete" "github.com/urfave/cli/v2" ) @@ -29,17 +26,6 @@ Chas mode ("--chaos") will deploy your local checkout of a recipe as-is, including unstaged changes and can be useful for live hacking and testing new recipes. `, - Action: internal.DeployAction, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + Action: internal.DeployAction, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/logs.go b/cli/app/logs.go index ae32475b5..04dfed5f1 100644 --- a/cli/app/logs.go +++ b/cli/app/logs.go @@ -7,8 +7,8 @@ import ( "sync" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" dockerClient "github.com/docker/docker/client" @@ -109,16 +109,5 @@ var appLogsCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/new.go b/cli/app/new.go index 7a6b9eaef..7ba144751 100644 --- a/cli/app/new.go +++ b/cli/app/new.go @@ -1,11 +1,8 @@ package app import ( - "fmt" - "coopcloud.tech/abra/cli/internal" - "coopcloud.tech/abra/pkg/catalogue" - "github.com/sirupsen/logrus" + "coopcloud.tech/abra/pkg/autocomplete" "github.com/urfave/cli/v2" ) @@ -41,18 +38,7 @@ var appNewCommand = &cli.Command{ internal.PassFlag, internal.SecretsFlag, }, - ArgsUsage: "", - Action: internal.NewAction, - BashComplete: func(c *cli.Context) { - catl, err := catalogue.ReadRecipeCatalogue() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for name := range catl { - fmt.Println(name) - } - }, + ArgsUsage: "", + Action: internal.NewAction, + BashComplete: autocomplete.RecipeNameComplete, } diff --git a/cli/app/ps.go b/cli/app/ps.go index 331398feb..0e9507d02 100644 --- a/cli/app/ps.go +++ b/cli/app/ps.go @@ -1,14 +1,13 @@ package app import ( - "fmt" "strings" "time" abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" "github.com/docker/cli/cli/command/formatter" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" @@ -33,6 +32,7 @@ var appPsCommand = &cli.Command{ Flags: []cli.Flag{ watchFlag, }, + BashComplete: autocomplete.AppNameComplete, Action: func(c *cli.Context) error { if !watch { showPSOutput(c) @@ -45,18 +45,6 @@ var appPsCommand = &cli.Command{ time.Sleep(2 * time.Second) } }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, } // showPSOutput renders ps output. diff --git a/cli/app/remove.go b/cli/app/remove.go index 6533a13b9..25a7b57b3 100644 --- a/cli/app/remove.go +++ b/cli/app/remove.go @@ -5,8 +5,8 @@ import ( "os" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" stack "coopcloud.tech/abra/pkg/upstream/stack" "github.com/AlecAivazis/survey/v2" "github.com/docker/docker/api/types" @@ -149,16 +149,5 @@ var appRemoveCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/restart.go b/cli/app/restart.go index 520ce15ee..2b0d7d651 100644 --- a/cli/app/restart.go +++ b/cli/app/restart.go @@ -6,8 +6,8 @@ import ( "time" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" containerPkg "coopcloud.tech/abra/pkg/container" "github.com/docker/docker/api/types/filters" "github.com/sirupsen/logrus" @@ -54,16 +54,5 @@ var appRestartCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/rollback.go b/cli/app/rollback.go index f2c8819dc..254235878 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -3,6 +3,7 @@ package app import ( "fmt" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/recipe" @@ -38,18 +39,7 @@ Chas mode ("--chaos") will deploy your local checkout of a recipe as-is, including unstaged changes and can be useful for live hacking and testing new recipes. `, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, Action: func(c *cli.Context) error { app := internal.ValidateApp(c) stackName := app.StackName() diff --git a/cli/app/secret.go b/cli/app/secret.go index abbbb35c0..5bafcc515 100644 --- a/cli/app/secret.go +++ b/cli/app/secret.go @@ -8,8 +8,8 @@ import ( abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/secret" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" @@ -252,18 +252,7 @@ var appSecretLsCommand = &cli.Command{ table.Render() return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } var appSecretCommand = &cli.Command{ diff --git a/cli/app/undeploy.go b/cli/app/undeploy.go index a016db101..4bdd28252 100644 --- a/cli/app/undeploy.go +++ b/cli/app/undeploy.go @@ -1,11 +1,9 @@ package app import ( - "fmt" - "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" stack "coopcloud.tech/abra/pkg/upstream/stack" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -51,16 +49,5 @@ volumes as eligiblef or pruning once undeployed. return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index e07f5bba4..62a8a419b 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -4,6 +4,7 @@ import ( "fmt" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/config" @@ -169,16 +170,5 @@ recipes. return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/version.go b/cli/app/version.go index 427540b71..51866c836 100644 --- a/cli/app/version.go +++ b/cli/app/version.go @@ -1,14 +1,13 @@ package app import ( - "fmt" "strings" abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/upstream/stack" "github.com/docker/distribution/reference" "github.com/sirupsen/logrus" @@ -89,16 +88,5 @@ Cloud recipe version. return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } diff --git a/cli/app/volume.go b/cli/app/volume.go index 6e2311f51..10585bb15 100644 --- a/cli/app/volume.go +++ b/cli/app/volume.go @@ -1,12 +1,10 @@ package app import ( - "fmt" - abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/config" "github.com/AlecAivazis/survey/v2" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -80,18 +78,7 @@ var appVolumeRemoveCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppNames() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for _, a := range appNames { - fmt.Println(a) - } - }, + BashComplete: autocomplete.AppNameComplete, } var appVolumeCommand = &cli.Command{ diff --git a/cli/catalogue/generate.go b/cli/catalogue/generate.go index ea324cf86..a7b879b6c 100644 --- a/cli/catalogue/generate.go +++ b/cli/catalogue/generate.go @@ -9,6 +9,7 @@ import ( "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/config" gitPkg "coopcloud.tech/abra/pkg/git" @@ -267,16 +268,5 @@ A new catalogue copy can be published to the recipes repository by passing the return nil }, - BashComplete: func(c *cli.Context) { - catl, err := catalogue.ReadRecipeCatalogue() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for name := range catl { - fmt.Println(name) - } - }, + BashComplete: autocomplete.RecipeNameComplete, } diff --git a/cli/recipe/lint.go b/cli/recipe/lint.go index c02200d31..af3d308fe 100644 --- a/cli/recipe/lint.go +++ b/cli/recipe/lint.go @@ -7,7 +7,7 @@ import ( "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" - "coopcloud.tech/abra/pkg/catalogue" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" "coopcloud.tech/tagcmp" "github.com/docker/distribution/reference" @@ -98,16 +98,5 @@ var recipeLintCommand = &cli.Command{ return nil }, - BashComplete: func(c *cli.Context) { - catl, err := catalogue.ReadRecipeCatalogue() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for name := range catl { - fmt.Println(name) - } - }, + BashComplete: autocomplete.RecipeNameComplete, } diff --git a/cli/recipe/sync.go b/cli/recipe/sync.go index 590537294..f2ff73aee 100644 --- a/cli/recipe/sync.go +++ b/cli/recipe/sync.go @@ -6,7 +6,7 @@ import ( "strconv" "coopcloud.tech/abra/cli/internal" - "coopcloud.tech/abra/pkg/catalogue" + "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/config" "coopcloud.tech/tagcmp" "github.com/AlecAivazis/survey/v2" @@ -181,16 +181,5 @@ You may invoke this command in "wizard" mode and be prompted for input: return nil }, - BashComplete: func(c *cli.Context) { - catl, err := catalogue.ReadRecipeCatalogue() - if err != nil { - logrus.Warn(err) - } - if c.NArg() > 0 { - return - } - for name := range catl { - fmt.Println(name) - } - }, + BashComplete: autocomplete.RecipeNameComplete, } diff --git a/pkg/autocomplete/autocomplete.go b/pkg/autocomplete/autocomplete.go new file mode 100644 index 000000000..e8675680a --- /dev/null +++ b/pkg/autocomplete/autocomplete.go @@ -0,0 +1,42 @@ +package autocomplete + +import ( + "fmt" + + "coopcloud.tech/abra/pkg/catalogue" + "coopcloud.tech/abra/pkg/config" + "github.com/sirupsen/logrus" + "github.com/urfave/cli/v2" +) + +// AppNameComplete copletes app names +func AppNameComplete(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + logrus.Warn(err) + } + + if c.NArg() > 0 { + return + } + + for _, a := range appNames { + fmt.Println(a) + } +} + +// RecipeNameComplete completes recipe names +func RecipeNameComplete(c *cli.Context) { + catl, err := catalogue.ReadRecipeCatalogue() + if err != nil { + logrus.Warn(err) + } + + if c.NArg() > 0 { + return + } + + for name := range catl { + fmt.Println(name) + } +}