From 4c216fdf40b79359f9672fca58b5bbb667f34195 Mon Sep 17 00:00:00 2001 From: knoflook Date: Tue, 7 Sep 2021 16:57:39 +0200 Subject: [PATCH 1/3] feat: auto-complete app and recipe names --- cli/app/list.go | 1 + cli/app/logs.go | 13 +++++++++++++ cli/app/new.go | 12 ++++++++++++ cli/app/ps.go | 14 ++++++++++++++ cli/app/remove.go | 12 ++++++++++++ cli/app/undeploy.go | 14 ++++++++++++++ cli/app/volume.go | 14 ++++++++++++++ pkg/config/app.go | 40 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 120 insertions(+) diff --git a/cli/app/list.go b/cli/app/list.go index 0de7fa42..eb91f74e 100644 --- a/cli/app/list.go +++ b/cli/app/list.go @@ -95,6 +95,7 @@ can take some time. } table.Render() + return nil }, } diff --git a/cli/app/logs.go b/cli/app/logs.go index fc5c9bca..551361e4 100644 --- a/cli/app/logs.go +++ b/cli/app/logs.go @@ -9,6 +9,7 @@ import ( "coopcloud.tech/abra/cli/internal" "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,4 +110,16 @@ var appLogsCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppsNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/new.go b/cli/app/new.go index d9db2601..9838fde2 100644 --- a/cli/app/new.go +++ b/cli/app/new.go @@ -78,6 +78,18 @@ var appNewCommand = &cli.Command{ }, ArgsUsage: "", Action: action, + BashComplete: func(c *cli.Context) { + catl, err := catalogue.ReadRecipeCatalogue() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for name, _ := range catl { + fmt.Println(name) + } + }, } // getRecipeMeta retrieves the recipe metadata from the recipe catalogue. diff --git a/cli/app/ps.go b/cli/app/ps.go index c1259075..1883fc11 100644 --- a/cli/app/ps.go +++ b/cli/app/ps.go @@ -2,11 +2,13 @@ package app import ( "context" + "fmt" "strings" abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" "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" @@ -54,4 +56,16 @@ var appPsCommand = &cli.Command{ table.Render() return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppsNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/remove.go b/cli/app/remove.go index 613ed014..737d1402 100644 --- a/cli/app/remove.go +++ b/cli/app/remove.go @@ -155,4 +155,16 @@ var appRemoveCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppsNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/undeploy.go b/cli/app/undeploy.go index 75196b09..4393ff84 100644 --- a/cli/app/undeploy.go +++ b/cli/app/undeploy.go @@ -2,10 +2,12 @@ package app import ( "context" + "fmt" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/client" stack "coopcloud.tech/abra/pkg/client/stack" + "coopcloud.tech/abra/pkg/config" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) @@ -35,4 +37,16 @@ volumes as eligiblef or pruning once undeployed. return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetDeployedApps() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/volume.go b/cli/app/volume.go index 8df975b8..0128e4c0 100644 --- a/cli/app/volume.go +++ b/cli/app/volume.go @@ -2,10 +2,12 @@ package app import ( "context" + "fmt" abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/client" + "coopcloud.tech/abra/pkg/config" "github.com/AlecAivazis/survey/v2" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -81,6 +83,18 @@ var appVolumeRemoveCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppsNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } var appVolumeCommand = &cli.Command{ diff --git a/pkg/config/app.go b/pkg/config/app.go index 8049b845..bead851a 100644 --- a/pkg/config/app.go +++ b/pkg/config/app.go @@ -177,6 +177,46 @@ func GetApps(appFiles AppFiles) ([]App, error) { return apps, nil } +func GetAppsNames() ([]string, error) { + appFiles, err := LoadAppFiles("") + if err != nil { + return nil, err + } + apps, err := GetApps(appFiles) + if err != nil { + return nil, err + } + + var appNames []string + for _, app := range apps { + appNames = append(appNames, app.Name) + } + + return appNames, nil +} + +func GetDeployedApps() ([]string, error) { + appFiles, err := LoadAppFiles("") + if err != nil { + return nil, err + } + apps, err := GetApps(appFiles) + if err != nil { + return nil, err + } + statuses, err := GetAppStatuses(appFiles) + + var appNames []string + for _, app := range apps { + status := statuses[app.StackName()] + if status == "deployed" { + appNames = append(appNames, app.Name) + } + } + + return appNames, nil +} + // CopyAppEnvSample copies the example env file for the app into the users env files func CopyAppEnvSample(appType, appName, server string) error { envSamplePath := path.Join(ABRA_DIR, "apps", appType, ".env.sample") From cf2653fef859f4ec1bd2730c9d0021a0dc5a2e15 Mon Sep 17 00:00:00 2001 From: knoflook Date: Wed, 8 Sep 2021 13:43:55 +0200 Subject: [PATCH 2/3] refactor: drop unused function, rename GetAppsNames --- cli/app/logs.go | 2 +- cli/app/ps.go | 2 +- cli/app/remove.go | 2 +- cli/app/undeploy.go | 2 +- cli/app/volume.go | 2 +- pkg/config/app.go | 28 +++------------------------- 6 files changed, 8 insertions(+), 30 deletions(-) diff --git a/cli/app/logs.go b/cli/app/logs.go index 551361e4..e099cec8 100644 --- a/cli/app/logs.go +++ b/cli/app/logs.go @@ -111,7 +111,7 @@ var appLogsCommand = &cli.Command{ return nil }, BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppsNames() + appNames, err := config.GetAppNames() if err != nil { return } diff --git a/cli/app/ps.go b/cli/app/ps.go index 1883fc11..d840802d 100644 --- a/cli/app/ps.go +++ b/cli/app/ps.go @@ -57,7 +57,7 @@ var appPsCommand = &cli.Command{ return nil }, BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppsNames() + appNames, err := config.GetAppNames() if err != nil { return } diff --git a/cli/app/remove.go b/cli/app/remove.go index 737d1402..30accbc7 100644 --- a/cli/app/remove.go +++ b/cli/app/remove.go @@ -156,7 +156,7 @@ var appRemoveCommand = &cli.Command{ return nil }, BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppsNames() + appNames, err := config.GetAppNames() if err != nil { return } diff --git a/cli/app/undeploy.go b/cli/app/undeploy.go index 4393ff84..0b3d3f80 100644 --- a/cli/app/undeploy.go +++ b/cli/app/undeploy.go @@ -38,7 +38,7 @@ volumes as eligiblef or pruning once undeployed. return nil }, BashComplete: func(c *cli.Context) { - appNames, err := config.GetDeployedApps() + appNames, err := config.GetAppNames() if err != nil { return } diff --git a/cli/app/volume.go b/cli/app/volume.go index 0128e4c0..cb562ef2 100644 --- a/cli/app/volume.go +++ b/cli/app/volume.go @@ -84,7 +84,7 @@ var appVolumeRemoveCommand = &cli.Command{ return nil }, BashComplete: func(c *cli.Context) { - appNames, err := config.GetAppsNames() + appNames, err := config.GetAppNames() if err != nil { return } diff --git a/pkg/config/app.go b/pkg/config/app.go index bead851a..3d6b65ed 100644 --- a/pkg/config/app.go +++ b/pkg/config/app.go @@ -177,14 +177,14 @@ func GetApps(appFiles AppFiles) ([]App, error) { return apps, nil } -func GetAppsNames() ([]string, error) { +func GetAppNames() ([]string, error) { appFiles, err := LoadAppFiles("") if err != nil { - return nil, err + return []string{}, err } apps, err := GetApps(appFiles) if err != nil { - return nil, err + return []string{}, err } var appNames []string @@ -195,28 +195,6 @@ func GetAppsNames() ([]string, error) { return appNames, nil } -func GetDeployedApps() ([]string, error) { - appFiles, err := LoadAppFiles("") - if err != nil { - return nil, err - } - apps, err := GetApps(appFiles) - if err != nil { - return nil, err - } - statuses, err := GetAppStatuses(appFiles) - - var appNames []string - for _, app := range apps { - status := statuses[app.StackName()] - if status == "deployed" { - appNames = append(appNames, app.Name) - } - } - - return appNames, nil -} - // CopyAppEnvSample copies the example env file for the app into the users env files func CopyAppEnvSample(appType, appName, server string) error { envSamplePath := path.Join(ABRA_DIR, "apps", appType, ".env.sample") From 511619722f87b255f7f73c1530cd418a67754179 Mon Sep 17 00:00:00 2001 From: knoflook Date: Wed, 8 Sep 2021 13:59:55 +0200 Subject: [PATCH 3/3] feat: autocomplete recipe names for more abra commands --- cli/app/backup.go | 12 ++++++++++++ cli/app/check.go | 13 +++++++++++++ cli/app/config.go | 14 ++++++++++++++ cli/app/deploy.go | 12 ++++++++++++ cli/app/rollback.go | 19 ++++++++++++++++++- cli/app/secret.go | 13 +++++++++++++ cli/app/version.go | 12 ++++++++++++ cli/recipe/lint.go | 13 +++++++++++++ 8 files changed, 107 insertions(+), 1 deletion(-) diff --git a/cli/app/backup.go b/cli/app/backup.go index 966cde74..6b9454d7 100644 --- a/cli/app/backup.go +++ b/cli/app/backup.go @@ -75,4 +75,16 @@ var appBackupCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/check.go b/cli/app/check.go index 0bce858b..ba4a3457 100644 --- a/cli/app/check.go +++ b/cli/app/check.go @@ -1,6 +1,7 @@ package app import ( + "fmt" "os" "path" "strings" @@ -48,4 +49,16 @@ var appCheckCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/config.go b/cli/app/config.go index cdb1e1c4..a58a87d2 100644 --- a/cli/app/config.go +++ b/cli/app/config.go @@ -1,10 +1,12 @@ package app import ( + "fmt" "os" "os/exec" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/config" "github.com/AlecAivazis/survey/v2" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -38,4 +40,16 @@ var appConfigCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 5eed8c3f..4c08dea0 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -54,4 +54,16 @@ var appDeployCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/rollback.go b/cli/app/rollback.go index bd7dca09..61bb04bc 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -1,10 +1,27 @@ package app -import "github.com/urfave/cli/v2" +import ( + "fmt" + + "coopcloud.tech/abra/pkg/config" + "github.com/urfave/cli/v2" +) var appRollbackCommand = &cli.Command{ Name: "rollback", Usage: "Roll an app back to a previous version", Aliases: []string{"b"}, ArgsUsage: "[]", + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/app/secret.go b/cli/app/secret.go index 2855befa..8200b674 100644 --- a/cli/app/secret.go +++ b/cli/app/secret.go @@ -10,6 +10,7 @@ import ( abraFormatter "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" "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" @@ -234,6 +235,18 @@ var appSecretLsCommand = &cli.Command{ table.Render() return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } var appSecretCommand = &cli.Command{ diff --git a/cli/app/version.go b/cli/app/version.go index 94354186..6c7f4a72 100644 --- a/cli/app/version.go +++ b/cli/app/version.go @@ -104,4 +104,16 @@ var appVersionCommand = &cli.Command{ table.Render() return nil }, + BashComplete: func(c *cli.Context) { + appNames, err := config.GetAppNames() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for _, a := range appNames { + fmt.Println(a) + } + }, } diff --git a/cli/recipe/lint.go b/cli/recipe/lint.go index 8a34329f..4fe0ec0a 100644 --- a/cli/recipe/lint.go +++ b/cli/recipe/lint.go @@ -7,6 +7,7 @@ import ( "coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/config" "coopcloud.tech/tagcmp" "github.com/docker/distribution/reference" @@ -90,4 +91,16 @@ var recipeLintCommand = &cli.Command{ return nil }, + BashComplete: func(c *cli.Context) { + catl, err := catalogue.ReadRecipeCatalogue() + if err != nil { + return + } + if c.NArg() > 0 { + return + } + for name, _ := range catl { + fmt.Println(name) + } + }, }