forked from toolshed/abra
cli
cmd
pkg
app
autocomplete
autocomplete.go
catalogue
client
config
container
context
dns
envfile
formatter
git
integration
limit
lint
log
logs
recipe
secret
server
service
ssh
test
ui
upstream
web
scripts
tests
vendor
.dockerignore
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
AUTHORS.md
Dockerfile
LICENSE
Makefile
README.md
go.mod
go.sum
renovate.json
125 lines
3.3 KiB
Go
125 lines
3.3 KiB
Go
package autocomplete
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
|
|
"coopcloud.tech/abra/pkg/app"
|
|
appPkg "coopcloud.tech/abra/pkg/app"
|
|
"coopcloud.tech/abra/pkg/recipe"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// AppNameComplete copletes app names.
|
|
func AppNameComplete() ([]string, cobra.ShellCompDirective) {
|
|
appFiles, err := app.LoadAppFiles("")
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var appNames []string
|
|
for appName := range appFiles {
|
|
appNames = append(appNames, appName)
|
|
}
|
|
|
|
return appNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
|
|
serviceNames, err := app.GetAppServiceNames(appName)
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
return serviceNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// RecipeNameComplete completes recipe names.
|
|
func RecipeNameComplete() ([]string, cobra.ShellCompDirective) {
|
|
catl, err := recipe.ReadRecipeCatalogue(false)
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var recipeNames []string
|
|
for name := range catl {
|
|
recipeNames = append(recipeNames, name)
|
|
}
|
|
|
|
return recipeNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// RecipeVersionComplete completes versions for the recipe.
|
|
func RecipeVersionComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
|
|
catl, err := recipe.ReadRecipeCatalogue(true)
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var recipeVersions []string
|
|
for _, v := range catl[recipeName].Versions {
|
|
for v2 := range v {
|
|
recipeVersions = append(recipeVersions, v2)
|
|
}
|
|
}
|
|
|
|
return recipeVersions, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// ServerNameComplete completes server names.
|
|
func ServerNameComplete() ([]string, cobra.ShellCompDirective) {
|
|
files, err := app.LoadAppFiles("")
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var serverNames []string
|
|
for _, appFile := range files {
|
|
serverNames = append(serverNames, appFile.Server)
|
|
}
|
|
|
|
return serverNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// CommandNameComplete completes recipe commands.
|
|
func CommandNameComplete(appName string) ([]string, cobra.ShellCompDirective) {
|
|
app, err := app.Get(appName)
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
cmdNames, err := appPkg.ReadAbraShCmdNames(app.Recipe.AbraShPath)
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
sort.Strings(cmdNames)
|
|
|
|
return cmdNames, cobra.ShellCompDirectiveDefault
|
|
}
|
|
|
|
// SecretsComplete completes recipe secrets.
|
|
func SecretComplete(recipeName string) ([]string, cobra.ShellCompDirective) {
|
|
r := recipe.Get(recipeName)
|
|
|
|
config, err := r.GetComposeConfig(nil)
|
|
if err != nil {
|
|
err := fmt.Sprintf("autocomplete failed: %s", err)
|
|
return []string{err}, cobra.ShellCompDirectiveError
|
|
}
|
|
|
|
var secretNames []string
|
|
for name := range config.Secrets {
|
|
secretNames = append(secretNames, name)
|
|
}
|
|
|
|
return secretNames, cobra.ShellCompDirectiveDefault
|
|
}
|