Skip to content

Commit

Permalink
[cli] Update the survey module
Browse files Browse the repository at this point in the history
Pick up the bugfix to AlecAivazis/survey#228.

This also provides a cleaner API for setting survey icons.
  • Loading branch information
pgavlin committed Nov 8, 2022
1 parent 362523f commit 6126991
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 48 deletions.
15 changes: 7 additions & 8 deletions pkg/backend/apply.go
Expand Up @@ -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"
Expand All @@ -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"
)
Expand Down Expand Up @@ -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)}

Expand All @@ -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))
}

Expand Down
10 changes: 3 additions & 7 deletions pkg/cmd/pulumi/new.go
Expand Up @@ -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"
Expand Down Expand Up @@ -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

Expand All @@ -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)
}

Expand Down
10 changes: 3 additions & 7 deletions pkg/cmd/pulumi/policy_new.go
Expand Up @@ -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"
Expand All @@ -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"
)

Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions pkg/cmd/pulumi/refresh.go
Expand Up @@ -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"
Expand Down
15 changes: 4 additions & 11 deletions pkg/cmd/pulumi/state.go
Expand Up @@ -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"
Expand All @@ -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 {
Expand Down Expand Up @@ -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)

Expand All @@ -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")
}

Expand Down Expand Up @@ -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()
}
Expand Down
17 changes: 10 additions & 7 deletions pkg/cmd/pulumi/util.go
Expand Up @@ -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"
Expand Down Expand Up @@ -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:"
Expand All @@ -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)
}

Expand Down Expand Up @@ -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)}
})
}
2 changes: 1 addition & 1 deletion pkg/go.mod
Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions pkg/go.sum
Expand Up @@ -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=
Expand Down Expand Up @@ -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=
Expand Down
2 changes: 1 addition & 1 deletion tests/go.mod
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions tests/go.sum
Expand Up @@ -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=
Expand Down Expand Up @@ -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=
Expand Down

0 comments on commit 6126991

Please sign in to comment.