From b3ff4d9bc970d7d723e529c62ac6bb494173d22e Mon Sep 17 00:00:00 2001 From: Matias Frank Jensen Date: Thu, 7 Sep 2023 08:32:08 +0200 Subject: [PATCH 1/2] Remove promptui and replace it with promptkit promptui had some bugs and has not been maintained in the past 2 years. promptkit is being regularly updated and builds on top of a very highly used package bubbletea --- cmd/common/prompt.go | 143 ++++++++++++++++++++ cmd/common/useridentifier.go | 4 +- cmd/common/utils.go | 154 ++-------------------- cmd/rig-admin/cmd/init.go | 4 +- cmd/rig-admin/cmd/users.go | 25 +--- cmd/rig/cmd/auth/get_auth_config.go | 4 +- cmd/rig/cmd/auth/login.go | 2 +- cmd/rig/cmd/base/auth.go | 6 +- cmd/rig/cmd/capsule/configure_network.go | 2 +- cmd/rig/cmd/capsule/create.go | 13 +- cmd/rig/cmd/capsule/create_build.go | 2 +- cmd/rig/cmd/capsule/deploy.go | 2 +- cmd/rig/cmd/capsule/list.go | 3 +- cmd/rig/cmd/capsule/push.go | 2 +- cmd/rig/cmd/capsule/scale.go | 2 +- cmd/rig/cmd/capsule/setup.go | 31 +---- cmd/rig/cmd/cmd_config/context.go | 6 +- cmd/rig/cmd/database/connect.go | 4 +- cmd/rig/cmd/database/create.go | 4 +- cmd/rig/cmd/database/create_credential.go | 2 +- cmd/rig/cmd/database/create_table.go | 2 +- cmd/rig/cmd/database/delete_credential.go | 2 +- cmd/rig/cmd/database/delete_table.go | 2 +- cmd/rig/cmd/fxtest/setup.go | 52 ++++++++ cmd/rig/cmd/group/create.go | 2 +- cmd/rig/cmd/group/update.go | 10 +- cmd/rig/cmd/project/create.go | 2 +- cmd/rig/cmd/project/update.go | 2 +- cmd/rig/cmd/project/update_settings.go | 32 ++--- cmd/rig/cmd/project/use_project.go | 2 +- cmd/rig/cmd/service_account/create.go | 2 +- cmd/rig/cmd/service_account/delete.go | 2 +- cmd/rig/cmd/storage/create_bucket.go | 6 +- cmd/rig/cmd/storage/create_provider.go | 18 +-- cmd/rig/cmd/storage/delete_bucket.go | 2 +- cmd/rig/cmd/storage/delete_object.go | 2 +- cmd/rig/cmd/storage/get_bucket.go | 2 +- cmd/rig/cmd/storage/get_object.go | 2 +- cmd/rig/cmd/storage/setup.go | 6 + cmd/rig/cmd/storage/unlink_bucket.go | 2 +- cmd/rig/cmd/user/add_member.go | 2 +- cmd/rig/cmd/user/migrate.go | 12 +- cmd/rig/cmd/user/remove_member.go | 2 +- cmd/rig/cmd/user/update.go | 29 ++-- cmd/rig/cmd/user/update_settings.go | 52 ++++---- go.mod | 27 ++-- go.sum | 56 +++++--- 47 files changed, 402 insertions(+), 345 deletions(-) create mode 100644 cmd/common/prompt.go create mode 100644 cmd/rig/cmd/fxtest/setup.go diff --git a/cmd/common/prompt.go b/cmd/common/prompt.go new file mode 100644 index 000000000..3cf0dd9b9 --- /dev/null +++ b/cmd/common/prompt.go @@ -0,0 +1,143 @@ +package common + +import ( + "github.com/erikgeiser/promptkit/selection" + "github.com/erikgeiser/promptkit/textinput" + "github.com/rigdev/rig/pkg/utils" + "golang.org/x/exp/slices" +) + +type GetInputOption = func(*textinput.TextInput) *textinput.TextInput + +var ValidateAllOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateAll + return inp +} + +var BoolValidateOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = BoolValidate + return inp +} + +var ValidateIntOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateInt + return inp +} + +var ValidateNonEmptyOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateNonEmpty + return inp +} + +var ValidateEmailOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateEmail + return inp +} + +var ValidateSystemNameOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateSystemName + return inp +} + +var ValidateURLOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateURL + return inp +} + +var ValidateImageOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateImage + return inp +} + +var ValidatePhoneOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = utils.ValidatePhone + return inp +} + +var ValidatePasswordOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = utils.ValidatePassword + return inp +} + +var ValidateBoolOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateBool + return inp +} + +var InputDefaultOpt = func(def string) GetInputOption { + return func(inp *textinput.TextInput) *textinput.TextInput { + inp.InitialValue = def + return inp + } +} + +func PromptGetInput(label string, opts ...GetInputOption) (string, error) { + input := textinput.New(label) + for _, opt := range opts { + input = opt(input) + } + + s, err := input.RunPrompt() + if err != nil { + return "", err + } + return s, nil +} + +func GetPasswordPrompt(label string) (string, error) { + input := textinput.New(label) + input.Hidden = true + input.Validate = utils.ValidatePassword + input.ResultTemplate = "" + + pw, err := input.RunPrompt() + if err != nil { + return "", err + } + return pw, nil +} + +func PromptSelect(label string, choices []string) (int, string, error) { + sp := selection.New(label, choices) + sp.PageSize = 4 + choice, err := sp.RunPrompt() + if err != nil { + return 0, "", err + } + + return slices.Index(choices, choice), choice, nil +} + +func PromptConfirm(label string, def bool) (bool, error) { + input := textinput.New(label + "?") + input.Validate = ValidateBool + input.Template = confirmTemplateY + if !def { + input.Template = confirmTemplateN + } + result, err := input.RunPrompt() + if err != nil { + return false, err + } + if result == "" { + return def, nil + } + + return parseBool(result) +} + +// TODO matias@rig.dev Find a better way instead of duplicate template strings +var ( + confirmTemplateY = ` + {{- Bold .Prompt }} {{- Faint " [Y/n]" }} {{ .Input -}} + {{- if .ValidationError }} {{ Foreground "1" (Bold "✘") }} + {{- else }} {{ Foreground "2" (Bold "✔") }} + {{- end -}} +` + confirmTemplateN = ` + {{- Bold .Prompt }} {{- Faint " [y/N]" }} {{ .Input -}} + {{- if .ValidationError }} {{ Foreground "1" (Bold "✘") }} + {{- else }} {{ Foreground "2" (Bold "✔") }} + {{- end -}} +` +) diff --git a/cmd/common/useridentifier.go b/cmd/common/useridentifier.go index 3fdfdf866..9e6fb31c5 100644 --- a/cmd/common/useridentifier.go +++ b/cmd/common/useridentifier.go @@ -11,7 +11,7 @@ import ( func PromptUserIndentifierUpdate() (*user.Update, error) { var err error - identifier, err := PromptGetInput("Username, email or phone number:", ValidateAll) + identifier, err := PromptGetInput("Username, email or phone number:", ValidateAllOpt) if err != nil { return nil, err } @@ -24,7 +24,7 @@ func PromptUserIndentifierUpdate() (*user.Update, error) { func PromptUserIndentifier() (*model.UserIdentifier, error) { var err error - identifierStr, err := PromptGetInput("Username, email or phone number:", ValidateAll) + identifierStr, err := PromptGetInput("Username, email or phone number:", ValidateAllOpt) if err != nil { return nil, err } diff --git a/cmd/common/utils.go b/cmd/common/utils.go index fda87eb2c..e2bd958db 100644 --- a/cmd/common/utils.go +++ b/cmd/common/utils.go @@ -2,7 +2,6 @@ package common import ( "context" - goerrors "errors" "net/mail" "net/url" "regexp" @@ -11,26 +10,17 @@ import ( "github.com/bufbuild/connect-go" "github.com/docker/distribution/reference" - "github.com/manifoldco/promptui" "github.com/rigdev/rig-go-api/api/v1/database" "github.com/rigdev/rig-go-api/api/v1/group" "github.com/rigdev/rig-go-api/api/v1/storage" "github.com/rigdev/rig-go-api/api/v1/user" "github.com/rigdev/rig-go-sdk" "github.com/rigdev/rig/pkg/errors" - "github.com/rigdev/rig/pkg/utils" "github.com/rigdev/rig/pkg/uuid" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/reflect/protoreflect" ) -var GetInputTemplates = &promptui.PromptTemplates{ - Prompt: "{{ . }} ", - Valid: "{{ . | green }} ", - Invalid: "{{ . | red }} ", - Success: "{{ . | bold }} ", -} - var ValidateAll = func(input string) error { return nil } @@ -91,19 +81,16 @@ var ValidateImage = func(input string) error { return nil } -func PromptGetInput(label string, validate func(input string) error) (string, error) { - prompt := promptui.Prompt{ - Label: label, - Templates: GetInputTemplates, - Validate: validate, +var ValidateBool = func(s string) error { + if s == "" { + return nil } - result, err := prompt.Run() - if err != nil { - return "", err + if _, err := parseBool(s); err != nil { + return err } - return result, nil + return nil } func parseBool(s string) (bool, error) { @@ -116,113 +103,10 @@ func parseBool(s string) (bool, error) { return false, errors.InvalidArgumentErrorf("invalid bool format") } -func PromptConfirm(label string, def bool) (bool, error) { - prompt := promptui.Prompt{ - Label: label, - // Templates: GetInputTemplates, - IsConfirm: true, - Validate: func(s string) error { - if s == "" { - return nil - } - - if _, err := parseBool(s); err != nil { - return err - } - - return nil - }, - Default: "N", - } - - if def { - prompt.Default = "Y" - } - - result, err := prompt.Run() - confirmed := !goerrors.Is(err, promptui.ErrAbort) - if err != nil && confirmed { - return false, err - } - - if result == "" { - return def, nil - } - - return parseBool(result) -} - -func PromptGetInputWithDefault(label string, validate func(input string) error, def string) (string, error) { - prompt := promptui.Prompt{ - Label: label, - Templates: GetInputTemplates, - Validate: validate, - Default: def, - AllowEdit: true, - } - - result, err := prompt.Run() - if err != nil { - return "", err - } - - return result, nil -} - -func PromptSelect(label string, items []string, hideSelected bool) (int, string, error) { - templates := &promptui.SelectTemplates{ - Label: "{{ . }}", - Active: "->{{ . | cyan }}", - Inactive: " {{ . | cyan }}", - Selected: "{{ . | green }}", - } - - prompt := promptui.Select{ - Templates: templates, - Label: label, - Items: items, - HideSelected: hideSelected, - } - - i, res, err := prompt.Run() - if err != nil { - return 0, "", err - } - - return i, res, nil -} - -func GetPasswordPrompt(label string) (string, error) { - prompt := promptui.Prompt{ - Label: label, - Templates: GetInputTemplates, - HideEntered: true, - Mask: '*', - Validate: func(input string) error { - if err := utils.ValidatePassword(input); err != nil { - return err - } - return nil - }, - } - - result, err := prompt.Run() - if err != nil { - return "", err - } - return result, nil -} - func GetUser(ctx context.Context, identifier string, nc rig.Client) (*user.User, string, error) { var err error if identifier == "" { - validateIdentifier := func(identifier string) error { - if identifier == "" { - return errors.InvalidArgumentErrorf("Please provide an identifier") - } - return nil - } - identifier, err = PromptGetInput("User Identifier:", validateIdentifier) + identifier, err = PromptGetInput("User Identifier:", ValidateSystemNameOpt) if err != nil { return nil, "", err } @@ -261,13 +145,7 @@ func GetUser(ctx context.Context, identifier string, nc rig.Client) (*user.User, func GetGroup(ctx context.Context, identifier string, nc rig.Client) (*group.Group, string, error) { var err error if identifier == "" { - validateIdentifier := func(identifier string) error { - if identifier == "" { - return errors.InvalidArgumentErrorf("Please provide an identifier") - } - return nil - } - identifier, err = PromptGetInput("Group Identifier:", validateIdentifier) + identifier, err = PromptGetInput("Group Identifier:", ValidateSystemNameOpt) if err != nil { return nil, "", err } @@ -300,13 +178,7 @@ func GetGroup(ctx context.Context, identifier string, nc rig.Client) (*group.Gro func GetDatabase(ctx context.Context, identifier string, nc rig.Client) (*database.Database, string, error) { var err error if identifier == "" { - validateIdentifier := func(identifier string) error { - if identifier == "" { - return errors.InvalidArgumentErrorf("Please provide an identifier") - } - return nil - } - identifier, err = PromptGetInput("DB Identifier:", validateIdentifier) + identifier, err = PromptGetInput("DB Identifier:", ValidateSystemNameOpt) if err != nil { return nil, "", err } @@ -340,13 +212,7 @@ func GetDatabase(ctx context.Context, identifier string, nc rig.Client) (*databa func GetStorageProvider(ctx context.Context, identifier string, nc rig.Client) (*storage.Provider, string, error) { var err error if identifier == "" { - validateIdentifier := func(identifier string) error { - if identifier == "" { - return errors.InvalidArgumentErrorf("Please provide an identifier") - } - return nil - } - identifier, err = PromptGetInput("Provider Identifier:", validateIdentifier) + identifier, err = PromptGetInput("Provider Identifier:", ValidateSystemNameOpt) if err != nil { return nil, "", err } diff --git a/cmd/rig-admin/cmd/init.go b/cmd/rig-admin/cmd/init.go index 358c40827..3796b6052 100644 --- a/cmd/rig-admin/cmd/init.go +++ b/cmd/rig-admin/cmd/init.go @@ -74,7 +74,7 @@ func createUser(ctx context.Context, us user_service.Service) error { return nil } - email, err := common.PromptGetInput("Email of the new user:", common.ValidateEmail) + email, err := common.PromptGetInput("Email of the new user:", common.ValidateEmailOpt) if err != nil { return err } @@ -122,7 +122,7 @@ func createProject(ctx context.Context, ps project_service.Service) error { } for { - projectName, err := common.PromptGetInput("Project name:", common.ValidateNonEmpty) + projectName, err := common.PromptGetInput("Project name:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig-admin/cmd/users.go b/cmd/rig-admin/cmd/users.go index 422d879e6..43d831d06 100644 --- a/cmd/rig-admin/cmd/users.go +++ b/cmd/rig-admin/cmd/users.go @@ -7,14 +7,13 @@ import ( "strings" "github.com/lucasepe/codename" - "github.com/manifoldco/promptui" "github.com/rigdev/rig-go-api/api/v1/user" "github.com/rigdev/rig-go-api/model" + "github.com/rigdev/rig/cmd/common" "github.com/rigdev/rig/internal/config" auth_service "github.com/rigdev/rig/internal/service/auth" user_service "github.com/rigdev/rig/internal/service/user" "github.com/rigdev/rig/pkg/auth" - "github.com/rigdev/rig/pkg/utils" "github.com/rigdev/rig/pkg/uuid" "github.com/spf13/cobra" "go.uber.org/zap" @@ -127,7 +126,7 @@ func UsersCreate(ctx context.Context, cmd *cobra.Command, us user_service.Servic }) if userPassword == "" { - pw, err := getPasswordPrompt("Password:") + pw, err := common.GetPasswordPrompt("Password:") if err != nil { return err } @@ -315,23 +314,3 @@ func UsersGetSettings(ctx context.Context, cmd *cobra.Command, us user_service.S logger.Info("settings", zap.Any("settings", settings)) return nil } - -func getPasswordPrompt(label string) (string, error) { - prompt := promptui.Prompt{ - Label: label, - HideEntered: true, - Mask: '*', - Validate: func(input string) error { - if err := utils.ValidatePassword(input); err != nil { - return err - } - return nil - }, - } - - result, err := prompt.Run() - if err != nil { - return "", err - } - return result, nil -} diff --git a/cmd/rig/cmd/auth/get_auth_config.go b/cmd/rig/cmd/auth/get_auth_config.go index f802f1717..bde4fd1ea 100644 --- a/cmd/rig/cmd/auth/get_auth_config.go +++ b/cmd/rig/cmd/auth/get_auth_config.go @@ -33,7 +33,7 @@ func AuthGetAuthConfig(ctx context.Context, cmd *cobra.Command, args []string, n psIds = append(psIds, p.GetProjectId()) } - i, _, err := common.PromptSelect("Project: ", ps, false) + i, _, err := common.PromptSelect("Project: ", ps) if err != nil { return err } @@ -68,7 +68,7 @@ func AuthGetAuthConfig(ctx context.Context, cmd *cobra.Command, args []string, n } if redirectAddr == "" { - redirectAddr, err = common.PromptGetInput("Oauth Redirect Address", common.ValidateNonEmpty) + redirectAddr, err = common.PromptGetInput("Oauth Redirect Address", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/auth/login.go b/cmd/rig/cmd/auth/login.go index 7f0f48ca4..cbf9cc91c 100644 --- a/cmd/rig/cmd/auth/login.go +++ b/cmd/rig/cmd/auth/login.go @@ -55,7 +55,7 @@ func loginWithRetry(ctx context.Context, client rig.Client, identifierStr, passw } if shouldPromptPassword { - password, err = common.GetPasswordPrompt("Enter Password") + password, err = common.GetPasswordPrompt("Enter Password:") if err != nil { return nil, err } diff --git a/cmd/rig/cmd/base/auth.go b/cmd/rig/cmd/base/auth.go index 88106bd7b..89428241b 100644 --- a/cmd/rig/cmd/base/auth.go +++ b/cmd/rig/cmd/base/auth.go @@ -85,7 +85,7 @@ func CheckAuth(cmd *cobra.Command, rc rig.Client, cfg *cmd_config.Config, logger } func createProject(ctx context.Context, cmd *cobra.Command, rc rig.Client, cfg *cmd_config.Config) error { - name, err := common.PromptGetInput("Project name:", common.ValidateNonEmpty) + name, err := common.PromptGetInput("Project name:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -138,7 +138,7 @@ func createProject(ctx context.Context, cmd *cobra.Command, rc rig.Client, cfg * } func login(ctx context.Context, rc rig.Client, cfg *cmd_config.Config) error { - u, err := common.PromptGetInput("Enter Username or Email", common.ValidateNonEmpty) + u, err := common.PromptGetInput("Enter Username or Email", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -207,7 +207,7 @@ func useProject(ctx context.Context, rc rig.Client, cfg *cmd_config.Config) erro ps = append(ps, p.GetName()) } - i, _, err := common.PromptSelect("Project: ", ps, false) + i, _, err := common.PromptSelect("Project: ", ps) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/configure_network.go b/cmd/rig/cmd/capsule/configure_network.go index 895759969..022a74d56 100644 --- a/cmd/rig/cmd/capsule/configure_network.go +++ b/cmd/rig/cmd/capsule/configure_network.go @@ -19,7 +19,7 @@ import ( func CapsuleConfigureNetwork(ctx context.Context, cmd *cobra.Command, args []string, capsuleID CapsuleID, nc rig.Client) error { var err error if networkFile == "" { - networkFile, err = common.PromptGetInput("Enter Network file path", common.ValidateNonEmpty) + networkFile, err = common.PromptGetInput("Enter Network file path", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/create.go b/cmd/rig/cmd/capsule/create.go index 1dae0740f..7a0ae8d71 100644 --- a/cmd/rig/cmd/capsule/create.go +++ b/cmd/rig/cmd/capsule/create.go @@ -17,7 +17,7 @@ import ( func CapsuleCreate(ctx context.Context, cmd *cobra.Command, args []string, nc rig.Client, cfg *cmd_config.Config) error { var err error if name == "" { - name, err = common.PromptGetInput("Capsule name: ", common.ValidateSystemName) + name, err = common.PromptGetInput("Capsule name: ", common.ValidateSystemNameOpt) if err != nil { return err } @@ -30,7 +30,7 @@ func CapsuleCreate(ctx context.Context, cmd *cobra.Command, args []string, nc ri if ok, err := common.PromptConfirm("Do you want to add an initial image", true); err != nil { return err } else if ok { - if image, err = common.PromptGetInput("Image: ", common.ValidateImage); err != nil { + if image, err = common.PromptGetInput("Image: ", common.ValidateImageOpt); err != nil { return err } @@ -40,7 +40,7 @@ func CapsuleCreate(ctx context.Context, cmd *cobra.Command, args []string, nc ri ifc := &capsule.Interface{ Name: "default", } - portStr, err := common.PromptGetInput("Which port: ", common.ValidateInt) + portStr, err := common.PromptGetInput("Which port: ", common.ValidateIntOpt) if err != nil { return err } @@ -59,14 +59,15 @@ func CapsuleCreate(ctx context.Context, cmd *cobra.Command, args []string, nc ri Enabled: true, Method: &capsule.RoutingMethod{}, } - i, _, err := common.PromptSelect("Which method?", []string{"Load balancer (raw traffic routing)", "Ingress (HTTP/HTTPS routing)"}, false) + options := []string{"Load balancer (raw traffic routing)", "Ingress (HTTP/HTTPS routing)"} + i, _, err := common.PromptSelect("Which method?", options) if err != nil { return err } switch i { case 0: - portStr, err := common.PromptGetInput("What public port to use: ", common.ValidateInt) + portStr, err := common.PromptGetInput("What public port to use: ", common.ValidateIntOpt) if err != nil { return err } @@ -95,7 +96,7 @@ func CapsuleCreate(ctx context.Context, cmd *cobra.Command, args []string, nc ri }) } } - replicasStr, err := common.PromptGetInputWithDefault("Replicas: ", common.ValidateInt, "1") + replicasStr, err := common.PromptGetInput("Replicas: ", common.ValidateIntOpt, common.InputDefaultOpt("1")) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/create_build.go b/cmd/rig/cmd/capsule/create_build.go index c72e24736..31ea77a3e 100644 --- a/cmd/rig/cmd/capsule/create_build.go +++ b/cmd/rig/cmd/capsule/create_build.go @@ -14,7 +14,7 @@ import ( func CapsuleCreateBuild(ctx context.Context, cmd *cobra.Command, args []string, capsuleID CapsuleID, nc rig.Client, cfg *cmd_config.Config) error { var err error if image == "" { - image, err = common.PromptGetInput("Enter image", common.ValidateImage) + image, err = common.PromptGetInput("Enter image", common.ValidateImageOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/deploy.go b/cmd/rig/cmd/capsule/deploy.go index af1d523b7..c879c7487 100644 --- a/cmd/rig/cmd/capsule/deploy.go +++ b/cmd/rig/cmd/capsule/deploy.go @@ -13,7 +13,7 @@ import ( func CapsuleDeploy(ctx context.Context, cmd *cobra.Command, args []string, capsuleID CapsuleID, nc rig.Client) error { var err error if buildID == "" { - buildID, err = common.PromptGetInput("Enter Build ID", common.ValidateNonEmpty) + buildID, err = common.PromptGetInput("Enter Build ID", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/list.go b/cmd/rig/cmd/capsule/list.go index 1ac00e738..abc85a7de 100644 --- a/cmd/rig/cmd/capsule/list.go +++ b/cmd/rig/cmd/capsule/list.go @@ -14,7 +14,8 @@ import ( "github.com/spf13/cobra" ) -func CapsuleList(ctx context.Context, cmd *cobra.Command, nc rig.Client) error { +func CapsuleList(ctx context.Context, cmd *cobra.Command, nc rig.Client, args []string) error { + fmt.Println("args: ", args) resp, err := nc.Capsule().List(ctx, &connect.Request[capsule.ListRequest]{ Msg: &capsule.ListRequest{ Pagination: &model.Pagination{ diff --git a/cmd/rig/cmd/capsule/push.go b/cmd/rig/cmd/capsule/push.go index 3c0704510..304add6cb 100644 --- a/cmd/rig/cmd/capsule/push.go +++ b/cmd/rig/cmd/capsule/push.go @@ -22,7 +22,7 @@ import ( func CapsulePush(ctx context.Context, cmd *cobra.Command, args []string, capsuleID CapsuleID, nc rig.Client, cfg *cmd_config.Config) error { var err error if image == "" { - image, err = common.PromptGetInput("Enter Image", common.ValidateNonEmpty) + image, err = common.PromptGetInput("Enter Image", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/scale.go b/cmd/rig/cmd/capsule/scale.go index f244eec28..b1840b3b8 100644 --- a/cmd/rig/cmd/capsule/scale.go +++ b/cmd/rig/cmd/capsule/scale.go @@ -15,7 +15,7 @@ import ( func CapsuleScale(ctx context.Context, cmd *cobra.Command, args []string, capsuleID CapsuleID, nc rig.Client) error { var r uint64 if replicas == -1 { - rString, err := common.PromptGetInput("Enter Replica Count", common.ValidateNonEmpty) + rString, err := common.PromptGetInput("Enter Replica Count", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/capsule/setup.go b/cmd/rig/cmd/capsule/setup.go index 3a97d71ff..d01ca7be5 100644 --- a/cmd/rig/cmd/capsule/setup.go +++ b/cmd/rig/cmd/capsule/setup.go @@ -2,11 +2,8 @@ package capsule import ( "context" - "fmt" - "os" "github.com/bufbuild/connect-go" - "github.com/manifoldco/promptui" "github.com/rigdev/rig-go-api/api/v1/capsule" "github.com/rigdev/rig-go-sdk" "github.com/rigdev/rig/cmd/common" @@ -216,7 +213,7 @@ func provideCapsuleID(ctx context.Context, nc rig.Client, args []string) (Capsul var capsuleName string var err error if len(args) == 0 { - capsuleName, err = common.PromptGetInput("Enter Capsule name", common.ValidateNonEmpty) + capsuleName, err = common.PromptGetInput("Enter Capsule name", common.ValidateNonEmptyOpt) if err != nil { return "", err } @@ -264,28 +261,6 @@ func provideInstanceID(ctx context.Context, nc rig.Client, capsuleID CapsuleID, return items[0], nil } - return promptGetFromList("instance", items), nil -} - -func promptGetFromList(label string, items []string) string { - templates := &promptui.SelectTemplates{ - // Prompt: "{{ . }} ", - // Valid: "{{ . | green }} ", - // Invalid: "{{ . | red }} ", - // Success: "{{ . | bold }} ", - } - - prompt := promptui.Select{ - Label: label, - Items: items, - Templates: templates, - } - - _, result, err := prompt.Run() - if err != nil { - fmt.Printf("Prompt failed %v\n", err) - os.Exit(1) - } - - return result + _, s, err := common.PromptSelect("instance", items) + return s, err } diff --git a/cmd/rig/cmd/cmd_config/context.go b/cmd/rig/cmd/cmd_config/context.go index 23e56a0bb..8b86558ad 100644 --- a/cmd/rig/cmd/cmd_config/context.go +++ b/cmd/rig/cmd/cmd_config/context.go @@ -30,7 +30,7 @@ func SelectContext(cfg *Config) error { } } - n, _, err := common.PromptSelect("Context:", labels, false) + n, _, err := common.PromptSelect("Context:", labels) if err != nil { return err } @@ -40,12 +40,12 @@ func SelectContext(cfg *Config) error { } func CreateContext(cfg *Config) error { - name, err := common.PromptGetInputWithDefault("Name:", common.ValidateSystemName, "local") + name, err := common.PromptGetInput("Name:", common.ValidateSystemNameOpt, common.InputDefaultOpt("local")) if err != nil { return err } - server, err := common.PromptGetInputWithDefault("Server:", common.ValidateURL, "http://localhost:4747/") + server, err := common.PromptGetInput("Server:", common.ValidateURLOpt, common.InputDefaultOpt("http://localhost:4747/")) if err != nil { return err } diff --git a/cmd/rig/cmd/database/connect.go b/cmd/rig/cmd/database/connect.go index 475159897..465fcf7a4 100644 --- a/cmd/rig/cmd/database/connect.go +++ b/cmd/rig/cmd/database/connect.go @@ -21,14 +21,14 @@ func Connect(ctx context.Context, cmd *cobra.Command, args []string, nc rig.Clie } if clientID == "" { - clientID, err = common.PromptGetInput("Client ID", common.ValidateNonEmpty) + clientID, err = common.PromptGetInput("Client ID", common.ValidateNonEmptyOpt) if err != nil { return err } } if clientSecret == "" { - clientSecret, err = common.PromptGetInput("Client Secret", common.ValidateNonEmpty) + clientSecret, err = common.PromptGetInput("Client Secret", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/database/create.go b/cmd/rig/cmd/database/create.go index 7daebde31..dad6c2278 100644 --- a/cmd/rig/cmd/database/create.go +++ b/cmd/rig/cmd/database/create.go @@ -13,14 +13,14 @@ import ( func Create(ctx context.Context, cmd *cobra.Command, args []string, nc rig.Client) error { var err error if name == "" { - name, err = common.PromptGetInput("Database name:", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Database name:", common.ValidateNonEmptyOpt) if err != nil { return err } } if dbTypeString == "" { - _, dbTypeString, err = common.PromptSelect("Database type:", []string{"mongo", "postgres"}, false) + _, dbTypeString, err = common.PromptSelect("Database type:", []string{"mongo", "postgres"}) if err != nil { return err } diff --git a/cmd/rig/cmd/database/create_credential.go b/cmd/rig/cmd/database/create_credential.go index 1b3ee09c4..696201e30 100644 --- a/cmd/rig/cmd/database/create_credential.go +++ b/cmd/rig/cmd/database/create_credential.go @@ -21,7 +21,7 @@ func CreateCredential(ctx context.Context, cmd *cobra.Command, args []string, nc } if name == "" { - name, err = common.PromptGetInput("Credential Name", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Credential Name", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/database/create_table.go b/cmd/rig/cmd/database/create_table.go index 66deb0b6d..a15873857 100644 --- a/cmd/rig/cmd/database/create_table.go +++ b/cmd/rig/cmd/database/create_table.go @@ -21,7 +21,7 @@ func CreateTable(ctx context.Context, cmd *cobra.Command, args []string, nc rig. } if name == "" { - name, err = common.PromptGetInput("Table Name", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Table Name", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/database/delete_credential.go b/cmd/rig/cmd/database/delete_credential.go index 8401390e8..bb2a4b9e0 100644 --- a/cmd/rig/cmd/database/delete_credential.go +++ b/cmd/rig/cmd/database/delete_credential.go @@ -21,7 +21,7 @@ func DeleteCredential(ctx context.Context, cmd *cobra.Command, args []string, nc } if name == "" { - name, err = common.PromptGetInput("Credential Name", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Credential Name", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/database/delete_table.go b/cmd/rig/cmd/database/delete_table.go index 991f432d6..b58703cc7 100644 --- a/cmd/rig/cmd/database/delete_table.go +++ b/cmd/rig/cmd/database/delete_table.go @@ -21,7 +21,7 @@ func DeleteTable(ctx context.Context, cmd *cobra.Command, args []string, nc rig. } if name == "" { - name, err = common.PromptGetInput("Table Name", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Table Name", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/fxtest/setup.go b/cmd/rig/cmd/fxtest/setup.go new file mode 100644 index 000000000..9fa16bae8 --- /dev/null +++ b/cmd/rig/cmd/fxtest/setup.go @@ -0,0 +1,52 @@ +package fxtest + +import ( + "context" + + "github.com/rigdev/rig-go-sdk" + "github.com/rigdev/rig/cmd/rig/cmd/base" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +var ( + someFlag string +) + +type subcmd struct { + fx.In + + ctx context.Context + cfg *base.Config + client rig.Client +} + +func (f *subcmd) Setup(parent *cobra.Command) { + fxtest := &cobra.Command{ + Use: "subcmd", + Short: "subcmd test some stuff", + Args: cobra.ExactArgs(1), + RunE: f.Run, + } + fxtest.Flags().StringVarP(&someFlag, "someflag", "s", "", "some flag") + + parent.AddCommand(fxtest) +} + +func (f *subcmd) Run(cmd *cobra.Command, args []string) error { + return nil +} + +type root struct { + subcmd subcmd +} + +func (r *root) Execute() { + cmd := &cobra.Command{ + Use: "fxtest", + Short: "test of fx + cobra", + } + + r.subcmd.Setup(cmd) + return cmd.Execute() +} diff --git a/cmd/rig/cmd/group/create.go b/cmd/rig/cmd/group/create.go index b9aab5215..86a87d6d0 100644 --- a/cmd/rig/cmd/group/create.go +++ b/cmd/rig/cmd/group/create.go @@ -13,7 +13,7 @@ import ( func GroupCreate(ctx context.Context, cmd *cobra.Command, args []string, nc rig.Client) error { var err error if name == "" { - name, err = common.PromptGetInput("Name:", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Name:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/group/update.go b/cmd/rig/cmd/group/update.go index 8abf9d29f..9ca85d11b 100644 --- a/cmd/rig/cmd/group/update.go +++ b/cmd/rig/cmd/group/update.go @@ -53,7 +53,7 @@ func GroupUpdate(ctx context.Context, cmd *cobra.Command, args []string, nc rig. updates := []*group.Update{} for { - i, res, err := common.PromptSelect("Choose a field to update:", fields, true) + i, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return err } @@ -87,7 +87,7 @@ func GroupUpdate(ctx context.Context, cmd *cobra.Command, args []string, nc rig. func promptGroupUpdate(f groupField, g *group.Group) (*group.Update, error) { switch f { case groupName: - name, err := common.PromptGetInputWithDefault("Name:", common.ValidateNonEmpty, g.GetName()) + name, err := common.PromptGetInput("Name:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(g.GetName())) if err != nil { return nil, err } @@ -100,11 +100,11 @@ func promptGroupUpdate(f groupField, g *group.Group) (*group.Update, error) { }, nil } case groupSetMetaData: - key, err := common.PromptGetInput("Key:", common.ValidateNonEmpty) + key, err := common.PromptGetInput("Key:", common.ValidateNonEmptyOpt) if err != nil { return nil, err } - value, err := common.PromptGetInput("Value:", common.ValidateNonEmpty) + value, err := common.PromptGetInput("Value:", common.ValidateNonEmptyOpt) if err != nil { return nil, err } @@ -119,7 +119,7 @@ func promptGroupUpdate(f groupField, g *group.Group) (*group.Update, error) { }, nil case groupDeleteMetaData: - key, err := common.PromptGetInput("Key:", common.ValidateNonEmpty) + key, err := common.PromptGetInput("Key:", common.ValidateNonEmptyOpt) if err != nil { return nil, err } diff --git a/cmd/rig/cmd/project/create.go b/cmd/rig/cmd/project/create.go index c09badebb..ef3f307ac 100644 --- a/cmd/rig/cmd/project/create.go +++ b/cmd/rig/cmd/project/create.go @@ -15,7 +15,7 @@ import ( func ProjectCreate(ctx context.Context, cmd *cobra.Command, args []string, nc rig.Client, cfg *cmd_config.Config) error { if name == "" { var err error - name, err = common.PromptGetInput("Project name:", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Project name:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/project/update.go b/cmd/rig/cmd/project/update.go index 81d5d1ac5..6c3c9407c 100644 --- a/cmd/rig/cmd/project/update.go +++ b/cmd/rig/cmd/project/update.go @@ -62,7 +62,7 @@ func ProjectUpdate(ctx context.Context, cmd *cobra.Command, args []string, nc ri updates := []*project.Update{} for { - i, res, err := common.PromptSelect("Choose a field to update:", fields, true) + i, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return err } diff --git a/cmd/rig/cmd/project/update_settings.go b/cmd/rig/cmd/project/update_settings.go index b90bca6fe..bbb93e1ec 100644 --- a/cmd/rig/cmd/project/update_settings.go +++ b/cmd/rig/cmd/project/update_settings.go @@ -131,7 +131,7 @@ func ProjectUpdateSettings(ctx context.Context, cmd *cobra.Command, args []strin } for { - i, res, err := common.PromptSelect("Choose a field to update:", fields, true) + i, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return err } @@ -191,7 +191,7 @@ func promptEmailProvider(s *settings.Settings) (*settings.Update, error) { "MailJet", "Smtp", "Default", - }, false) + }) if err != nil { return nil, nil } @@ -260,7 +260,7 @@ func promptDeleteDockerRegistry(s *settings.Settings) (*settings.Update, error) hosts = append(hosts, r.GetHost()) } - _, res, err := common.PromptSelect("Choose a registry to delete:", hosts, false) + _, res, err := common.PromptSelect("Choose a registry to delete:", hosts) if err != nil { return nil, err } @@ -273,22 +273,22 @@ func promptDeleteDockerRegistry(s *settings.Settings) (*settings.Update, error) } func promptAddDockerRegistry(s *settings.Settings) (*settings.Update, error) { - host, err := common.PromptGetInput("Enter host", common.ValidateNonEmpty) + host, err := common.PromptGetInput("Enter host", common.ValidateNonEmptyOpt) if err != nil { return nil, err } - username, err := common.PromptGetInput("Enter username", common.ValidateNonEmpty) + username, err := common.PromptGetInput("Enter username", common.ValidateNonEmptyOpt) if err != nil { return nil, err } - password, err := common.PromptGetInput("Enter password", common.ValidateNonEmpty) + password, err := common.PromptGetInput("Enter password", common.ValidateNonEmptyOpt) if err != nil { return nil, err } - email, err := common.PromptGetInput("Enter email", common.ValidateEmail) + email, err := common.PromptGetInput("Enter email", common.ValidateEmailOpt) if err != nil { return nil, err } @@ -331,7 +331,7 @@ func promptEmailProviderFields(p *settings.EmailProvider, prov string) error { } for { - _, res, err := common.PromptSelect("Choose a field to update:", fields, true) + _, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return err } @@ -341,31 +341,31 @@ func promptEmailProviderFields(p *settings.EmailProvider, prov string) error { switch res { case emailProviderPublicKey.String(): - key, err := common.PromptGetInput("Enter public key", common.ValidateNonEmpty) + key, err := common.PromptGetInput("Enter public key", common.ValidateNonEmptyOpt) if err != nil { return err } p.Credentials.PublicKey = key case emailProviderPrivateKey.String(): - key, err := common.PromptGetInput("Enter private key", common.ValidateNonEmpty) + key, err := common.PromptGetInput("Enter private key", common.ValidateNonEmptyOpt) if err != nil { return err } p.Credentials.PrivateKey = key case emailProviderFromEmail.String(): - email, err := common.PromptGetInputWithDefault("Enter from email", common.ValidateEmail, p.GetFrom()) + email, err := common.PromptGetInput("Enter from email", common.ValidateEmailOpt, common.InputDefaultOpt(p.GetFrom())) if err != nil { return err } p.From = email case emailProviderHost.String(): - host, err := common.PromptGetInputWithDefault("Enter host", common.ValidateNonEmpty, p.GetInstance().GetSmtp().GetHost()) + host, err := common.PromptGetInput("Enter host", common.ValidateNonEmptyOpt, common.InputDefaultOpt(p.GetInstance().GetSmtp().GetHost())) if err != nil { return err } p.GetInstance().GetSmtp().Host = host case emailProviderPort.String(): - port, err := common.PromptGetInputWithDefault("Enter port", common.ValidateNonEmpty, strconv.Itoa(int(p.GetInstance().GetSmtp().GetPort()))) + port, err := common.PromptGetInput("Enter port", common.ValidateNonEmptyOpt, common.InputDefaultOpt(strconv.Itoa(int(p.GetInstance().GetSmtp().GetPort())))) if err != nil { return err } @@ -390,7 +390,7 @@ func promptTemplate(t *settings.Template) (*settings.Update, error) { } for { - _, res, err := common.PromptSelect("Choose a field to update:", fields, true) + _, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return nil, err } @@ -400,13 +400,13 @@ func promptTemplate(t *settings.Template) (*settings.Update, error) { switch res { case tempalteFieldSubject.String(): - subject, err := common.PromptGetInputWithDefault("Enter subject", common.ValidateNonEmpty, t.GetSubject()) + subject, err := common.PromptGetInput("Enter subject", common.ValidateNonEmptyOpt, common.InputDefaultOpt(t.GetSubject())) if err != nil { return nil, err } t.Subject = subject case templateFieldBody.String(): - body, err := common.PromptGetInputWithDefault("Enter body", common.ValidateNonEmpty, t.GetBody()) + body, err := common.PromptGetInput("Enter body", common.ValidateNonEmptyOpt, common.InputDefaultOpt(t.GetBody())) if err != nil { return nil, err } diff --git a/cmd/rig/cmd/project/use_project.go b/cmd/rig/cmd/project/use_project.go index 54b7cbd10..1e0e5df4e 100644 --- a/cmd/rig/cmd/project/use_project.go +++ b/cmd/rig/cmd/project/use_project.go @@ -28,7 +28,7 @@ func ProjectUse(ctx context.Context, cmd *cobra.Command, args []string, nc rig.C ps = append(ps, p.GetName()) } - i, _, err := common.PromptSelect("Project: ", ps, false) + i, _, err := common.PromptSelect("Project: ", ps) if err != nil { return err } diff --git a/cmd/rig/cmd/service_account/create.go b/cmd/rig/cmd/service_account/create.go index e0a1dc25c..6429b09a9 100644 --- a/cmd/rig/cmd/service_account/create.go +++ b/cmd/rig/cmd/service_account/create.go @@ -15,7 +15,7 @@ func ServiceAccountCreate(ctx context.Context, cmd *cobra.Command, args []string var err error if name == "" { - name, err = common.PromptGetInput("Name:", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Name:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/service_account/delete.go b/cmd/rig/cmd/service_account/delete.go index bd82ab812..900987f7e 100644 --- a/cmd/rig/cmd/service_account/delete.go +++ b/cmd/rig/cmd/service_account/delete.go @@ -20,7 +20,7 @@ func ServiceAccountDelete(ctx context.Context, cmd *cobra.Command, args []string } if id == "" { - id, err = common.PromptGetInput("ID:", common.ValidateNonEmpty) + id, err = common.PromptGetInput("ID:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/create_bucket.go b/cmd/rig/cmd/storage/create_bucket.go index a0c3c24cd..2678d8599 100644 --- a/cmd/rig/cmd/storage/create_bucket.go +++ b/cmd/rig/cmd/storage/create_bucket.go @@ -54,7 +54,7 @@ func StorageCreateBucket(ctx context.Context, cmd *cobra.Command, args []string, for i, p := range res.Msg.GetProviders() { providerNames[i] = p.GetName() } - i, _, err := common.PromptSelect("Select provider:", providerNames, false) + i, _, err := common.PromptSelect("Select provider:", providerNames) if err != nil { return err } @@ -64,7 +64,7 @@ func StorageCreateBucket(ctx context.Context, cmd *cobra.Command, args []string, } if name == "" { - name, err = common.PromptGetInput("Bucket name:", ValidateBucketName) + name, err = common.PromptGetInput("Bucket name:", ValidateBucketNameOpt) if err != nil { return err } @@ -73,7 +73,7 @@ func StorageCreateBucket(ctx context.Context, cmd *cobra.Command, args []string, } if providerBucketName == "" { - providerBucketName, err = common.PromptGetInputWithDefault("Provider bucket name:", ValidateBucketName, name) + providerBucketName, err = common.PromptGetInput("Provider bucket name:", ValidateBucketNameOpt, common.InputDefaultOpt(name)) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/create_provider.go b/cmd/rig/cmd/storage/create_provider.go index abd599826..32c7e449d 100644 --- a/cmd/rig/cmd/storage/create_provider.go +++ b/cmd/rig/cmd/storage/create_provider.go @@ -18,7 +18,7 @@ import ( func StorageCreateProvider(ctx context.Context, cmd *cobra.Command, args []string, nc rig.Client) error { var err error if name == "" { - name, err = common.PromptGetInput("Provider identifier:", common.ValidateNonEmpty) + name, err = common.PromptGetInput("Provider identifier:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -65,7 +65,7 @@ func StorageCreateProvider(ctx context.Context, cmd *cobra.Command, args []strin "Minio", } var i int - i, providerType, err = common.PromptSelect("Provider type:", fields, false) + i, providerType, err = common.PromptSelect("Provider type:", fields) if err != nil { return err } @@ -73,7 +73,7 @@ func StorageCreateProvider(ctx context.Context, cmd *cobra.Command, args []strin switch i { case 0: // GCS - path, err := common.PromptGetInput("Credentials Path:", common.ValidateNonEmpty) + path, err := common.PromptGetInput("Credentials Path:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -84,17 +84,17 @@ func StorageCreateProvider(ctx context.Context, cmd *cobra.Command, args []strin } case 1: // S3 - accessKey, err := common.PromptGetInput("Access Key:", common.ValidateNonEmpty) + accessKey, err := common.PromptGetInput("Access Key:", common.ValidateNonEmptyOpt) if err != nil { return err } - secretKey, err := common.PromptGetInput("Secret Key:", common.ValidateNonEmpty) + secretKey, err := common.PromptGetInput("Secret Key:", common.ValidateNonEmptyOpt) if err != nil { return err } - region, err := common.PromptGetInput("Region:", common.ValidateNonEmpty) + region, err := common.PromptGetInput("Region:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -114,17 +114,17 @@ func StorageCreateProvider(ctx context.Context, cmd *cobra.Command, args []strin case 2: // Minio - accessKey, err := common.PromptGetInput("Access Key:", common.ValidateNonEmpty) + accessKey, err := common.PromptGetInput("Access Key:", common.ValidateNonEmptyOpt) if err != nil { return err } - secretKey, err := common.PromptGetInput("Secret Key:", common.ValidateNonEmpty) + secretKey, err := common.PromptGetInput("Secret Key:", common.ValidateNonEmptyOpt) if err != nil { return err } - endpoint, err := common.PromptGetInput("Endpoint:", common.ValidateNonEmpty) + endpoint, err := common.PromptGetInput("Endpoint:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/delete_bucket.go b/cmd/rig/cmd/storage/delete_bucket.go index 5de7cf6b1..0ee2f6ea4 100644 --- a/cmd/rig/cmd/storage/delete_bucket.go +++ b/cmd/rig/cmd/storage/delete_bucket.go @@ -17,7 +17,7 @@ func StorageDeleteBucket(ctx context.Context, cmd *cobra.Command, args []string, var bucket string var err error if len(args) < 1 { - bucket, err = common.PromptGetInput("Bucket name:", ValidateBucketName) + bucket, err = common.PromptGetInput("Bucket name:", ValidateBucketNameOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/delete_object.go b/cmd/rig/cmd/storage/delete_object.go index 49b99f8d3..d1d4cb73b 100644 --- a/cmd/rig/cmd/storage/delete_object.go +++ b/cmd/rig/cmd/storage/delete_object.go @@ -16,7 +16,7 @@ func StorageDeleteObject(ctx context.Context, cmd *cobra.Command, args []string, var path string var err error if len(args) < 1 { - path, err = common.PromptGetInput("Object path:", common.ValidateNonEmpty) + path, err = common.PromptGetInput("Object path:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/get_bucket.go b/cmd/rig/cmd/storage/get_bucket.go index 3d25a33d8..a2dd805c0 100644 --- a/cmd/rig/cmd/storage/get_bucket.go +++ b/cmd/rig/cmd/storage/get_bucket.go @@ -15,7 +15,7 @@ func StorageGetBucket(ctx context.Context, cmd *cobra.Command, args []string, nc var bucket string var err error if len(args) < 1 { - bucket, err = common.PromptGetInput("Bucket name:", ValidateBucketName) + bucket, err = common.PromptGetInput("Bucket name:", ValidateBucketNameOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/get_object.go b/cmd/rig/cmd/storage/get_object.go index 827579b96..0dc57d9c4 100644 --- a/cmd/rig/cmd/storage/get_object.go +++ b/cmd/rig/cmd/storage/get_object.go @@ -16,7 +16,7 @@ func StorageGetObject(ctx context.Context, cmd *cobra.Command, args []string, nc var path string var err error if len(args) < 1 { - path, err = common.PromptGetInput("Object path:", common.ValidateNonEmpty) + path, err = common.PromptGetInput("Object path:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/storage/setup.go b/cmd/rig/cmd/storage/setup.go index 91dba5770..7eb230da9 100644 --- a/cmd/rig/cmd/storage/setup.go +++ b/cmd/rig/cmd/storage/setup.go @@ -1,6 +1,7 @@ package storage import ( + "github.com/erikgeiser/promptkit/textinput" "github.com/rigdev/rig/cmd/rig/cmd/base" "github.com/rigdev/rig/pkg/errors" "github.com/spf13/cobra" @@ -190,3 +191,8 @@ var ValidateBucketName = func(input string) error { } return nil } + +var ValidateBucketNameOpt = func(inp *textinput.TextInput) *textinput.TextInput { + inp.Validate = ValidateBucketName + return inp +} diff --git a/cmd/rig/cmd/storage/unlink_bucket.go b/cmd/rig/cmd/storage/unlink_bucket.go index 09d33bc75..a48a54da7 100644 --- a/cmd/rig/cmd/storage/unlink_bucket.go +++ b/cmd/rig/cmd/storage/unlink_bucket.go @@ -17,7 +17,7 @@ func StorageUnlinkBucket(ctx context.Context, cmd *cobra.Command, args []string, var bucket string var err error if len(args) < 1 { - bucket, err = common.PromptGetInput("Bucket name:", ValidateBucketName) + bucket, err = common.PromptGetInput("Bucket name:", ValidateBucketNameOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/user/add_member.go b/cmd/rig/cmd/user/add_member.go index 8d3fbe990..3d21e7b23 100644 --- a/cmd/rig/cmd/user/add_member.go +++ b/cmd/rig/cmd/user/add_member.go @@ -49,7 +49,7 @@ func UserAddMember(ctx context.Context, cmd *cobra.Command, args []string, nc ri gnames = append(gnames, gname) } - _, gname, err := common.PromptSelect("Select group", gnames, false) + _, gname, err := common.PromptSelect("Select group", gnames) if err != nil { return err } diff --git a/cmd/rig/cmd/user/migrate.go b/cmd/rig/cmd/user/migrate.go index 721f24c99..2190bd109 100644 --- a/cmd/rig/cmd/user/migrate.go +++ b/cmd/rig/cmd/user/migrate.go @@ -77,7 +77,7 @@ func UserMigrate(ctx context.Context, cmd *cobra.Command, args []string, nc rig. } if platform == "" { - _, platform, err = common.PromptSelect("Where are you migrating from?", fields, false) + _, platform, err = common.PromptSelect("Where are you migrating from?", fields) if err != nil { return err } @@ -103,7 +103,7 @@ func migrateFromFirebase(ctx context.Context, nc rig.Client) error { methodUsersFile.String(), } - i, _, err := common.PromptSelect("How do you want to migrate?", fields, false) + i, _, err := common.PromptSelect("How do you want to migrate?", fields) if err != nil { return err } @@ -121,7 +121,7 @@ func migrateFromFirebase(ctx context.Context, nc rig.Client) error { func migrateFromFirebaseCredentials(ctx context.Context, nc rig.Client) error { var err error if credFilePath == "" { - credFilePath, err = common.PromptGetInput("Credentials Path:", common.ValidateNonEmpty) + credFilePath, err = common.PromptGetInput("Credentials Path:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -159,7 +159,7 @@ func migrateFromFirebaseCredentials(ctx context.Context, nc rig.Client) error { // input hashing key for password if hashingKey == "" { - hashingKey, err = common.PromptGetInput("Hashing Key:", common.ValidateNonEmpty) + hashingKey, err = common.PromptGetInput("Hashing Key:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -262,7 +262,7 @@ func migrateFromFirebaseCredentials(ctx context.Context, nc rig.Client) error { func migrateFromFirebaseUsersFile(ctx context.Context, nc rig.Client) error { var err error if usersFilePath == "" { - usersFilePath, err = common.PromptGetInput("users.json path:", common.ValidateNonEmpty) + usersFilePath, err = common.PromptGetInput("users.json path:", common.ValidateNonEmptyOpt) if err != nil { return err } @@ -289,7 +289,7 @@ func migrateFromFirebaseUsersFile(ctx context.Context, nc rig.Client) error { // input hashing key for password if hashingKey == "" { - hashingKey, err = common.PromptGetInput("Hashing Key:", common.ValidateNonEmpty) + hashingKey, err = common.PromptGetInput("Hashing Key:", common.ValidateNonEmptyOpt) if err != nil { return err } diff --git a/cmd/rig/cmd/user/remove_member.go b/cmd/rig/cmd/user/remove_member.go index f7b0586be..c5b3b6259 100644 --- a/cmd/rig/cmd/user/remove_member.go +++ b/cmd/rig/cmd/user/remove_member.go @@ -36,7 +36,7 @@ func UserRemoveMember(ctx context.Context, cmd *cobra.Command, args []string, nc } var i int - i, gname, err = common.PromptSelect("Select group", fields, false) + i, gname, err = common.PromptSelect("Select group", fields) if err != nil { return err } diff --git a/cmd/rig/cmd/user/update.go b/cmd/rig/cmd/user/update.go index a6667d3bc..343667563 100644 --- a/cmd/rig/cmd/user/update.go +++ b/cmd/rig/cmd/user/update.go @@ -12,7 +12,6 @@ import ( "github.com/rigdev/rig-go-sdk" "github.com/rigdev/rig/cmd/common" "github.com/rigdev/rig/pkg/errors" - utils2 "github.com/rigdev/rig/pkg/utils" "github.com/spf13/cobra" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" @@ -133,7 +132,7 @@ func UserUpdate(ctx context.Context, cmd *cobra.Command, args []string, nc rig.C updates := []*user.Update{} for { - i, res, err := common.PromptSelect("Choose a field to update:", fields, true) + i, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return err } @@ -166,7 +165,7 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { switch f { case userEmail: defEmail := u.GetUserInfo().GetEmail() - email, err := common.PromptGetInputWithDefault("Email:", utils2.ValidateEmail, defEmail) + email, err := common.PromptGetInput("Email:", common.ValidateEmailOpt, common.InputDefaultOpt(defEmail)) if err != nil { return nil, nil } @@ -180,7 +179,7 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { } case userUsername: defUsername := u.GetUserInfo().GetUsername() - username, err := common.PromptGetInputWithDefault("Username:", common.ValidateNonEmpty, defUsername) + username, err := common.PromptGetInput("Username:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defUsername)) if err != nil { return nil, nil } @@ -194,7 +193,7 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { } case userPhoneNumber: defPhone := u.GetUserInfo().GetPhoneNumber() - phone, err := common.PromptGetInputWithDefault("Phone:", utils2.ValidatePhone, defPhone) + phone, err := common.PromptGetInput("Phone:", common.ValidatePhoneOpt, common.InputDefaultOpt(defPhone)) if err != nil { return nil, nil } @@ -218,7 +217,7 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { }, nil case userIsEmailVerified: defIsEmailVerified := strconv.FormatBool(u.GetIsEmailVerified()) - isEmailVerified, err := common.PromptGetInputWithDefault("Is email verified:", common.BoolValidate, defIsEmailVerified) + isEmailVerified, err := common.PromptGetInput("Is email verified:", common.BoolValidateOpt, common.InputDefaultOpt(defIsEmailVerified)) if err != nil { return nil, nil } @@ -231,7 +230,7 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { } case userIsPhoneVerified: defIsPhoneVerified := strconv.FormatBool(u.GetIsPhoneVerified()) - isPhoneVerified, err := common.PromptGetInputWithDefault("Is phone verified:", common.BoolValidate, defIsPhoneVerified) + isPhoneVerified, err := common.PromptGetInput("Is phone verified:", common.BoolValidateOpt, common.InputDefaultOpt(defIsPhoneVerified)) if err != nil { return nil, nil } @@ -253,11 +252,11 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { } return u, err case userSetMetaData: - key, err := common.PromptGetInput("Key:", common.ValidateNonEmpty) + key, err := common.PromptGetInput("Key:", common.ValidateNonEmptyOpt) if err != nil { return nil, nil } - value, err := common.PromptGetInput("Value:", common.ValidateNonEmpty) + value, err := common.PromptGetInput("Value:", common.ValidateNonEmptyOpt) if err != nil { return nil, nil } @@ -270,7 +269,7 @@ func promptUserUpdate(f userField, u *user.User) (*user.Update, error) { }, }, nil case userDeleteMetaData: - key, err := common.PromptGetInput("Key:", common.ValidateNonEmpty) + key, err := common.PromptGetInput("Key:", common.ValidateNonEmptyOpt) if err != nil { return nil, nil } @@ -302,7 +301,7 @@ func getUserProfileUpdate(p *user.Profile) (*user.Update, error) { Country: p.GetCountry(), } for { - i, res, err := common.PromptSelect("Choose a field to update:", fields, true) + i, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return nil, nil } @@ -330,7 +329,7 @@ func promptUserProfileUpdate(f userProfileField, p *user.Profile) error { switch f { case userProfileFirstName: defFirstName := p.GetFirstName() - firstName, err := common.PromptGetInputWithDefault("First name:", common.ValidateNonEmpty, defFirstName) + firstName, err := common.PromptGetInput("First name:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defFirstName)) if err != nil { return err } @@ -339,7 +338,7 @@ func promptUserProfileUpdate(f userProfileField, p *user.Profile) error { } case userProfileLastName: defLastName := p.GetLastName() - lastName, err := common.PromptGetInputWithDefault("Last name:", common.ValidateNonEmpty, defLastName) + lastName, err := common.PromptGetInput("Last name:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defLastName)) if err != nil { return err } @@ -348,7 +347,7 @@ func promptUserProfileUpdate(f userProfileField, p *user.Profile) error { } case userProfilePreferredLanguage: defPreferredLanguage := p.GetPreferredLanguage() - preferredLanguage, err := common.PromptGetInputWithDefault("Preferred language:", common.ValidateNonEmpty, defPreferredLanguage) + preferredLanguage, err := common.PromptGetInput("Preferred language:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defPreferredLanguage)) if err != nil { return err } @@ -357,7 +356,7 @@ func promptUserProfileUpdate(f userProfileField, p *user.Profile) error { } case userProfileCountry: defCountry := p.GetCountry() - country, err := common.PromptGetInputWithDefault("Country:", common.ValidateNonEmpty, defCountry) + country, err := common.PromptGetInput("Country:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defCountry)) if err != nil { return err } diff --git a/cmd/rig/cmd/user/update_settings.go b/cmd/rig/cmd/user/update_settings.go index 902ede630..7031c9c53 100644 --- a/cmd/rig/cmd/user/update_settings.go +++ b/cmd/rig/cmd/user/update_settings.go @@ -153,7 +153,7 @@ func UserUpdateSettings(ctx context.Context, cmd *cobra.Command, args []string, } for { - i, res, err := common.PromptSelect("Choose a field to update:", fields, true) + i, res, err := common.PromptSelect("Choose a field to update:", fields) if err != nil { return err } @@ -193,7 +193,7 @@ func promptSettingsUpdate(f settingsField, s *settings.Settings) ([]*settings.Up switch f { case settingsAllowRegister: defAllowRegister := strconv.FormatBool(s.GetAllowRegister()) - allowRegister, err := common.PromptGetInputWithDefault("Allow Register:", common.BoolValidate, defAllowRegister) + allowRegister, err := common.PromptGetInput("Allow Register:", common.BoolValidateOpt, common.InputDefaultOpt(defAllowRegister)) if err != nil { return nil, nil } @@ -206,7 +206,7 @@ func promptSettingsUpdate(f settingsField, s *settings.Settings) ([]*settings.Up }, nil case settingsIsVerifiedEmailRequired: defIsVerifiedEmailRequired := strconv.FormatBool(s.GetIsVerifiedEmailRequired()) - isVerifiedEmailRequired, err := common.PromptGetInputWithDefault("Verify Email Required:", common.BoolValidate, defIsVerifiedEmailRequired) + isVerifiedEmailRequired, err := common.PromptGetInput("Verify Email Required:", common.BoolValidateOpt, common.InputDefaultOpt(defIsVerifiedEmailRequired)) if err != nil { return nil, nil } @@ -219,7 +219,7 @@ func promptSettingsUpdate(f settingsField, s *settings.Settings) ([]*settings.Up }, nil case settingsIsVerifiedPhoneRequired: defIsVerifiedPhoneRequired := strconv.FormatBool(s.GetIsVerifiedPhoneRequired()) - isVerifiedPhoneRequired, err := common.PromptGetInputWithDefault("Verify Phone Required:", common.BoolValidate, defIsVerifiedPhoneRequired) + isVerifiedPhoneRequired, err := common.PromptGetInput("Verify Phone Required:", common.BoolValidateOpt, common.InputDefaultOpt(defIsVerifiedPhoneRequired)) if err != nil { return nil, nil } @@ -232,7 +232,7 @@ func promptSettingsUpdate(f settingsField, s *settings.Settings) ([]*settings.Up }, nil case settingsAccessTokenTTL: defAccessTokenTtl := strconv.Itoa(int(s.GetAccessTokenTtl().AsDuration().Minutes())) - accessTokenTtl, err := common.PromptGetInputWithDefault("Access Token TTL (minutes):", common.ValidateInt, defAccessTokenTtl) + accessTokenTtl, err := common.PromptGetInput("Access Token TTL (minutes):", common.ValidateIntOpt, common.InputDefaultOpt(defAccessTokenTtl)) if err != nil { return nil, nil } @@ -249,7 +249,7 @@ func promptSettingsUpdate(f settingsField, s *settings.Settings) ([]*settings.Up }, err case settingsRefreshTokenTTL: defRefreshTokenTtl := strconv.Itoa(int(s.GetRefreshTokenTtl().AsDuration().Hours())) - refreshTokenTtl, err := common.PromptGetInputWithDefault("Refresh Token TTL (hours):", common.ValidateInt, defRefreshTokenTtl) + refreshTokenTtl, err := common.PromptGetInput("Refresh Token TTL (hours):", common.ValidateIntOpt, common.InputDefaultOpt(defRefreshTokenTtl)) if err != nil { return nil, nil } @@ -266,7 +266,7 @@ func promptSettingsUpdate(f settingsField, s *settings.Settings) ([]*settings.Up }, nil case settingsVerificationCodeTTL: defVerificationCodeTtl := strconv.Itoa(int(s.GetVerificationCodeTtl().AsDuration().Minutes())) - verificationCodeTtl, err := common.PromptGetInputWithDefault("Verification Code TTL (minutes):", common.ValidateInt, defVerificationCodeTtl) + verificationCodeTtl, err := common.PromptGetInput("Verification Code TTL (minutes):", common.ValidateIntOpt, common.InputDefaultOpt(defVerificationCodeTtl)) if err != nil { return nil, nil } @@ -309,7 +309,7 @@ func getPasswordHashingUpdate(psh *model.HashingConfig) (*settings.Update, error "Bcrypt", "Scrypt", } - _, res, err := common.PromptSelect("Choose hashing algorithm", fields, false) + _, res, err := common.PromptSelect("Choose hashing algorithm", fields) if err != nil { return nil, err } @@ -320,7 +320,7 @@ func getPasswordHashingUpdate(psh *model.HashingConfig) (*settings.Update, error } bcrypt := &model.BcryptHashingConfig{} - cost, err := common.PromptGetInputWithDefault("Cost:", common.ValidateInt, defCost) + cost, err := common.PromptGetInput("Cost:", common.ValidateIntOpt, common.InputDefaultOpt(defCost)) if err != nil { return nil, err } @@ -352,40 +352,40 @@ func getPasswordHashingUpdate(psh *model.HashingConfig) (*settings.Update, error } scrypt := &model.ScryptHashingConfig{} - key, err := common.PromptGetInputWithDefault("Key:", common.ValidateNonEmpty, defKey) + key, err := common.PromptGetInput("Key:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defKey)) if err != nil { return nil, err } scrypt.SignerKey = key - saltSeparator, err := common.PromptGetInputWithDefault("Salt Separator:", common.ValidateNonEmpty, defSaltSeparator) + saltSeparator, err := common.PromptGetInput("Salt Separator:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(defSaltSeparator)) if err != nil { return nil, err } scrypt.SaltSeparator = saltSeparator - rounds, err := common.PromptGetInputWithDefault("Rounds:", common.ValidateInt, defRounds) + rounds, err := common.PromptGetInput("Rounds:", common.ValidateIntOpt, common.InputDefaultOpt(defRounds)) if err != nil { return nil, err } roundsInt, _ := strconv.Atoi(rounds) scrypt.Rounds = int32(roundsInt) - memCost, err := common.PromptGetInputWithDefault("Memory Cost:", common.ValidateInt, defMemCost) + memCost, err := common.PromptGetInput("Memory Cost:", common.ValidateIntOpt, common.InputDefaultOpt(defMemCost)) if err != nil { return nil, err } memCostInt, _ := strconv.Atoi(memCost) scrypt.MemCost = int32(memCostInt) - parallelism, err := common.PromptGetInputWithDefault("Parallelism:", common.ValidateInt, defParallelism) + parallelism, err := common.PromptGetInput("Parallelism:", common.ValidateIntOpt, common.InputDefaultOpt(defParallelism)) if err != nil { return nil, err } parallelismInt, _ := strconv.Atoi(parallelism) scrypt.P = int32(parallelismInt) - keyLength, err := common.PromptGetInputWithDefault("Key Length:", common.ValidateInt, defKeyLength) + keyLength, err := common.PromptGetInput("Key Length:", common.ValidateIntOpt, common.InputDefaultOpt(defKeyLength)) if err != nil { return nil, err } @@ -421,7 +421,7 @@ func getLoginMechanismsUpdate(current []model.LoginType) (*settings.Update, erro selected := []model.LoginType{} for { - i, res, err := common.PromptSelect("Choose login types", fields, false) + i, res, err := common.PromptSelect("Choose login types", fields) if err != nil { fmt.Println(err.Error()) break @@ -479,7 +479,7 @@ func getOauthSettingsUpdate(current *settings.OauthSettings) ([]*settings.Update } callbacks := current.GetCallbackUrls() for { - _, res, err := common.PromptSelect("Choose Oauth provider", fields, false) + _, res, err := common.PromptSelect("Choose Oauth provider", fields) if err != nil { return nil, err } @@ -543,27 +543,27 @@ func getOauthSettingsUpdate(current *settings.OauthSettings) ([]*settings.Update func updateOauthProvider(u *settings.OauthProviderUpdate) (*settings.OauthProviderUpdate, error) { fmt.Println("Current Oauth Provider Settings: ", u) - allowLogin, err := common.PromptGetInputWithDefault("Allow Login:", common.BoolValidate, strconv.FormatBool(u.GetAllowLogin())) + allowLogin, err := common.PromptGetInput("Allow Login:", common.BoolValidateOpt, common.InputDefaultOpt(strconv.FormatBool(u.GetAllowLogin()))) if err != nil { return nil, err } allowLoginBool, _ := strconv.ParseBool(allowLogin) u.AllowLogin = allowLoginBool - allowRegister, err := common.PromptGetInputWithDefault("Allow Register:", common.BoolValidate, strconv.FormatBool(u.GetAllowRegister())) + allowRegister, err := common.PromptGetInput("Allow Register:", common.BoolValidateOpt, common.InputDefaultOpt(strconv.FormatBool(u.GetAllowRegister()))) if err != nil { return nil, err } allowRegisterBool, _ := strconv.ParseBool(allowRegister) u.AllowRegister = allowRegisterBool - clientID, err := common.PromptGetInputWithDefault("Client ID:", common.ValidateNonEmpty, u.GetCredentials().GetPublicKey()) + clientID, err := common.PromptGetInput("Client ID:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(u.GetCredentials().GetPublicKey())) if err != nil { return nil, err } u.Credentials.PublicKey = clientID - clientSecret, err := common.PromptGetInputWithDefault("Client Secret:", common.ValidateNonEmpty, u.Credentials.GetPrivateKey()) + clientSecret, err := common.PromptGetInput("Client Secret:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(u.Credentials.GetPrivateKey())) if err != nil { return nil, err } @@ -582,7 +582,7 @@ func updateCallbacks(current []string) []string { "Done", } for { - _, res, err := common.PromptSelect("Choose action", fields, false) + _, res, err := common.PromptSelect("Choose action", fields) if err != nil { fmt.Println(err.Error()) break @@ -591,7 +591,7 @@ func updateCallbacks(current []string) []string { break } if res == "Add" { - callback, err := common.PromptGetInput("Callback:", common.ValidateNonEmpty) + callback, err := common.PromptGetInput("Callback:", common.ValidateNonEmptyOpt) if err != nil { fmt.Println(err.Error()) continue @@ -603,12 +603,12 @@ func updateCallbacks(current []string) []string { fmt.Println("No callbacks to edit") continue } - i, res, err := common.PromptSelect("Choose callback to edit", current, false) + i, res, err := common.PromptSelect("Choose callback to edit", current) if err != nil { fmt.Println(err.Error()) continue } - callback, err := common.PromptGetInputWithDefault("Callback:", common.ValidateNonEmpty, res) + callback, err := common.PromptGetInput("Callback:", common.ValidateNonEmptyOpt, common.InputDefaultOpt(res)) if err != nil { fmt.Println(err.Error()) continue @@ -620,7 +620,7 @@ func updateCallbacks(current []string) []string { fmt.Println("No callbacks to remove") continue } - i, _, err := common.PromptSelect("Choose callback to remove", current, false) + i, _, err := common.PromptSelect("Choose callback to remove", current) if err != nil { fmt.Println(err.Error()) continue diff --git a/go.mod b/go.mod index 6ea545631..866736fa8 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,6 @@ require ( github.com/google/uuid v1.3.0 github.com/lucasepe/codename v0.2.0 github.com/mailjet/mailjet-apiv3-go v0.0.0-20201009050126-c24bc15a9394 - github.com/manifoldco/promptui v0.9.0 github.com/minio/minio-go/v7 v7.0.52 github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9 github.com/nyaruka/phonenumbers v1.1.7 @@ -47,6 +46,7 @@ require ( require ( firebase.google.com/go v3.13.0+incompatible + github.com/erikgeiser/promptkit v0.9.0 github.com/fatih/color v1.15.0 github.com/go-chi/chi/v5 v5.0.10 github.com/google/go-containerregistry v0.16.1 @@ -60,16 +60,28 @@ require ( cloud.google.com/go/firestore v1.9.0 // indirect cloud.google.com/go/longrunning v0.4.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/benbjohnson/clock v1.3.0 // indirect + github.com/charmbracelet/bubbles v0.16.1 // indirect + github.com/charmbracelet/bubbletea v0.24.2 // indirect + github.com/charmbracelet/lipgloss v0.7.1 // indirect + github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/docker/cli v24.0.0+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/google/gnostic-models v0.6.8 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/rivo/uniseg v0.2.0 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/rivo/uniseg v0.4.4 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/vbatts/tar-split v0.11.3 // indirect ) @@ -97,7 +109,6 @@ require ( github.com/bugsnag/bugsnag-go/v2 v2.2.0 // indirect github.com/bugsnag/panicwrap v1.3.4 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/distribution v2.8.2+incompatible github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect @@ -144,7 +155,7 @@ require ( github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/mod v0.11.0 // indirect - golang.org/x/term v0.10.0 // indirect + golang.org/x/term v0.11.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.10.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect @@ -197,8 +208,8 @@ require ( go.uber.org/dig v1.17.0 go.uber.org/multierr v1.11.0 // indirect golang.org/x/net v0.13.0 - golang.org/x/sys v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 k8s.io/utils v0.0.0-20230505201702-9f6742963106 diff --git a/go.sum b/go.sum index 27e0eed14..6892f6ac4 100644 --- a/go.sum +++ b/go.sum @@ -65,6 +65,8 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-proxyproto v0.0.0-20210323213023-7e956b284f0a/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aws/aws-sdk-go-v2 v1.18.1 h1:+tefE750oAb7ZQGzla6bLkOwfcQCEtC5y2RqoqCeqKo= github.com/aws/aws-sdk-go-v2 v1.18.1/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 h1:dK82zF6kkPeCo8J1e+tGx4JdvDIQzj7ygIoLg8WMuGs= @@ -93,6 +95,8 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12/go.mod h1:E4VrHCPzmVB/KFXt github.com/aws/aws-sdk-go-v2/service/sts v1.19.2/go.mod h1:dp0yLPsLBOi++WTxzCjA/oZqi6NPIhoR+uF7GeMU9eg= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -120,11 +124,14 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= +github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY= +github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc= +github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY= +github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg= +github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= +github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -134,6 +141,8 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/coreos/go-oidc/v3 v3.6.0 h1:AKVxfYw1Gmkn/w96z0DbT/B/xFnzTd3MkZvWLjF4n/o= @@ -174,6 +183,8 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/erikgeiser/promptkit v0.9.0 h1:3qL1mS/ntCrXdb8sTP/ka82CJ9kEQaGuYXNrYJkWYBc= +github.com/erikgeiser/promptkit v0.9.0/go.mod h1:pU9dtogSe3Jlc2AY77EP7R4WFP/vgD4v+iImC83KsCo= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= @@ -354,6 +365,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/localtunnel/go-localtunnel v0.0.0-20170326223115-8a804488f275 h1:IZycmTpoUtQK3PD60UYBwjaCUHUP7cML494ao9/O8+Q= github.com/localtunnel/go-localtunnel v0.0.0-20170326223115-8a804488f275/go.mod h1:zt6UU74K6Z6oMOYJbJzYpYucqdcQwSMPBEdSvGiaUMw= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasepe/codename v0.2.0 h1:zkW9mKWSO8jjVIYFyZWE9FPvBtFVJxgMpQcMkf4Vv20= github.com/lucasepe/codename v0.2.0/go.mod h1:RDcExRuZPWp5Uz+BosvpROFTrxpt5r1vSzBObHdBdDM= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -362,15 +375,17 @@ github.com/mailjet/mailjet-apiv3-go v0.0.0-20201009050126-c24bc15a9394 h1:+6kiV4 github.com/mailjet/mailjet-apiv3-go v0.0.0-20201009050126-c24bc15a9394/go.mod h1:ogN8Sxy3n5VKLhQxbtSBM3ICG/VgjXS/akQJIoDSrgA= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -396,6 +411,14 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJ github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -442,8 +465,10 @@ github.com/rigdev/rig-go-api v0.0.0-20230905151115-0a42d524bfae h1:suZ1T6nszSfIP github.com/rigdev/rig-go-api v0.0.0-20230905151115-0a42d524bfae/go.mod h1:fraLUk9ekeQvvu5bOmUmpNAsBqG2QzqWU9wzGbPwB/w= github.com/rigdev/rig-go-sdk v0.0.0-20230902170251-18fbb97d0692 h1:9K+F3uKbXaTC5iR6sy6tBodlmQVp8g+tB3o0hcWKtck= github.com/rigdev/rig-go-sdk v0.0.0-20230902170251-18fbb97d0692/go.mod h1:mC8jVtKLH3RusvgTaHSn3lJTyaVdgsSizn8Sjb5xaoM= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= @@ -681,7 +706,6 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -734,13 +758,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -752,8 +776,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 41dbfb719f95e52d9127e0644f9a13c1044adb2c Mon Sep 17 00:00:00 2001 From: Matias Frank Jensen Date: Thu, 7 Sep 2023 16:31:50 +0200 Subject: [PATCH 2/2] fix --- cmd/rig/cmd/fxtest/setup.go | 52 ------------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 cmd/rig/cmd/fxtest/setup.go diff --git a/cmd/rig/cmd/fxtest/setup.go b/cmd/rig/cmd/fxtest/setup.go deleted file mode 100644 index 9fa16bae8..000000000 --- a/cmd/rig/cmd/fxtest/setup.go +++ /dev/null @@ -1,52 +0,0 @@ -package fxtest - -import ( - "context" - - "github.com/rigdev/rig-go-sdk" - "github.com/rigdev/rig/cmd/rig/cmd/base" - "github.com/spf13/cobra" - "go.uber.org/fx" -) - -var ( - someFlag string -) - -type subcmd struct { - fx.In - - ctx context.Context - cfg *base.Config - client rig.Client -} - -func (f *subcmd) Setup(parent *cobra.Command) { - fxtest := &cobra.Command{ - Use: "subcmd", - Short: "subcmd test some stuff", - Args: cobra.ExactArgs(1), - RunE: f.Run, - } - fxtest.Flags().StringVarP(&someFlag, "someflag", "s", "", "some flag") - - parent.AddCommand(fxtest) -} - -func (f *subcmd) Run(cmd *cobra.Command, args []string) error { - return nil -} - -type root struct { - subcmd subcmd -} - -func (r *root) Execute() { - cmd := &cobra.Command{ - Use: "fxtest", - Short: "test of fx + cobra", - } - - r.subcmd.Setup(cmd) - return cmd.Execute() -}