From 61269918c61597f925b99998b47ec72d74778136 Mon Sep 17 00:00:00 2001 From: Pat Gavlin Date: Tue, 8 Nov 2022 13:29:59 -0800 Subject: [PATCH] [cli] Update the survey module Pick up the bugfix to https://github.com/AlecAivazis/survey/issues/228. This also provides a cleaner API for setting survey icons. --- pkg/backend/apply.go | 15 +++++++-------- pkg/cmd/pulumi/new.go | 10 +++------- pkg/cmd/pulumi/policy_new.go | 10 +++------- pkg/cmd/pulumi/refresh.go | 4 ++-- pkg/cmd/pulumi/state.go | 15 ++++----------- pkg/cmd/pulumi/util.go | 17 ++++++++++------- pkg/go.mod | 2 +- pkg/go.sum | 3 +-- tests/go.mod | 2 +- tests/go.sum | 3 +-- 10 files changed, 33 insertions(+), 48 deletions(-) diff --git a/pkg/backend/apply.go b/pkg/backend/apply.go index 6ba7816a14d2..0321652efe64 100644 --- a/pkg/backend/apply.go +++ b/pkg/backend/apply.go @@ -21,8 +21,8 @@ import ( "os" "strings" - survey "gopkg.in/AlecAivazis/survey.v1" - surveycore "gopkg.in/AlecAivazis/survey.v1/core" + survey "github.com/AlecAivazis/survey/v2" + surveycore "github.com/AlecAivazis/survey/v2/core" "github.com/pulumi/pulumi/pkg/v3/backend/display" "github.com/pulumi/pulumi/pkg/v3/engine" @@ -31,7 +31,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/common/diag/colors" sdkDisplay "github.com/pulumi/pulumi/sdk/v3/go/common/display" "github.com/pulumi/pulumi/sdk/v3/go/common/resource" - "github.com/pulumi/pulumi/sdk/v3/go/common/util/cmdutil" "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract" "github.com/pulumi/pulumi/sdk/v3/go/common/util/result" ) @@ -146,8 +145,10 @@ func confirmBeforeUpdating(kind apitype.UpdateKind, stack Stack, var response string surveycore.DisableColor = true - surveycore.QuestionIcon = "" - surveycore.SelectFocusIcon = opts.Display.Color.Colorize(colors.BrightGreen + ">" + colors.Reset) + surveyIcons := survey.WithIcons(func(icons *survey.IconSet) { + icons.Question = survey.Icon{} + icons.SelectFocus = survey.Icon{Text: opts.Display.Color.Colorize(colors.BrightGreen + ">" + colors.Reset)} + }) choices := []string{string(yes), string(no)} @@ -172,14 +173,12 @@ func confirmBeforeUpdating(kind apitype.UpdateKind, stack Stack, colors.Reset) } - cmdutil.EndKeypadTransmitMode() - // Now prompt the user for a yes, no, or details, and then proceed accordingly. if err := survey.AskOne(&survey.Select{ Message: prompt, Options: choices, Default: string(no), - }, &response, nil); err != nil { + }, &response, surveyIcons); err != nil { return result.FromError(fmt.Errorf("confirmation cancelled, not proceeding with the %s: %w", kind, err)) } diff --git a/pkg/cmd/pulumi/new.go b/pkg/cmd/pulumi/new.go index 00eaf98c75e7..a698dbf65828 100644 --- a/pkg/cmd/pulumi/new.go +++ b/pkg/cmd/pulumi/new.go @@ -29,10 +29,10 @@ import ( "gopkg.in/yaml.v3" + survey "github.com/AlecAivazis/survey/v2" + surveycore "github.com/AlecAivazis/survey/v2/core" "github.com/opentracing/opentracing-go" "github.com/spf13/cobra" - survey "gopkg.in/AlecAivazis/survey.v1" - surveycore "gopkg.in/AlecAivazis/survey.v1/core" "github.com/pulumi/pulumi/pkg/v3/backend" "github.com/pulumi/pulumi/pkg/v3/backend/display" @@ -814,8 +814,6 @@ func chooseTemplate(templates []workspace.Template, opts display.Options) (works // Customize the prompt a little bit (and disable color since it doesn't match our scheme). surveycore.DisableColor = true - surveycore.QuestionIcon = "" - surveycore.SelectFocusIcon = opts.Color.Colorize(colors.BrightGreen + ">" + colors.Reset) var selectedOption workspace.Template @@ -826,14 +824,12 @@ func chooseTemplate(templates []workspace.Template, opts display.Options) (works message := fmt.Sprintf("\rPlease choose a template (%d/%d shown):\n", pageSize, nopts) message = opts.Color.Colorize(colors.SpecPrompt + message + colors.Reset) - cmdutil.EndKeypadTransmitMode() - var option string if err := survey.AskOne(&survey.Select{ Message: message, Options: options, PageSize: pageSize, - }, &option, nil); err != nil { + }, &option, surveyIcons(opts.Color)); err != nil { return workspace.Template{}, errors.New(chooseTemplateErr) } diff --git a/pkg/cmd/pulumi/policy_new.go b/pkg/cmd/pulumi/policy_new.go index 6f4129d81168..c482c11ed358 100644 --- a/pkg/cmd/pulumi/policy_new.go +++ b/pkg/cmd/pulumi/policy_new.go @@ -23,6 +23,8 @@ import ( "sort" "strings" + survey "github.com/AlecAivazis/survey/v2" + surveycore "github.com/AlecAivazis/survey/v2/core" "github.com/opentracing/opentracing-go" "github.com/pulumi/pulumi/pkg/v3/backend/display" "github.com/pulumi/pulumi/pkg/v3/engine" @@ -33,8 +35,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract" "github.com/pulumi/pulumi/sdk/v3/go/common/workspace" "github.com/spf13/cobra" - survey "gopkg.in/AlecAivazis/survey.v1" - surveycore "gopkg.in/AlecAivazis/survey.v1/core" "gopkg.in/yaml.v3" ) @@ -335,21 +335,17 @@ func choosePolicyPackTemplate(templates []workspace.PolicyPackTemplate, // Customize the prompt a little bit (and disable color since it doesn't match our scheme). surveycore.DisableColor = true - surveycore.QuestionIcon = "" - surveycore.SelectFocusIcon = opts.Color.Colorize(colors.BrightGreen + ">" + colors.Reset) message := "\rPlease choose a template:" message = opts.Color.Colorize(colors.SpecPrompt + message + colors.Reset) options, optionToTemplateMap := policyTemplatesToOptionArrayAndMap(templates) - cmdutil.EndKeypadTransmitMode() - var option string if err := survey.AskOne(&survey.Select{ Message: message, Options: options, PageSize: optimalPageSize(optimalPageSizeOpts{nopts: len(options)}), - }, &option, nil); err != nil { + }, &option, surveyIcons(opts.Color)); err != nil { return workspace.PolicyPackTemplate{}, errors.New(chooseTemplateErr) } return optionToTemplateMap[option], nil diff --git a/pkg/cmd/pulumi/refresh.go b/pkg/cmd/pulumi/refresh.go index a5755e1d0eff..a9978e108987 100644 --- a/pkg/cmd/pulumi/refresh.go +++ b/pkg/cmd/pulumi/refresh.go @@ -21,9 +21,9 @@ import ( "os" "strings" + survey "github.com/AlecAivazis/survey/v2" + terminal "github.com/AlecAivazis/survey/v2/terminal" "github.com/spf13/cobra" - survey "gopkg.in/AlecAivazis/survey.v1" - terminal "gopkg.in/AlecAivazis/survey.v1/terminal" "github.com/pulumi/pulumi/pkg/v3/backend" "github.com/pulumi/pulumi/pkg/v3/backend/display" diff --git a/pkg/cmd/pulumi/state.go b/pkg/cmd/pulumi/state.go index e197cf8b21e9..618351a0b2fd 100644 --- a/pkg/cmd/pulumi/state.go +++ b/pkg/cmd/pulumi/state.go @@ -20,6 +20,8 @@ import ( "errors" "fmt" + survey "github.com/AlecAivazis/survey/v2" + surveycore "github.com/AlecAivazis/survey/v2/core" "github.com/pulumi/pulumi/pkg/v3/backend" "github.com/pulumi/pulumi/pkg/v3/backend/display" "github.com/pulumi/pulumi/pkg/v3/resource/deploy" @@ -32,8 +34,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract" "github.com/pulumi/pulumi/sdk/v3/go/common/util/result" "github.com/spf13/cobra" - survey "gopkg.in/AlecAivazis/survey.v1" - surveycore "gopkg.in/AlecAivazis/survey.v1/core" ) func newStateCmd() *cobra.Command { @@ -77,8 +77,6 @@ func locateStackResource(opts display.Options, snap *deploy.Snapshot, urn resour // Note: this is done to adhere to the same color scheme as the `pulumi new` picker, which also does this. surveycore.DisableColor = true - surveycore.QuestionIcon = "" - surveycore.SelectFocusIcon = opts.Color.Colorize(colors.BrightGreen + ">" + colors.Reset) prompt := "Multiple resources with the given URN exist, please select the one to edit:" prompt = opts.Color.Colorize(colors.SpecPrompt + prompt + colors.Reset) @@ -99,14 +97,12 @@ func locateStackResource(opts display.Options, snap *deploy.Snapshot, urn resour optionMap[message] = ambiguousResource } - cmdutil.EndKeypadTransmitMode() - var option string if err := survey.AskOne(&survey.Select{ Message: prompt, Options: options, PageSize: optimalPageSize(optimalPageSizeOpts{nopts: len(options)}), - }, &option, nil); err != nil { + }, &option, surveyIcons(opts.Color)); err != nil { return nil, errors.New("no resource selected") } @@ -154,14 +150,11 @@ func totalStateEdit(ctx context.Context, s backend.Stack, showPrompt bool, opts if showPrompt && cmdutil.Interactive() { confirm := false surveycore.DisableColor = true - surveycore.QuestionIcon = "" - surveycore.SelectFocusIcon = opts.Color.Colorize(colors.BrightGreen + ">" + colors.Reset) prompt := opts.Color.Colorize(colors.Yellow + "warning" + colors.Reset + ": ") prompt += "This command will edit your stack's state directly. Confirm?" - cmdutil.EndKeypadTransmitMode() if err = survey.AskOne(&survey.Confirm{ Message: prompt, - }, &confirm, nil); err != nil || !confirm { + }, &confirm, surveyIcons(opts.Color)); err != nil || !confirm { fmt.Println("confirmation declined") return result.Bail() } diff --git a/pkg/cmd/pulumi/util.go b/pkg/cmd/pulumi/util.go index 67103b7be9fc..e10d8b1581e1 100644 --- a/pkg/cmd/pulumi/util.go +++ b/pkg/cmd/pulumi/util.go @@ -31,9 +31,9 @@ import ( multierror "github.com/hashicorp/go-multierror" opentracing "github.com/opentracing/opentracing-go" + survey "github.com/AlecAivazis/survey/v2" + surveycore "github.com/AlecAivazis/survey/v2/core" git "github.com/go-git/go-git/v5" - survey "gopkg.in/AlecAivazis/survey.v1" - surveycore "gopkg.in/AlecAivazis/survey.v1/core" "github.com/pulumi/pulumi/pkg/v3/backend" "github.com/pulumi/pulumi/pkg/v3/backend/display" @@ -366,8 +366,6 @@ func chooseStack(ctx context.Context, // Customize the prompt a little bit (and disable color since it doesn't match our scheme). surveycore.DisableColor = true - surveycore.QuestionIcon = "" - surveycore.SelectFocusIcon = opts.Color.Colorize(colors.BrightGreen + ">" + colors.Reset) message := "\rPlease choose a stack" if offerNew { message += ", or create a new one:" @@ -376,14 +374,12 @@ func chooseStack(ctx context.Context, } message = opts.Color.Colorize(colors.SpecPrompt + message + colors.Reset) - cmdutil.EndKeypadTransmitMode() - var option string if err = survey.AskOne(&survey.Select{ Message: message, Options: options, Default: current, - }, &option, nil); err != nil { + }, &option, surveyIcons(opts.Color)); err != nil { return nil, errors.New(chooseStackErr) } @@ -964,3 +960,10 @@ func log3rdPartySecretsProviderDecryptionEvent(ctx context.Context, backend back } } } + +func surveyIcons(color colors.Colorization) survey.AskOpt { + return survey.WithIcons(func(icons *survey.IconSet) { + icons.Question = survey.Icon{} + icons.SelectFocus = survey.Icon{Text: color.Colorize(colors.BrightGreen + ">" + colors.Reset)} + }) +} diff --git a/pkg/go.mod b/pkg/go.mod index e2e947c00b2c..fc0e8eb3dfc5 100644 --- a/pkg/go.mod +++ b/pkg/go.mod @@ -55,13 +55,13 @@ require ( google.golang.org/api v0.91.0 google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 google.golang.org/grpc v1.49.0 - gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f gopkg.in/yaml.v3 v3.0.1 pgregory.net/rapid v0.4.7 sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 ) require ( + github.com/AlecAivazis/survey/v2 v2.0.5 github.com/edsrzf/mmap-go v1.1.0 github.com/go-git/go-git/v5 v5.4.2 github.com/hexops/gotextdiff v1.0.3 diff --git a/pkg/go.sum b/pkg/go.sum index d3954a4807e9..023ba9201a2c 100644 --- a/pkg/go.sum +++ b/pkg/go.sum @@ -100,6 +100,7 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.13/go.mod h1:5pSSGY0Bhuk7waT contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/AlecAivazis/survey/v2 v2.0.5 h1:xpZp+Q55wi5C7Iaze+40onHnEkex1jSc34CltJjOoPM= github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74= github.com/Azure/azure-amqp-common-go/v3 v3.1.0/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= github.com/Azure/azure-amqp-common-go/v3 v3.1.1/go.mod h1:YsDaPfaO9Ub2XeSKdIy2DfwuiQlHQCauHJwSqtrkECI= @@ -2472,8 +2473,6 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f h1:AQkMzsSzHWrgZWqGRpuRaRPDmyNibcXlpGcnQJ7HxZw= -gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f/go.mod h1:CaHjv79TCgAvXMSFJSVgonHXYWxnhzI3eoHtnX5UgUo= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/tests/go.mod b/tests/go.mod index 23132e87f484..7d46164c357a 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -25,6 +25,7 @@ require ( cloud.google.com/go/kms v1.4.0 // indirect cloud.google.com/go/logging v1.0.0 // indirect cloud.google.com/go/storage v1.24.0 // indirect + github.com/AlecAivazis/survey/v2 v2.0.5 // indirect github.com/Azure/azure-sdk-for-go v66.0.0+incompatible // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0 // indirect @@ -171,7 +172,6 @@ require ( google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 // indirect google.golang.org/protobuf v1.28.1 // indirect - gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/tests/go.sum b/tests/go.sum index c0f9760bf747..fc1b8aece6bd 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -100,6 +100,7 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.13/go.mod h1:5pSSGY0Bhuk7waT contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/AlecAivazis/survey/v2 v2.0.5 h1:xpZp+Q55wi5C7Iaze+40onHnEkex1jSc34CltJjOoPM= github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74= github.com/Azure/azure-amqp-common-go/v3 v3.1.0/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= github.com/Azure/azure-amqp-common-go/v3 v3.1.1/go.mod h1:YsDaPfaO9Ub2XeSKdIy2DfwuiQlHQCauHJwSqtrkECI= @@ -2442,8 +2443,6 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f h1:AQkMzsSzHWrgZWqGRpuRaRPDmyNibcXlpGcnQJ7HxZw= -gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f/go.mod h1:CaHjv79TCgAvXMSFJSVgonHXYWxnhzI3eoHtnX5UgUo= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=