From 6e0b171d16f90296bfa181923f59f4d2b9560639 Mon Sep 17 00:00:00 2001 From: Johannes Brunswicker Date: Fri, 26 Apr 2024 08:51:34 +0200 Subject: [PATCH] Fix terragrunt parsing (#409) * removed diagnostic.hasError check as it is expected to have an error every time something is present that we are not looking explicitly for. * introduced test if a terraform_version_constraint can be found in hcl file. * don't raise error if there is no terraform version constraint in terragrunt file. --- lib/param_parsing/terragrunt.go | 5 +++-- lib/param_parsing/terragrunt_test.go | 20 ++++++++++--------- .../test_terragrunt_hcl/terragrunt.hcl | 1 + 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/param_parsing/terragrunt.go b/lib/param_parsing/terragrunt.go index ff50c9fe..26bedcb2 100644 --- a/lib/param_parsing/terragrunt.go +++ b/lib/param_parsing/terragrunt.go @@ -25,8 +25,9 @@ func GetVersionFromTerragrunt(params Params) (Params, error) { } var versionFromTerragrunt terragruntVersionConstraints diagnostics = gohcl.DecodeBody(hclFile.Body, nil, &versionFromTerragrunt) - if diagnostics.HasErrors() { - return params, fmt.Errorf("could not decode body of HCL file %q", filePath) + if versionFromTerragrunt.TerraformVersionConstraint == "" { + logger.Infof("No terraform version constraint in %q", filePath) + return params, nil } version, err := lib.GetSemver(versionFromTerragrunt.TerraformVersionConstraint, params.MirrorURL) if err != nil { diff --git a/lib/param_parsing/terragrunt_test.go b/lib/param_parsing/terragrunt_test.go index 118baaf8..c7400d3a 100644 --- a/lib/param_parsing/terragrunt_test.go +++ b/lib/param_parsing/terragrunt_test.go @@ -3,15 +3,18 @@ package param_parsing import ( "github.com/hashicorp/go-version" "github.com/warrensbox/terraform-switcher/lib" - "strings" "testing" ) func TestGetVersionFromTerragrunt(t *testing.T) { var params Params + logger = lib.InitLogger("DEBUG") params = initParams(params) params.ChDirPath = "../../test-data/integration-tests/test_terragrunt_hcl" - params, _ = GetVersionFromTerragrunt(params) + params, err := GetVersionFromTerragrunt(params) + if err != nil { + t.Fatalf("Got error '%s'", err) + } v1, _ := version.NewVersion("0.13") v2, _ := version.NewVersion("0.14") actualVersion, _ := version.NewVersion(params.Version) @@ -37,12 +40,11 @@ func TestGetVersionFromTerragrunt_erroneous_file(t *testing.T) { params = initParams(params) params.ChDirPath = "../../test-data/skip-integration-tests/test_terragrunt_error_hcl" params, err := GetVersionFromTerragrunt(params) - if err == nil { - t.Error("Expected error but got none.") - } else { - expectedError := "could not decode body of HCL file" - if !strings.Contains(err.Error(), expectedError) { - t.Errorf("Expected error to contain '%q', got '%q'", expectedError, err) - } + if err != nil { + t.Error(err) + } + expected := "" + if params.Version != expected { + t.Errorf("Expected version '%s', got '%s'", expected, params.Version) } } diff --git a/test-data/integration-tests/test_terragrunt_hcl/terragrunt.hcl b/test-data/integration-tests/test_terragrunt_hcl/terragrunt.hcl index 9237b428..0ef5567e 100644 --- a/test-data/integration-tests/test_terragrunt_hcl/terragrunt.hcl +++ b/test-data/integration-tests/test_terragrunt_hcl/terragrunt.hcl @@ -1 +1,2 @@ +terragrunt_version_constraint = "= 0.36.2" terraform_version_constraint = ">= 0.13, < 0.14"