feat: auto-complete app and recipe names #89

Merged
decentral1se merged 3 commits from knoflook/abra:main into main 2021-09-08 12:16:42 +00:00
16 changed files with 205 additions and 1 deletions

View File

@ -75,4 +75,16 @@ var appBackupCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -1,6 +1,7 @@
package app package app
import ( import (
"fmt"
"os" "os"
"path" "path"
"strings" "strings"
@ -48,4 +49,16 @@ var appCheckCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -1,10 +1,12 @@
package app package app
import ( import (
"fmt"
"os" "os"
"os/exec" "os/exec"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/config"
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -38,4 +40,16 @@ var appConfigCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -54,4 +54,16 @@ var appDeployCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -95,6 +95,7 @@ can take some time.
} }
table.Render() table.Render()
return nil return nil
}, },
} }

View File

@ -9,6 +9,7 @@ import (
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/config"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
dockerClient "github.com/docker/docker/client" dockerClient "github.com/docker/docker/client"
@ -109,4 +110,16 @@ var appLogsCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -78,6 +78,18 @@ var appNewCommand = &cli.Command{
}, },
ArgsUsage: "<recipe>", ArgsUsage: "<recipe>",
Action: action, 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. // getRecipeMeta retrieves the recipe metadata from the recipe catalogue.

View File

@ -2,11 +2,13 @@ package app
import ( import (
"context" "context"
"fmt"
"strings" "strings"
abraFormatter "coopcloud.tech/abra/cli/formatter" abraFormatter "coopcloud.tech/abra/cli/formatter"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/config"
"github.com/docker/cli/cli/command/formatter" "github.com/docker/cli/cli/command/formatter"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
@ -54,4 +56,16 @@ var appPsCommand = &cli.Command{
table.Render() table.Render()
return nil 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)
}
},
} }

View File

@ -155,4 +155,16 @@ var appRemoveCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -1,10 +1,27 @@
package app package app
import "github.com/urfave/cli/v2" import (
"fmt"
"coopcloud.tech/abra/pkg/config"
"github.com/urfave/cli/v2"
)
var appRollbackCommand = &cli.Command{ var appRollbackCommand = &cli.Command{
Name: "rollback", Name: "rollback",
Usage: "Roll an app back to a previous version", Usage: "Roll an app back to a previous version",
Aliases: []string{"b"}, Aliases: []string{"b"},
ArgsUsage: "[<version>]", ArgsUsage: "[<version>]",
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)
}
},
} }

View File

@ -10,6 +10,7 @@ import (
abraFormatter "coopcloud.tech/abra/cli/formatter" abraFormatter "coopcloud.tech/abra/cli/formatter"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/secret" "coopcloud.tech/abra/pkg/secret"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
@ -234,6 +235,18 @@ var appSecretLsCommand = &cli.Command{
table.Render() table.Render()
return nil 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{ var appSecretCommand = &cli.Command{

View File

@ -2,10 +2,12 @@ package app
import ( import (
"context" "context"
"fmt"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
stack "coopcloud.tech/abra/pkg/client/stack" stack "coopcloud.tech/abra/pkg/client/stack"
"coopcloud.tech/abra/pkg/config"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
) )
@ -35,4 +37,16 @@ volumes as eligiblef or pruning once undeployed.
return nil return nil
}, },
BashComplete: func(c *cli.Context) {
appNames, err := config.GetAppNames()
knoflook marked this conversation as resolved Outdated

Given coop-cloud/abra#87 (comment) I guess we can just do config.GetAppsNames and call it a day?

Given https://git.coopcloud.tech/coop-cloud/abra/issues/87#issuecomment-8528 I guess we can just do `config.GetAppsNames` and call it a day?
if err != nil {
return
}
if c.NArg() > 0 {
return
}
for _, a := range appNames {
fmt.Println(a)
}
},
} }

View File

@ -104,4 +104,16 @@ var appVersionCommand = &cli.Command{
table.Render() table.Render()
return nil 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)
}
},
} }

View File

@ -2,10 +2,12 @@ package app
import ( import (
"context" "context"
"fmt"
abraFormatter "coopcloud.tech/abra/cli/formatter" abraFormatter "coopcloud.tech/abra/cli/formatter"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/config"
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -81,6 +83,18 @@ var appVolumeRemoveCommand = &cli.Command{
return nil 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 appVolumeCommand = &cli.Command{ var appVolumeCommand = &cli.Command{

View File

@ -7,6 +7,7 @@ import (
"coopcloud.tech/abra/cli/formatter" "coopcloud.tech/abra/cli/formatter"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/catalogue"
"coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/config"
"coopcloud.tech/tagcmp" "coopcloud.tech/tagcmp"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
@ -90,4 +91,16 @@ var recipeLintCommand = &cli.Command{
return nil 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)
}
},
} }

View File

@ -177,6 +177,24 @@ func GetApps(appFiles AppFiles) ([]App, error) {
return apps, nil return apps, nil
} }
func GetAppNames() ([]string, error) {
knoflook marked this conversation as resolved Outdated

Maybe a nitpick but GetAppNames is easier to say 😀 (ignore ofc if you don't mind it)

Maybe a nitpick but `GetAppNames` is easier to say 😀 (ignore ofc if you don't mind it)
appFiles, err := LoadAppFiles("")
if err != nil {
return []string{}, err
knoflook marked this conversation as resolved Outdated

return []string{}, err to pass an empty list and avoid nil errors somewhere else?

`return []string{}, err` to pass an empty list and avoid nil errors somewhere else?
}
apps, err := GetApps(appFiles)
if err != nil {
return []string{}, err
}
var appNames []string
for _, app := range apps {
appNames = append(appNames, app.Name)
}
return appNames, nil
}
// CopyAppEnvSample copies the example env file for the app into the users env files // CopyAppEnvSample copies the example env file for the app into the users env files
knoflook marked this conversation as resolved Outdated

Yeah I guess we don't need this now but maybe keep it?

idk, could also just end up lurking there without being used 🤔

Yeah I guess we don't need this now but maybe keep it? idk, could also just end up lurking there without being used 🤔

It's simple enought to rewrite so might as well get rid of it

It's simple enought to rewrite so might as well get rid of it
func CopyAppEnvSample(appType, appName, server string) error { func CopyAppEnvSample(appType, appName, server string) error {
envSamplePath := path.Join(ABRA_DIR, "apps", appType, ".env.sample") envSamplePath := path.Join(ABRA_DIR, "apps", appType, ".env.sample")