From 4a24742043cb371d6d6ecd071e6f13d4f3fcfc7e Mon Sep 17 00:00:00 2001 From: Mahendra Bagul Date: Fri, 16 Sep 2022 21:45:58 +0530 Subject: [PATCH 1/2] considered default value event if it was empty in non terminal env --- pkg/devspace/config/loader/variable/undefined_variable.go | 7 ++++++- pkg/util/log/stream_logger.go | 4 ++-- pkg/util/survey/survey.go | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/devspace/config/loader/variable/undefined_variable.go b/pkg/devspace/config/loader/variable/undefined_variable.go index 154f0ab269..e309958cd7 100644 --- a/pkg/devspace/config/loader/variable/undefined_variable.go +++ b/pkg/devspace/config/loader/variable/undefined_variable.go @@ -91,9 +91,14 @@ func askQuestion(variable *latest.Variable, log log.Logger) (string, error) { if variable.Default != "" { params.DefaultValue = fmt.Sprintf("%v", variable.Default) } - + if variable.Default != nil { + params.DefaultValueSet = true + } if len(variable.Options) > 0 { params.Options = variable.Options + if variable.Default == nil { + params.DefaultValue = params.Options[0] + } } else if variable.ValidationPattern != "" { params.ValidationRegexPattern = variable.ValidationPattern diff --git a/pkg/util/log/stream_logger.go b/pkg/util/log/stream_logger.go index 0675f5af97..d6f8103fbc 100644 --- a/pkg/util/log/stream_logger.go +++ b/pkg/util/log/stream_logger.go @@ -516,9 +516,9 @@ func (s *StreamLogger) Question(params *survey.QuestionOptions) (string, error) s.m.Lock() defer s.m.Unlock() - if !s.isTerminal && (params.DefaultValue == "" || params.DefaultValue == "") { + if !s.isTerminal && !params.DefaultValueSet { return "", fmt.Errorf("cannot ask question '%s' because currently you're not using devspace in a terminal and default value is also not provided", params.Question) - } else if !s.isTerminal && params.DefaultValue != "" { + } else if !s.isTerminal && params.DefaultValueSet { return params.DefaultValue, nil } diff --git a/pkg/util/survey/survey.go b/pkg/util/survey/survey.go index 840b835f6f..d93c43dac6 100644 --- a/pkg/util/survey/survey.go +++ b/pkg/util/survey/survey.go @@ -13,6 +13,7 @@ import ( type QuestionOptions struct { Question string DefaultValue string + DefaultValueSet bool ValidationRegexPattern string ValidationMessage string ValidationFunc func(value string) error From 5b7492b2e1981363b9b8e6eb2e71eb170c003212 Mon Sep 17 00:00:00 2001 From: Mahendra Bagul Date: Mon, 19 Sep 2022 12:33:10 +0530 Subject: [PATCH 2/2] added a unit test for checking if the DefaultValueSet is set or not --- .../testing/with_default_value/devspace.yaml | 10 ++++++ .../without_default_value/devspace.yaml | 9 +++++ .../loader/variable/undefined_variable.go | 19 +++++++---- .../variable/undefined_variable_test.go | 34 +++++++++++++++++++ 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 pkg/devspace/config/loader/variable/testing/with_default_value/devspace.yaml create mode 100644 pkg/devspace/config/loader/variable/testing/without_default_value/devspace.yaml create mode 100644 pkg/devspace/config/loader/variable/undefined_variable_test.go diff --git a/pkg/devspace/config/loader/variable/testing/with_default_value/devspace.yaml b/pkg/devspace/config/loader/variable/testing/with_default_value/devspace.yaml new file mode 100644 index 0000000000..5987f7cf49 --- /dev/null +++ b/pkg/devspace/config/loader/variable/testing/with_default_value/devspace.yaml @@ -0,0 +1,10 @@ +version: v2beta1 +name: test + +vars: + MYSQL_VERSION: + question: Which mysql version do you want to use? + default: "" +pipelines: + dev: |- + echo ${MYSQL_VERSION} diff --git a/pkg/devspace/config/loader/variable/testing/without_default_value/devspace.yaml b/pkg/devspace/config/loader/variable/testing/without_default_value/devspace.yaml new file mode 100644 index 0000000000..e5d1e95264 --- /dev/null +++ b/pkg/devspace/config/loader/variable/testing/without_default_value/devspace.yaml @@ -0,0 +1,9 @@ +version: v2beta1 +name: test + +vars: + MYSQL_VERSION: + question: Which mysql version do you want to use? +pipelines: + dev: |- + echo ${MYSQL_VERSION} diff --git a/pkg/devspace/config/loader/variable/undefined_variable.go b/pkg/devspace/config/loader/variable/undefined_variable.go index e309958cd7..2f3b718092 100644 --- a/pkg/devspace/config/loader/variable/undefined_variable.go +++ b/pkg/devspace/config/loader/variable/undefined_variable.go @@ -69,6 +69,17 @@ func convertStringValue(value string) interface{} { } func askQuestion(variable *latest.Variable, log log.Logger) (string, error) { + params := getParams(variable) + + answer, err := log.Question(params) + if err != nil { + return "", err + } + + return answer, nil +} + +func getParams(variable *latest.Variable) *survey.QuestionOptions { params := &survey.QuestionOptions{} if variable == nil { @@ -107,11 +118,5 @@ func askQuestion(variable *latest.Variable, log log.Logger) (string, error) { } } } - - answer, err := log.Question(params) - if err != nil { - return "", err - } - - return answer, nil + return params } diff --git a/pkg/devspace/config/loader/variable/undefined_variable_test.go b/pkg/devspace/config/loader/variable/undefined_variable_test.go new file mode 100644 index 0000000000..d0cfcf4436 --- /dev/null +++ b/pkg/devspace/config/loader/variable/undefined_variable_test.go @@ -0,0 +1,34 @@ +package variable + +import ( + "fmt" + "github.com/loft-sh/devspace/pkg/devspace/config/versions/latest" + "gopkg.in/yaml.v3" + "os" + "testing" +) + +func TestGetParams(t *testing.T) { + testCases := map[string]bool{"testing/with_default_value/devspace.yaml": true, "testing/without_default_value/devspace.yaml": false} + for input, expected := range testCases { + config := getConfig(input) + variable := config.Vars["MYSQL_VERSION"] + actual := getParams(variable) + if expected != actual.DefaultValueSet { + t.Errorf("TestCase %s\nactual:%t\nexpected:%t", input, actual.DefaultValueSet, true) + } + } +} + +func getConfig(filename string) *latest.Config { + v := &latest.Config{} + yamlFile, err := os.ReadFile(filename) + if err != nil { + fmt.Printf("yamlFile.Get err #%v ", err) + } + err = yaml.Unmarshal(yamlFile, v) + if err != nil { + fmt.Printf("Unmarshal: %v", err) + } + return v +}