Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package terragrunt for openSUSE:Factory 
checked in at 2023-06-11 19:55:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/terragrunt (Old)
 and      /work/SRC/openSUSE:Factory/.terragrunt.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "terragrunt"

Sun Jun 11 19:55:15 2023 rev:51 rq:1091992 version:0.46.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/terragrunt/terragrunt.changes    2023-06-01 
17:19:51.582281062 +0200
+++ /work/SRC/openSUSE:Factory/.terragrunt.new.15902/terragrunt.changes 
2023-06-11 19:57:59.048138030 +0200
@@ -1,0 +2,12 @@
+Fri Jun 02 04:50:38 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 0.46.1:
+  * Fixed reading of outputs during destroy (#2589)
+
+-------------------------------------------------------------------
+Fri Jun 02 04:49:13 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 0.46.0:
+  * fix: redirecting stdout to stderr in hook commands (#2587)
+
+-------------------------------------------------------------------

Old:
----
  terragrunt-0.45.18.obscpio

New:
----
  terragrunt-0.46.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ terragrunt.spec ++++++
--- /var/tmp/diff_new_pack.WY32x3/_old  2023-06-11 19:57:59.836142783 +0200
+++ /var/tmp/diff_new_pack.WY32x3/_new  2023-06-11 19:57:59.840142806 +0200
@@ -19,7 +19,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           terragrunt
-Version:        0.45.18
+Version:        0.46.1
 Release:        0
 Summary:        Thin wrapper for Terraform for working with multiple Terraform 
modules
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.WY32x3/_old  2023-06-11 19:57:59.876143024 +0200
+++ /var/tmp/diff_new_pack.WY32x3/_new  2023-06-11 19:57:59.880143047 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/gruntwork-io/terragrunt</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v0.45.18</param>
+    <param name="revision">v0.46.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.WY32x3/_old  2023-06-11 19:57:59.900143168 +0200
+++ /var/tmp/diff_new_pack.WY32x3/_new  2023-06-11 19:57:59.904143193 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/gruntwork-io/terragrunt</param>
-              <param 
name="changesrevision">1494e777b1f2ce18797ce1c9e46859bdef7f33ed</param></service></servicedata>
+              <param 
name="changesrevision">e190fa3d9a0a92c32fd5d031851775a702179db7</param></service></servicedata>
 (No newline at EOF)
 

++++++ terragrunt-0.45.18.obscpio -> terragrunt-0.46.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terragrunt-0.45.18/cli/cli_app.go 
new/terragrunt-0.46.1/cli/cli_app.go
--- old/terragrunt-0.45.18/cli/cli_app.go       2023-05-31 13:37:00.000000000 
+0200
+++ new/terragrunt-0.46.1/cli/cli_app.go        2023-06-01 20:15:40.000000000 
+0200
@@ -705,12 +705,18 @@
                                workingDir = *curHook.WorkingDir
                        }
 
+                       var suppressStdout bool
+                       if curHook.SuppressStdout != nil && 
*curHook.SuppressStdout {
+                               suppressStdout = true
+                       }
+
                        actionToExecute := curHook.Execute[0]
                        actionParams := curHook.Execute[1:]
+
                        _, possibleError := shell.RunShellCommandWithOutput(
                                terragruntOptions,
                                workingDir,
-                               false,
+                               suppressStdout,
                                false,
                                actionToExecute, actionParams...,
                        )
@@ -765,6 +771,11 @@
                workingDir = *curHook.WorkingDir
        }
 
+       var suppressStdout bool
+       if curHook.SuppressStdout != nil && *curHook.SuppressStdout {
+               suppressStdout = true
+       }
+
        actionToExecute := curHook.Execute[0]
        actionParams := curHook.Execute[1:]
 
@@ -776,7 +787,7 @@
                _, possibleError := shell.RunShellCommandWithOutput(
                        terragruntOptions,
                        workingDir,
-                       false,
+                       suppressStdout,
                        false,
                        actionToExecute, actionParams...,
                )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terragrunt-0.45.18/config/config.go 
new/terragrunt-0.46.1/config/config.go
--- old/terragrunt-0.45.18/config/config.go     2023-05-31 13:37:00.000000000 
+0200
+++ new/terragrunt-0.46.1/config/config.go      2023-06-01 20:15:40.000000000 
+0200
@@ -328,19 +328,21 @@
 
 // Hook specifies terraform commands (apply/plan) and array of os commands to 
execute
 type Hook struct {
-       Name       string   `hcl:"name,label" cty:"name"`
-       Commands   []string `hcl:"commands,attr" cty:"commands"`
-       Execute    []string `hcl:"execute,attr" cty:"execute"`
-       RunOnError *bool    `hcl:"run_on_error,attr" cty:"run_on_error"`
-       WorkingDir *string  `hcl:"working_dir,attr" cty:"working_dir"`
+       Name           string   `hcl:"name,label" cty:"name"`
+       Commands       []string `hcl:"commands,attr" cty:"commands"`
+       Execute        []string `hcl:"execute,attr" cty:"execute"`
+       RunOnError     *bool    `hcl:"run_on_error,attr" cty:"run_on_error"`
+       SuppressStdout *bool    `hcl:"suppress_stdout,attr" 
cty:"suppress_stdout"`
+       WorkingDir     *string  `hcl:"working_dir,attr" cty:"working_dir"`
 }
 
 type ErrorHook struct {
-       Name       string   `hcl:"name,label" cty:"name"`
-       Commands   []string `hcl:"commands,attr" cty:"commands"`
-       Execute    []string `hcl:"execute,attr" cty:"execute"`
-       OnErrors   []string `hcl:"on_errors,attr" cty:"on_errors"`
-       WorkingDir *string  `hcl:"working_dir,attr" cty:"working_dir"`
+       Name           string   `hcl:"name,label" cty:"name"`
+       Commands       []string `hcl:"commands,attr" cty:"commands"`
+       Execute        []string `hcl:"execute,attr" cty:"execute"`
+       OnErrors       []string `hcl:"on_errors,attr" cty:"on_errors"`
+       SuppressStdout *bool    `hcl:"suppress_stdout,attr" 
cty:"suppress_stdout"`
+       WorkingDir     *string  `hcl:"working_dir,attr" cty:"working_dir"`
 }
 
 func (conf *Hook) String() string {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terragrunt-0.45.18/config/dependency.go 
new/terragrunt-0.46.1/config/dependency.go
--- old/terragrunt-0.45.18/config/dependency.go 2023-05-31 13:37:00.000000000 
+0200
+++ new/terragrunt-0.46.1/config/dependency.go  2023-06-01 20:15:40.000000000 
+0200
@@ -488,6 +488,8 @@
 func cloneTerragruntOptionsForDependencyOutput(terragruntOptions 
*options.TerragruntOptions, targetConfig string) (*options.TerragruntOptions, 
error) {
        targetOptions := cloneTerragruntOptionsForDependency(terragruntOptions, 
targetConfig)
        targetOptions.IncludeModulePrefix = false
+       // just read outputs, so no need to check for dependent modules
+       targetOptions.CheckDependentModules = false
        targetOptions.TerraformCommand = "output"
        targetOptions.TerraformCliArgs = []string{"output", "-json"}
 
@@ -819,7 +821,10 @@
                return nil, errors.WithStackTrace(err)
        }
 
-       stdoutBufferWriter.Flush()
+       err = stdoutBufferWriter.Flush()
+       if err != nil {
+               return nil, errors.WithStackTrace(err)
+       }
        jsonString := stdoutBuffer.String()
        jsonBytes := []byte(strings.TrimSpace(jsonString))
        targetTGOptions.Logger.Debugf("Retrieved output from %s as json: %s", 
targetConfig, jsonString)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terragrunt-0.45.18/docs/_docs/04_reference/config-blocks-and-attributes.md 
new/terragrunt-0.46.1/docs/_docs/04_reference/config-blocks-and-attributes.md
--- 
old/terragrunt-0.45.18/docs/_docs/04_reference/config-blocks-and-attributes.md  
    2023-05-31 13:37:00.000000000 +0200
+++ 
new/terragrunt-0.46.1/docs/_docs/04_reference/config-blocks-and-attributes.md   
    2023-06-01 20:15:40.000000000 +0200
@@ -100,6 +100,7 @@
       `terragrunt-read-config` and `init-from-module` hooks, and the terraform 
module directory for other command hooks.
     - `run_on_error` (optional) : If set to true, this hook will run even if a 
previous hook hit an error, or in the
       case of "after" hooks, if the Terraform command hit an error. Default is 
false.
+    - `suppress_stdout` (optional) : If set to true, the stdout output of the 
executed commands will be suppressed. This can be useful when there are scripts 
relying on terraform's output and any other output would break their parsing.
 
 - `after_hook` (block): Nested blocks used to specify command hooks that 
should be run after `terraform` is called.
   Hooks run from the terragrunt configuration directory (the directory where 
`terragrunt.hcl` lives). Supports the same
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terragrunt-0.45.18/shell/run_shell_cmd.go 
new/terragrunt-0.46.1/shell/run_shell_cmd.go
--- old/terragrunt-0.45.18/shell/run_shell_cmd.go       2023-05-31 
13:37:00.000000000 +0200
+++ new/terragrunt-0.46.1/shell/run_shell_cmd.go        2023-06-01 
20:15:40.000000000 +0200
@@ -7,7 +7,6 @@
        "os"
        "os/exec"
        "os/signal"
-       "reflect"
        "strings"
        "syscall"
        "time"
@@ -84,12 +83,6 @@
        if terragruntOptions.IncludeModulePrefix {
                prefix = terragruntOptions.OutputPrefix
        }
-       // Terragrunt can run some commands (such as terraform remote config) 
before running the actual terraform
-       // command requested by the user. The output of these other commands 
should not end up on stdout as this
-       // breaks scripts relying on terraform's output.
-       if !reflect.DeepEqual(terragruntOptions.TerraformCliArgs, args) {
-               outWriter = terragruntOptions.ErrWriter
-       }
 
        if workingDir == "" {
                cmd.Dir = terragruntOptions.WorkingDir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terragrunt-0.45.18/shell/run_shell_cmd_test.go 
new/terragrunt-0.46.1/shell/run_shell_cmd_test.go
--- old/terragrunt-0.45.18/shell/run_shell_cmd_test.go  2023-05-31 
13:37:00.000000000 +0200
+++ new/terragrunt-0.46.1/shell/run_shell_cmd_test.go   2023-06-01 
20:15:40.000000000 +0200
@@ -44,7 +44,7 @@
        stderr = new(bytes.Buffer)
 
        terragruntOptions.TerraformCliArgs = []string{}
-       terragruntOptions.Writer = stdout
+       terragruntOptions.Writer = stderr
        terragruntOptions.ErrWriter = stderr
 
        cmd = RunShellCommand(terragruntOptions, "terraform", "--version")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/a/main.tf 
new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/a/main.tf
--- old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/a/main.tf      
1970-01-01 01:00:00.000000000 +0100
+++ new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/a/main.tf       
2023-06-01 20:15:40.000000000 +0200
@@ -0,0 +1,9 @@
+resource "local_file" "file" {
+  content         = "module-a"
+  filename        = "module-a.txt"
+  file_permission = "0644"
+}
+
+output "value" {
+  value = local_file.file.filename
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/b/main.tf 
new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/b/main.tf
--- old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/b/main.tf      
1970-01-01 01:00:00.000000000 +0100
+++ new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/b/main.tf       
2023-06-01 20:15:40.000000000 +0200
@@ -0,0 +1,9 @@
+resource "local_file" "file" {
+  content         = "module-b"
+  filename        = "module-b.txt"
+  file_permission = "0644"
+}
+
+output "value" {
+  value = local_file.file.filename
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/c/main.tf 
new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/c/main.tf
--- old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/c/main.tf      
1970-01-01 01:00:00.000000000 +0100
+++ new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/c/main.tf       
2023-06-01 20:15:40.000000000 +0200
@@ -0,0 +1,9 @@
+resource "local_file" "file" {
+  content         = "module-c"
+  filename        = "module-c.txt"
+  file_permission = "0644"
+}
+
+output "value" {
+  value = local_file.file.filename
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/c/terragrunt.hcl 
new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/c/terragrunt.hcl
--- 
old/terragrunt-0.45.18/test/fixture-destroy-dependent-module/c/terragrunt.hcl   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/terragrunt-0.46.1/test/fixture-destroy-dependent-module/c/terragrunt.hcl    
    2023-06-01 20:15:40.000000000 +0200
@@ -0,0 +1,13 @@
+dependency "a" {
+  config_path = "../a"
+}
+
+dependency "b" {
+  config_path = "../b"
+}
+
+inputs = {
+  test_a_arn = dependency.a.outputs.value
+  test_b_arn = dependency.b.outputs.value
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terragrunt-0.45.18/test/fixture-hooks/init-once/with-source-no-backend-suppress-hook-stdout/terragrunt.hcl
 
new/terragrunt-0.46.1/test/fixture-hooks/init-once/with-source-no-backend-suppress-hook-stdout/terragrunt.hcl
--- 
old/terragrunt-0.45.18/test/fixture-hooks/init-once/with-source-no-backend-suppress-hook-stdout/terragrunt.hcl
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/terragrunt-0.46.1/test/fixture-hooks/init-once/with-source-no-backend-suppress-hook-stdout/terragrunt.hcl
       2023-06-01 20:15:40.000000000 +0200
@@ -0,0 +1,19 @@
+terraform {
+  source = "../base-module"
+
+  # SHOULD execute.
+  # If AFTER_INIT_FROM_MODULE_ONLY_ONCE is not echoed exactly once, the test 
failed
+  after_hook "after_init_from_module" {
+    commands = ["init-from-module"]
+    execute = ["echo","AFTER_INIT_FROM_MODULE_ONLY_ONCE"]
+    suppress_stdout = true
+  }
+
+  # SHOULD execute.
+  # If AFTER_INIT_ONLY_ONCE is not echoed exactly once, the test failed
+  after_hook "after_init" {
+    commands = ["init"]
+    execute = ["echo","AFTER_INIT_ONLY_ONCE"]
+    suppress_stdout = true
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terragrunt-0.45.18/test/integration_test.go 
new/terragrunt-0.46.1/test/integration_test.go
--- old/terragrunt-0.45.18/test/integration_test.go     2023-05-31 
13:37:00.000000000 +0200
+++ new/terragrunt-0.46.1/test/integration_test.go      2023-06-01 
20:15:40.000000000 +0200
@@ -49,109 +49,110 @@
 
 // hard-code this to match the test fixture for now
 const (
-       TERRAFORM_REMOTE_STATE_S3_REGION                        = "us-west-2"
-       TERRAFORM_REMOTE_STATE_GCP_REGION                       = "eu"
-       TEST_FIXTURE_PATH                                       = "fixture/"
-       TEST_FIXTURE_CODEGEN_PATH                               = 
"fixture-codegen"
-       TEST_FIXTURE_GCS_PATH                                   = "fixture-gcs/"
-       TEST_FIXTURE_GCS_BYO_BUCKET_PATH                        = 
"fixture-gcs-byo-bucket/"
-       TEST_FIXTURE_STACK                                      = 
"fixture-stack/"
-       TEST_FIXTURE_GRAPH_DEPENDENCIES                         = 
"fixture-graph-dependencies"
-       TEST_FIXTURE_OUTPUT_ALL                                 = 
"fixture-output-all"
-       TEST_FIXTURE_OUTPUT_FROM_REMOTE_STATE                   = 
"fixture-output-from-remote-state"
-       TEST_FIXTURE_OUTPUT_FROM_DEPENDENCY                     = 
"fixture-output-from-dependency"
-       TEST_FIXTURE_STDOUT                                     = 
"fixture-download/stdout-test"
-       TEST_FIXTURE_EXTRA_ARGS_PATH                            = 
"fixture-extra-args/"
-       TEST_FIXTURE_ENV_VARS_BLOCK_PATH                        = 
"fixture-env-vars-block/"
-       TEST_FIXTURE_SKIP                                       = 
"fixture-skip/"
-       TEST_FIXTURE_CONFIG_SINGLE_JSON_PATH                    = 
"fixture-config-files/single-json-config"
-       TEST_FIXTURE_PREVENT_DESTROY_OVERRIDE                   = 
"fixture-prevent-destroy-override/child"
-       TEST_FIXTURE_PREVENT_DESTROY_NOT_SET                    = 
"fixture-prevent-destroy-not-set/child"
-       TEST_FIXTURE_LOCAL_PREVENT_DESTROY                      = 
"fixture-download/local-with-prevent-destroy"
-       TEST_FIXTURE_LOCAL_PREVENT_DESTROY_DEPENDENCIES         = 
"fixture-download/local-with-prevent-destroy-dependencies"
-       TEST_FIXTURE_LOCAL_INCLUDE_PREVENT_DESTROY_DEPENDENCIES = 
"fixture-download/local-include-with-prevent-destroy-dependencies"
-       TEST_FIXTURE_NOT_EXISTING_SOURCE                        = 
"fixture-download/invalid-path"
-       TEST_FIXTURE_EXTERNAL_DEPENDENCIE                       = 
"fixture-external-dependencies"
-       TEST_FIXTURE_MISSING_DEPENDENCIE                        = 
"fixture-missing-dependencies/main"
-       TEST_FIXTURE_GET_OUTPUT                                 = 
"fixture-get-output"
-       TEST_FIXTURE_HOOKS_BEFORE_ONLY_PATH                     = 
"fixture-hooks/before-only"
-       TEST_FIXTURE_HOOKS_ALL_PATH                             = 
"fixture-hooks/all"
-       TEST_FIXTURE_HOOKS_AFTER_ONLY_PATH                      = 
"fixture-hooks/after-only"
-       TEST_FIXTURE_HOOKS_BEFORE_AND_AFTER_PATH                = 
"fixture-hooks/before-and-after"
-       TEST_FIXTURE_HOOKS_BEFORE_AFTER_AND_ERROR_MERGE_PATH    = 
"fixture-hooks/before-after-and-error-merge"
-       TEST_FIXTURE_HOOKS_SKIP_ON_ERROR_PATH                   = 
"fixture-hooks/skip-on-error"
-       TEST_FIXTURE_ERROR_HOOKS_PATH                           = 
"fixture-hooks/error-hooks"
-       TEST_FIXTURE_HOOKS_ONE_ARG_ACTION_PATH                  = 
"fixture-hooks/one-arg-action"
-       TEST_FIXTURE_HOOKS_EMPTY_STRING_COMMAND_PATH            = 
"fixture-hooks/bad-arg-action/empty-string-command"
-       TEST_FIXTURE_HOOKS_EMPTY_COMMAND_LIST_PATH              = 
"fixture-hooks/bad-arg-action/empty-command-list"
-       TEST_FIXTURE_HOOKS_INTERPOLATIONS_PATH                  = 
"fixture-hooks/interpolations"
-       TEST_FIXTURE_HOOKS_INIT_ONCE_NO_SOURCE_NO_BACKEND       = 
"fixture-hooks/init-once/no-source-no-backend"
-       TEST_FIXTURE_HOOKS_INIT_ONCE_NO_SOURCE_WITH_BACKEND     = 
"fixture-hooks/init-once/no-source-with-backend"
-       TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND     = 
"fixture-hooks/init-once/with-source-no-backend"
-       TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_WITH_BACKEND   = 
"fixture-hooks/init-once/with-source-with-backend"
-       TEST_FIXTURE_HOOKS_WORKING_DIR                          = 
"fixture-hooks/working_dir"
-       TEST_FIXTURE_FAILED_TERRAFORM                           = 
"fixture-failure"
-       TEST_FIXTURE_EXIT_CODE                                  = 
"fixture-exit-code"
-       TEST_FIXTURE_AUTO_RETRY_RERUN                           = 
"fixture-auto-retry/re-run"
-       TEST_FIXTURE_AUTO_RETRY_EXHAUST                         = 
"fixture-auto-retry/exhaust"
-       TEST_FIXTURE_AUTO_RETRY_CUSTOM_ERRORS                   = 
"fixture-auto-retry/custom-errors"
-       TEST_FIXTURE_AUTO_RETRY_CUSTOM_ERRORS_NOT_SET           = 
"fixture-auto-retry/custom-errors-not-set"
-       TEST_FIXTURE_AUTO_RETRY_APPLY_ALL_RETRIES               = 
"fixture-auto-retry/apply-all"
-       TEST_FIXTURE_AUTO_RETRY_CONFIGURABLE_RETRIES            = 
"fixture-auto-retry/configurable-retries"
-       TEST_FIXTURE_AUTO_RETRY_CONFIGURABLE_RETRIES_ERROR_1    = 
"fixture-auto-retry/configurable-retries-incorrect-retry-attempts"
-       TEST_FIXTURE_AUTO_RETRY_CONFIGURABLE_RETRIES_ERROR_2    = 
"fixture-auto-retry/configurable-retries-incorrect-sleep-interval"
-       TEST_FIXTURE_AWS_PROVIDER_PATCH                         = 
"fixture-aws-provider-patch"
-       TEST_FIXTURE_INPUTS                                     = 
"fixture-inputs"
-       TEST_FIXTURE_LOCALS_ERROR_UNDEFINED_LOCAL               = 
"fixture-locals-errors/undefined-local"
-       TEST_FIXTURE_LOCALS_ERROR_UNDEFINED_LOCAL_BUT_INPUT     = 
"fixture-locals-errors/undefined-local-but-input"
-       TEST_FIXTURE_LOCALS_CANONICAL                           = 
"fixture-locals/canonical"
-       TEST_FIXTURE_LOCALS_IN_INCLUDE                          = 
"fixture-locals/local-in-include"
-       TEST_FIXTURE_LOCAL_RUN_ONCE                             = 
"fixture-locals/run-once"
-       TEST_FIXTURE_LOCAL_RUN_MULTIPLE                         = 
"fixture-locals/run-multiple"
-       TEST_FIXTURE_LOCALS_IN_INCLUDE_CHILD_REL_PATH           = "qa/my-app"
-       TEST_FIXTURE_READ_CONFIG                                = 
"fixture-read-config"
-       TEST_FIXTURE_READ_IAM_ROLE                              = 
"fixture-read-config/iam_role_in_file"
-       TEST_FIXTURE_IAM_ROLES_MULTIPLE_MODULES                 = 
"fixture-read-config/iam_roles_multiple_modules"
-       TEST_FIXTURE_RELATIVE_INCLUDE_CMD                       = 
"fixture-relative-include-cmd"
-       TEST_FIXTURE_AWS_GET_CALLER_IDENTITY                    = 
"fixture-get-aws-caller-identity"
-       TEST_FIXTURE_GET_REPO_ROOT                              = 
"fixture-get-repo-root"
-       TEST_FIXTURE_PATH_RELATIVE_FROM_INCLUDE                 = 
"fixture-get-path/fixture-path_relative_from_include"
-       TEST_FIXTURE_GET_PATH_FROM_REPO_ROOT                    = 
"fixture-get-path/fixture-get-path-from-repo-root"
-       TEST_FIXTURE_GET_PATH_TO_REPO_ROOT                      = 
"fixture-get-path/fixture-get-path-to-repo-root"
-       TEST_FIXTURE_GET_PLATFORM                               = 
"fixture-get-platform"
-       TEST_FIXTURE_GET_TERRAGRUNT_SOURCE_HCL                  = 
"fixture-get-terragrunt-source-hcl"
-       TEST_FIXTURE_GET_TERRAGRUNT_SOURCE_CLI                  = 
"fixture-get-terragrunt-source-cli"
-       TEST_FIXTURE_REGRESSIONS                                = 
"fixture-regressions"
-       TEST_FIXTURE_PLANFILE_ORDER                             = 
"fixture-planfile-order-test"
-       TEST_FIXTURE_DIRS_PATH                                  = "fixture-dirs"
-       TEST_FIXTURE_PARALLELISM                                = 
"fixture-parallelism"
-       TEST_FIXTURE_SOPS                                       = "fixture-sops"
-       TEST_FIXTURE_DESTROY_WARNING                            = 
"fixture-destroy-warning"
-       TEST_FIXTURE_INCLUDE_PARENT                             = 
"fixture-include-parent"
-       TEST_FIXTURE_AUTO_INIT                                  = 
"fixture-download/init-on-source-change"
-       TEST_FIXTURE_DISJOINT                                   = 
"fixture-stack/disjoint"
-       TEST_FIXTURE_BROKEN_LOCALS                              = 
"fixture-broken-locals"
-       TEST_FIXTURE_BROKEN_DEPENDENCY                          = 
"fixture-broken-dependency"
-       TEST_FIXTURE_RENDER_JSON_METADATA                       = 
"fixture-render-json-metadata"
-       TEST_FIXTURE_RENDER_JSON_MOCK_OUTPUTS                   = 
"fixture-render-json-mock-outputs"
-       TEST_FIXTURE_STARTSWITH                                 = 
"fixture-startswith"
-       TEST_FIXTURE_TIMECMP                                    = 
"fixture-timecmp"
-       TEST_FIXTURE_TIMECMP_INVALID_TIMESTAMP                  = 
"fixture-timecmp-errors/invalid-timestamp"
-       TEST_FIXTURE_ENDSWITH                                   = 
"fixture-endswith"
-       TEST_FIXTURE_TFLINT_NO_ISSUES_FOUND                     = 
"fixture-tflint/no-issues-found"
-       TEST_FIXTURE_TFLINT_ISSUES_FOUND                        = 
"fixture-tflint/issues-found"
-       TEST_FIXTURE_TFLINT_NO_CONFIG_FILE                      = 
"fixture-tflint/no-config-file"
-       TEST_FIXTURE_TFLINT_MODULE_FOUND                        = 
"fixture-tflint/module-found"
-       TEST_FIXTURE_TFLINT_NO_TF_SOURCE_PATH                   = 
"fixture-tflint/no-tf-source"
-       TEST_FIXTURE_PARALLEL_RUN                               = 
"fixture-parallel-run"
-       TEST_FIXTURE_INIT_ERROR                                 = 
"fixture-init-error"
-       TEST_FIXTURE_MODULE_PATH_ERROR                          = 
"fixture-module-path-in-error"
-       TEST_FIXTURE_HCLFMT_DIFF                                = 
"fixture-hclfmt-diff"
-       TERRAFORM_BINARY                                        = "terraform"
-       TERRAFORM_FOLDER                                        = ".terraform"
-       TERRAFORM_STATE                                         = 
"terraform.tfstate"
-       TERRAFORM_STATE_BACKUP                                  = 
"terraform.tfstate.backup"
-       TERRAGRUNT_CACHE                                        = 
".terragrunt-cache"
+       TERRAFORM_REMOTE_STATE_S3_REGION                                        
 = "us-west-2"
+       TERRAFORM_REMOTE_STATE_GCP_REGION                                       
 = "eu"
+       TEST_FIXTURE_PATH                                                       
 = "fixture/"
+       TEST_FIXTURE_CODEGEN_PATH                                               
 = "fixture-codegen"
+       TEST_FIXTURE_GCS_PATH                                                   
 = "fixture-gcs/"
+       TEST_FIXTURE_GCS_BYO_BUCKET_PATH                                        
 = "fixture-gcs-byo-bucket/"
+       TEST_FIXTURE_STACK                                                      
 = "fixture-stack/"
+       TEST_FIXTURE_GRAPH_DEPENDENCIES                                         
 = "fixture-graph-dependencies"
+       TEST_FIXTURE_OUTPUT_ALL                                                 
 = "fixture-output-all"
+       TEST_FIXTURE_OUTPUT_FROM_REMOTE_STATE                                   
 = "fixture-output-from-remote-state"
+       TEST_FIXTURE_OUTPUT_FROM_DEPENDENCY                                     
 = "fixture-output-from-dependency"
+       TEST_FIXTURE_STDOUT                                                     
 = "fixture-download/stdout-test"
+       TEST_FIXTURE_EXTRA_ARGS_PATH                                            
 = "fixture-extra-args/"
+       TEST_FIXTURE_ENV_VARS_BLOCK_PATH                                        
 = "fixture-env-vars-block/"
+       TEST_FIXTURE_SKIP                                                       
 = "fixture-skip/"
+       TEST_FIXTURE_CONFIG_SINGLE_JSON_PATH                                    
 = "fixture-config-files/single-json-config"
+       TEST_FIXTURE_PREVENT_DESTROY_OVERRIDE                                   
 = "fixture-prevent-destroy-override/child"
+       TEST_FIXTURE_PREVENT_DESTROY_NOT_SET                                    
 = "fixture-prevent-destroy-not-set/child"
+       TEST_FIXTURE_LOCAL_PREVENT_DESTROY                                      
 = "fixture-download/local-with-prevent-destroy"
+       TEST_FIXTURE_LOCAL_PREVENT_DESTROY_DEPENDENCIES                         
 = "fixture-download/local-with-prevent-destroy-dependencies"
+       TEST_FIXTURE_LOCAL_INCLUDE_PREVENT_DESTROY_DEPENDENCIES                 
 = "fixture-download/local-include-with-prevent-destroy-dependencies"
+       TEST_FIXTURE_NOT_EXISTING_SOURCE                                        
 = "fixture-download/invalid-path"
+       TEST_FIXTURE_EXTERNAL_DEPENDENCIE                                       
 = "fixture-external-dependencies"
+       TEST_FIXTURE_MISSING_DEPENDENCIE                                        
 = "fixture-missing-dependencies/main"
+       TEST_FIXTURE_GET_OUTPUT                                                 
 = "fixture-get-output"
+       TEST_FIXTURE_HOOKS_BEFORE_ONLY_PATH                                     
 = "fixture-hooks/before-only"
+       TEST_FIXTURE_HOOKS_ALL_PATH                                             
 = "fixture-hooks/all"
+       TEST_FIXTURE_HOOKS_AFTER_ONLY_PATH                                      
 = "fixture-hooks/after-only"
+       TEST_FIXTURE_HOOKS_BEFORE_AND_AFTER_PATH                                
 = "fixture-hooks/before-and-after"
+       TEST_FIXTURE_HOOKS_BEFORE_AFTER_AND_ERROR_MERGE_PATH                    
 = "fixture-hooks/before-after-and-error-merge"
+       TEST_FIXTURE_HOOKS_SKIP_ON_ERROR_PATH                                   
 = "fixture-hooks/skip-on-error"
+       TEST_FIXTURE_ERROR_HOOKS_PATH                                           
 = "fixture-hooks/error-hooks"
+       TEST_FIXTURE_HOOKS_ONE_ARG_ACTION_PATH                                  
 = "fixture-hooks/one-arg-action"
+       TEST_FIXTURE_HOOKS_EMPTY_STRING_COMMAND_PATH                            
 = "fixture-hooks/bad-arg-action/empty-string-command"
+       TEST_FIXTURE_HOOKS_EMPTY_COMMAND_LIST_PATH                              
 = "fixture-hooks/bad-arg-action/empty-command-list"
+       TEST_FIXTURE_HOOKS_INTERPOLATIONS_PATH                                  
 = "fixture-hooks/interpolations"
+       TEST_FIXTURE_HOOKS_INIT_ONCE_NO_SOURCE_NO_BACKEND                       
 = "fixture-hooks/init-once/no-source-no-backend"
+       TEST_FIXTURE_HOOKS_INIT_ONCE_NO_SOURCE_WITH_BACKEND                     
 = "fixture-hooks/init-once/no-source-with-backend"
+       TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND                     
 = "fixture-hooks/init-once/with-source-no-backend"
+       
TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND_SUPPRESS_HOOK_STDOUT = 
"fixture-hooks/init-once/with-source-no-backend-suppress-hook-stdout"
+       TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_WITH_BACKEND                   
 = "fixture-hooks/init-once/with-source-with-backend"
+       TEST_FIXTURE_FAILED_TERRAFORM                                           
 = "fixture-failure"
+       TEST_FIXTURE_EXIT_CODE                                                  
 = "fixture-exit-code"
+       TEST_FIXTURE_AUTO_RETRY_RERUN                                           
 = "fixture-auto-retry/re-run"
+       TEST_FIXTURE_AUTO_RETRY_EXHAUST                                         
 = "fixture-auto-retry/exhaust"
+       TEST_FIXTURE_AUTO_RETRY_CUSTOM_ERRORS                                   
 = "fixture-auto-retry/custom-errors"
+       TEST_FIXTURE_AUTO_RETRY_CUSTOM_ERRORS_NOT_SET                           
 = "fixture-auto-retry/custom-errors-not-set"
+       TEST_FIXTURE_AUTO_RETRY_APPLY_ALL_RETRIES                               
 = "fixture-auto-retry/apply-all"
+       TEST_FIXTURE_AUTO_RETRY_CONFIGURABLE_RETRIES                            
 = "fixture-auto-retry/configurable-retries"
+       TEST_FIXTURE_AUTO_RETRY_CONFIGURABLE_RETRIES_ERROR_1                    
 = "fixture-auto-retry/configurable-retries-incorrect-retry-attempts"
+       TEST_FIXTURE_AUTO_RETRY_CONFIGURABLE_RETRIES_ERROR_2                    
 = "fixture-auto-retry/configurable-retries-incorrect-sleep-interval"
+       TEST_FIXTURE_AWS_PROVIDER_PATCH                                         
 = "fixture-aws-provider-patch"
+       TEST_FIXTURE_INPUTS                                                     
 = "fixture-inputs"
+       TEST_FIXTURE_LOCALS_ERROR_UNDEFINED_LOCAL                               
 = "fixture-locals-errors/undefined-local"
+       TEST_FIXTURE_LOCALS_ERROR_UNDEFINED_LOCAL_BUT_INPUT                     
 = "fixture-locals-errors/undefined-local-but-input"
+       TEST_FIXTURE_LOCALS_CANONICAL                                           
 = "fixture-locals/canonical"
+       TEST_FIXTURE_LOCALS_IN_INCLUDE                                          
 = "fixture-locals/local-in-include"
+       TEST_FIXTURE_LOCAL_RUN_ONCE                                             
 = "fixture-locals/run-once"
+       TEST_FIXTURE_LOCAL_RUN_MULTIPLE                                         
 = "fixture-locals/run-multiple"
+       TEST_FIXTURE_LOCALS_IN_INCLUDE_CHILD_REL_PATH                           
 = "qa/my-app"
+       TEST_FIXTURE_READ_CONFIG                                                
 = "fixture-read-config"
+       TEST_FIXTURE_READ_IAM_ROLE                                              
 = "fixture-read-config/iam_role_in_file"
+       TEST_FIXTURE_IAM_ROLES_MULTIPLE_MODULES                                 
 = "fixture-read-config/iam_roles_multiple_modules"
+       TEST_FIXTURE_RELATIVE_INCLUDE_CMD                                       
 = "fixture-relative-include-cmd"
+       TEST_FIXTURE_AWS_GET_CALLER_IDENTITY                                    
 = "fixture-get-aws-caller-identity"
+       TEST_FIXTURE_GET_REPO_ROOT                                              
 = "fixture-get-repo-root"
+       TEST_FIXTURE_PATH_RELATIVE_FROM_INCLUDE                                 
 = "fixture-get-path/fixture-path_relative_from_include"
+       TEST_FIXTURE_GET_PATH_FROM_REPO_ROOT                                    
 = "fixture-get-path/fixture-get-path-from-repo-root"
+       TEST_FIXTURE_GET_PATH_TO_REPO_ROOT                                      
 = "fixture-get-path/fixture-get-path-to-repo-root"
+       TEST_FIXTURE_GET_PLATFORM                                               
 = "fixture-get-platform"
+       TEST_FIXTURE_GET_TERRAGRUNT_SOURCE_HCL                                  
 = "fixture-get-terragrunt-source-hcl"
+       TEST_FIXTURE_GET_TERRAGRUNT_SOURCE_CLI                                  
 = "fixture-get-terragrunt-source-cli"
+       TEST_FIXTURE_REGRESSIONS                                                
 = "fixture-regressions"
+       TEST_FIXTURE_PLANFILE_ORDER                                             
 = "fixture-planfile-order-test"
+       TEST_FIXTURE_DIRS_PATH                                                  
 = "fixture-dirs"
+       TEST_FIXTURE_PARALLELISM                                                
 = "fixture-parallelism"
+       TEST_FIXTURE_SOPS                                                       
 = "fixture-sops"
+       TEST_FIXTURE_DESTROY_WARNING                                            
 = "fixture-destroy-warning"
+       TEST_FIXTURE_INCLUDE_PARENT                                             
 = "fixture-include-parent"
+       TEST_FIXTURE_AUTO_INIT                                                  
 = "fixture-download/init-on-source-change"
+       TEST_FIXTURE_DISJOINT                                                   
 = "fixture-stack/disjoint"
+       TEST_FIXTURE_BROKEN_LOCALS                                              
 = "fixture-broken-locals"
+       TEST_FIXTURE_BROKEN_DEPENDENCY                                          
 = "fixture-broken-dependency"
+       TEST_FIXTURE_RENDER_JSON_METADATA                                       
 = "fixture-render-json-metadata"
+       TEST_FIXTURE_RENDER_JSON_MOCK_OUTPUTS                                   
 = "fixture-render-json-mock-outputs"
+       TEST_FIXTURE_STARTSWITH                                                 
 = "fixture-startswith"
+       TEST_FIXTURE_TIMECMP                                                    
 = "fixture-timecmp"
+       TEST_FIXTURE_TIMECMP_INVALID_TIMESTAMP                                  
 = "fixture-timecmp-errors/invalid-timestamp"
+       TEST_FIXTURE_ENDSWITH                                                   
 = "fixture-endswith"
+       TEST_FIXTURE_TFLINT_NO_ISSUES_FOUND                                     
 = "fixture-tflint/no-issues-found"
+       TEST_FIXTURE_TFLINT_ISSUES_FOUND                                        
 = "fixture-tflint/issues-found"
+       TEST_FIXTURE_TFLINT_NO_CONFIG_FILE                                      
 = "fixture-tflint/no-config-file"
+       TEST_FIXTURE_TFLINT_MODULE_FOUND                                        
 = "fixture-tflint/module-found"
+       TEST_FIXTURE_TFLINT_NO_TF_SOURCE_PATH                                   
 = "fixture-tflint/no-tf-source"
+       TEST_FIXTURE_PARALLEL_RUN                                               
 = "fixture-parallel-run"
+       TEST_FIXTURE_INIT_ERROR                                                 
 = "fixture-init-error"
+       TEST_FIXTURE_MODULE_PATH_ERROR                                          
 = "fixture-module-path-in-error"
+       TEST_FIXTURE_HCLFMT_DIFF                                                
 = "fixture-hclfmt-diff"
+       TEST_FIXTURE_DESTROY_DEPENDENT_MODULE                                   
 = "fixture-destroy-dependent-module"
+       TERRAFORM_BINARY                                                        
 = "terraform"
+       TERRAFORM_FOLDER                                                        
 = ".terraform"
+       TERRAFORM_STATE                                                         
 = "terraform.tfstate"
+       TERRAFORM_STATE_BACKUP                                                  
 = "terraform.tfstate.backup"
+       TERRAGRUNT_CACHE                                                        
 = ".terragrunt-cache"
 
        qaMyAppRelPath  = "qa/my-app"
        fixtureDownload = "fixture-download"
@@ -174,7 +175,7 @@
        )
 
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt apply 
-auto-approve --terragrunt-non-interactive --terragrunt-working-dir %s", 
rootPath), &stdout, &stderr)
-       output := stderr.String()
+       output := stdout.String()
 
        if err != nil {
                t.Errorf("Did not expect to get error: %s", err.Error())
@@ -205,8 +206,7 @@
        )
 
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt apply 
-auto-approve --terragrunt-non-interactive --terragrunt-working-dir %s", 
rootPath), &stdout, &stderr)
-       output := stderr.String()
-
+       output := stdout.String()
        if err != nil {
                t.Errorf("Did not expect to get error: %s", err.Error())
        }
@@ -231,7 +231,7 @@
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt apply 
-auto-approve --terragrunt-non-interactive --terragrunt-working-dir %s 
--terragrunt-log-level debug", rootPath), &stdout, &stderr)
        logBufferContentsLineByLine(t, stdout, "apply stdout")
        logBufferContentsLineByLine(t, stderr, "apply stderr")
-       output := stderr.String()
+       output := stdout.String()
 
        if err != nil {
                t.Errorf("Did not expect to get error: %s", err.Error())
@@ -261,7 +261,7 @@
        )
 
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt apply 
-auto-approve --terragrunt-non-interactive --terragrunt-working-dir %s", 
rootPath), &stdout, &stderr)
-       output := stderr.String()
+       output := stdout.String()
 
        if err != nil {
                t.Errorf("Did not expect to get error: %s", err.Error())
@@ -360,7 +360,7 @@
        _, beforeException := ioutil.ReadFile(rootPath + "/before.out")
        _, afterException := ioutil.ReadFile(rootPath + "/after.out")
 
-       output := stderr.String()
+       output := stdout.String()
 
        if err != nil {
                t.Errorf("Did not expect to get error: %s", err.Error())
@@ -389,7 +389,8 @@
 
        stdout := bytes.Buffer{}
        stderr := bytes.Buffer{}
-       runTerragruntCommand(t, fmt.Sprintf("terragrunt apply -auto-approve 
--terragrunt-non-interactive --terragrunt-config %s --terragrunt-working-dir 
%s", tmpTerragruntConfigPath, childPath), &stdout, &stderr)
+       err := runTerragruntCommand(t, fmt.Sprintf("terragrunt apply 
-auto-approve --terragrunt-non-interactive --terragrunt-config %s 
--terragrunt-working-dir %s", tmpTerragruntConfigPath, childPath), &stdout, 
&stderr)
+       assert.ErrorContains(t, err, "executable file not found in $PATH")
 
        _, beforeException := ioutil.ReadFile(childPath + "/before.out")
        _, beforeChildException := ioutil.ReadFile(childPath + 
"/before-child.out")
@@ -428,7 +429,7 @@
 
        assert.Error(t, err)
 
-       output := stderr.String()
+       output := stdout.String()
 
        assert.Contains(t, output, "BEFORE_SHOULD_DISPLAY")
        assert.NotContains(t, output, "BEFORE_NODISPLAY")
@@ -542,7 +543,7 @@
        )
 
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt apply 
-auto-approve --terragrunt-non-interactive --terragrunt-working-dir %s", 
rootPath), &stdout, &stderr)
-       erroutput := stderr.String()
+       output := stdout.String()
 
        homePath := os.Getenv("HOME")
        if homePath == "" {
@@ -553,7 +554,7 @@
                t.Errorf("Did not expect to get error: %s", err.Error())
        }
 
-       assert.Contains(t, erroutput, homePath)
+       assert.Contains(t, output, homePath)
 
 }
 
@@ -1847,9 +1848,9 @@
 func TestTerragruntInfo(t *testing.T) {
        t.Parallel()
 
-       cleanupTerraformFolder(t, 
TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND)
+       cleanupTerraformFolder(t, 
TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND_SUPPRESS_HOOK_STDOUT)
        tmpEnvPath := copyEnvironment(t, "fixture-hooks/init-once")
-       rootPath := util.JoinPath(tmpEnvPath, 
TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND)
+       rootPath := util.JoinPath(tmpEnvPath, 
TEST_FIXTURE_HOOKS_INIT_ONCE_WITH_SOURCE_NO_BACKEND_SUPPRESS_HOOK_STDOUT)
 
        showStdout := bytes.Buffer{}
        showStderr := bytes.Buffer{}
@@ -3399,20 +3400,22 @@
                        },
                        "before_hook": map[string]interface{}{
                                "before_hook_1": map[string]interface{}{
-                                       "name":         "before_hook_1",
-                                       "commands":     []interface{}{"apply", 
"plan"},
-                                       "execute":      []interface{}{"touch", 
"before.out"},
-                                       "working_dir":  nil,
-                                       "run_on_error": true,
+                                       "name":            "before_hook_1",
+                                       "commands":        
[]interface{}{"apply", "plan"},
+                                       "execute":         
[]interface{}{"touch", "before.out"},
+                                       "working_dir":     nil,
+                                       "run_on_error":    true,
+                                       "suppress_stdout": nil,
                                },
                        },
                        "after_hook": map[string]interface{}{
                                "after_hook_1": map[string]interface{}{
-                                       "name":         "after_hook_1",
-                                       "commands":     []interface{}{"apply", 
"plan"},
-                                       "execute":      []interface{}{"touch", 
"after.out"},
-                                       "working_dir":  nil,
-                                       "run_on_error": true,
+                                       "name":            "after_hook_1",
+                                       "commands":        
[]interface{}{"apply", "plan"},
+                                       "execute":         
[]interface{}{"touch", "after.out"},
+                                       "working_dir":     nil,
+                                       "run_on_error":    true,
+                                       "suppress_stdout": nil,
                                },
                        },
                        "error_hook": map[string]interface{}{},
@@ -3710,7 +3713,7 @@
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt run-all apply 
--terragrunt-modules-that-include parent.hcl --terragrunt-modules-that-include 
common.hcl --terragrunt-non-interactive --terragrunt-working-dir %s", 
tmpEnvPath), &stdout, &stderr)
        require.NoError(t, err)
 
-       out := stderr.String()
+       out := stdout.String()
        assert.Equal(t, 1, strings.Count(out, "parent_hcl_file"))
        assert.Equal(t, 1, strings.Count(out, "dependency_hcl"))
        assert.Equal(t, 1, strings.Count(out, "common_hcl"))
@@ -4581,7 +4584,7 @@
 
        runTerragruntCommand(t, fmt.Sprintf("terragrunt init 
--terragrunt-working-dir %s", TEST_FIXTURE_LOCAL_RUN_ONCE), &stdout, &stderr)
 
-       errout := string(stderr.Bytes())
+       errout := string(stdout.Bytes())
 
        assert.Equal(t, 1, strings.Count(errout, "foo"))
 }
@@ -4595,7 +4598,7 @@
 
        runTerragruntCommand(t, fmt.Sprintf("terragrunt init 
--terragrunt-working-dir %s", TEST_FIXTURE_LOCAL_RUN_MULTIPLE), &stdout, 
&stderr)
 
-       errout := string(stderr.Bytes())
+       errout := string(stdout.Bytes())
 
        // Check for cached values between locals and inputs sections
        assert.Equal(t, 1, strings.Count(errout, "potato"))
@@ -4663,9 +4666,9 @@
        stderr := bytes.Buffer{}
        err := runTerragruntCommand(t, fmt.Sprintf("terragrunt version 
--terragrunt-log-level trace --terragrunt-non-interactive 
--terragrunt-working-dir %s", appPath), &stdout, &stderr)
        require.NoError(t, err)
-       errout := string(stderr.Bytes())
-       assert.Equal(t, 1, strings.Count(errout, "\npath_relative_to_inclue: 
app\n"))
-       assert.Equal(t, 0, strings.Count(errout, "\npath_relative_to_inclue: 
.\n"))
+       output := string(stdout.Bytes())
+       assert.Equal(t, 1, strings.Count(output, "path_relative_to_inclue: 
app\n"))
+       assert.Equal(t, 0, strings.Count(output, "path_relative_to_inclue: 
.\n"))
 }
 
 func TestTerragruntInitConfirmation(t *testing.T) {
@@ -5493,6 +5496,38 @@
        assert.Contains(t, output, string(expectedDiff))
 }
 
+func TestDestroyDependentModule(t *testing.T) {
+       t.Parallel()
+
+       cleanupTerraformFolder(t, TEST_FIXTURE_DESTROY_DEPENDENT_MODULE)
+       tmpEnvPath, _ := filepath.EvalSymlinks(copyEnvironment(t, 
TEST_FIXTURE_DESTROY_DEPENDENT_MODULE))
+       rootPath := util.JoinPath(tmpEnvPath, 
TEST_FIXTURE_DESTROY_DEPENDENT_MODULE)
+
+       output, err := exec.Command("git", "init", rootPath).CombinedOutput()
+       if err != nil {
+               t.Fatalf("Error initializing git repo: %v\n%s", err, 
string(output))
+       }
+       // apply each module in order
+       runTerragrunt(t, fmt.Sprintf("terragrunt apply -auto-approve 
--terragrunt-non-interactive --terragrunt-working-dir %s", 
util.JoinPath(rootPath, "a")))
+       runTerragrunt(t, fmt.Sprintf("terragrunt apply -auto-approve 
--terragrunt-non-interactive --terragrunt-working-dir %s", 
util.JoinPath(rootPath, "b")))
+       runTerragrunt(t, fmt.Sprintf("terragrunt apply -auto-approve 
--terragrunt-non-interactive --terragrunt-working-dir %s", 
util.JoinPath(rootPath, "c")))
+
+       config.ClearOutputCache()
+
+       // destroy module which have outputs from other modules
+       stdout := bytes.Buffer{}
+       stderr := bytes.Buffer{}
+
+       err = runTerragruntCommand(t, fmt.Sprintf("terragrunt destroy 
-auto-approve --terragrunt-non-interactive --terragrunt-log-level debug 
--terragrunt-working-dir %s", util.JoinPath(rootPath, "c")), &stdout, &stderr)
+       assert.NoError(t, err)
+
+       assert.True(t, strings.Contains(stderr.String(), 
util.JoinPath(rootPath, "b", "terragrunt.hcl")))
+       assert.True(t, strings.Contains(stderr.String(), 
util.JoinPath(rootPath, "a", "terragrunt.hcl")))
+
+       assert.True(t, strings.Contains(stderr.String(), "\"value\": 
\"module-b.txt\""))
+       assert.True(t, strings.Contains(stderr.String(), "\"value\": 
\"module-a.txt\""))
+}
+
 func validateOutput(t *testing.T, outputs map[string]TerraformOutput, key 
string, value interface{}) {
        t.Helper()
        output, hasPlatform := outputs[key]

++++++ terragrunt.obsinfo ++++++
--- /var/tmp/diff_new_pack.WY32x3/_old  2023-06-11 19:58:00.632147583 +0200
+++ /var/tmp/diff_new_pack.WY32x3/_new  2023-06-11 19:58:00.632147583 +0200
@@ -1,5 +1,5 @@
 name: terragrunt
-version: 0.45.18
-mtime: 1685533020
-commit: 1494e777b1f2ce18797ce1c9e46859bdef7f33ed
+version: 0.46.1
+mtime: 1685643340
+commit: e190fa3d9a0a92c32fd5d031851775a702179db7
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/terragrunt/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.terragrunt.new.15902/vendor.tar.gz differ: char 5, 
line 1

Reply via email to