Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package terragrunt for openSUSE:Factory checked in at 2026-01-30 18:28:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/terragrunt (Old) and /work/SRC/openSUSE:Factory/.terragrunt.new.1995 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "terragrunt" Fri Jan 30 18:28:10 2026 rev:284 rq:1329959 version:0.99.1 Changes: -------- --- /work/SRC/openSUSE:Factory/terragrunt/terragrunt.changes 2026-01-27 16:15:56.975125097 +0100 +++ /work/SRC/openSUSE:Factory/.terragrunt.new.1995/terragrunt.changes 2026-01-30 18:28:16.468633578 +0100 @@ -1,0 +2,11 @@ +Fri Jan 30 07:09:16 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 0.99.1: + * Bug Fixes + - Pass through null inputs + Fixes a bug where null inputs weren't being passed through + correctly to OpenTofu/Terraform. + * What's Changed + - fix: Fixing null input passing (#5458) + +------------------------------------------------------------------- Old: ---- terragrunt-0.99.0.obscpio New: ---- terragrunt-0.99.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ terragrunt.spec ++++++ --- /var/tmp/diff_new_pack.A5ru6Q/_old 2026-01-30 18:28:23.884945001 +0100 +++ /var/tmp/diff_new_pack.A5ru6Q/_new 2026-01-30 18:28:23.892945336 +0100 @@ -17,7 +17,7 @@ Name: terragrunt -Version: 0.99.0 +Version: 0.99.1 Release: 0 Summary: Thin wrapper for Terraform for working with multiple Terraform modules License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.A5ru6Q/_old 2026-01-30 18:28:24.360964989 +0100 +++ /var/tmp/diff_new_pack.A5ru6Q/_new 2026-01-30 18:28:24.388966165 +0100 @@ -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.99.0</param> + <param name="revision">v0.99.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.A5ru6Q/_old 2026-01-30 18:28:24.520971708 +0100 +++ /var/tmp/diff_new_pack.A5ru6Q/_new 2026-01-30 18:28:24.548972884 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/gruntwork-io/terragrunt</param> - <param name="changesrevision">93b0edf1ca3c816e7cb72de6ed6f483cb69ad6ac</param></service></servicedata> + <param name="changesrevision">ab330c6bd7bd18bc06c57b35e34e3236a6fb1dae</param></service></servicedata> (No newline at EOF) ++++++ terragrunt-0.99.0.obscpio -> terragrunt-0.99.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.99.0/internal/runner/run/run.go new/terragrunt-0.99.1/internal/runner/run/run.go --- old/terragrunt-0.99.0/internal/runner/run/run.go 2026-01-26 22:29:22.000000000 +0100 +++ new/terragrunt-0.99.1/internal/runner/run/run.go 2026-01-29 19:26:42.000000000 +0100 @@ -5,6 +5,7 @@ import ( "context" + "encoding/json" "fmt" "io" "maps" @@ -35,6 +36,7 @@ const ( CommandNameTerragruntReadConfig = "terragrunt-read-config" + NullTFVarsFile = ".terragrunt-null-vars.auto.tfvars.json" ) var TerraformCommandsThatUseState = []string{ @@ -256,6 +258,20 @@ } } + // Write null-valued inputs to a tfvars.json file that OpenTofu/Terraform will auto-load. + nullVarsFile, err := setTerragruntNullValuesRunCfg(opts, cfg) + if err != nil { + return err + } + + defer func() { + if nullVarsFile != "" { + if err := os.Remove(nullVarsFile); err != nil && !errors.Is(err, os.ErrNotExist) { + l.Debugf("Failed to remove null values file %s: %v", nullVarsFile, err) + } + } + }() + // Now that we've run 'init' and have all the source code locally, we can finally run the patch command if err := checkProtectedModuleRunCfg(opts, cfg); err != nil { return err @@ -715,3 +731,36 @@ return nil } + +// setTerragruntNullValuesRunCfg writes null-valued inputs to a tfvars.json file +// that OpenTofu/Terraform will auto-load. This is necessary because OpenTofu/Terraform +// cannot accept null values via environment variables (TF_VAR_*), but it can read them +// from .auto.tfvars.json files. +func setTerragruntNullValuesRunCfg(opts *options.TerragruntOptions, cfg *runcfg.RunConfig) (string, error) { + jsonEmptyVars := make(map[string]any) + + for varName, varValue := range cfg.Inputs { + if varValue == nil { + jsonEmptyVars[varName] = nil + } + } + + if len(jsonEmptyVars) == 0 { + return "", nil + } + + jsonContents, err := json.MarshalIndent(jsonEmptyVars, "", " ") + if err != nil { + return "", errors.New(err) + } + + varFile := filepath.Join(opts.WorkingDir, NullTFVarsFile) + + const ownerReadWritePermissions = 0600 + + if err := os.WriteFile(varFile, jsonContents, os.FileMode(ownerReadWritePermissions)); err != nil { + return "", errors.New(err) + } + + return varFile, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.99.0/test/integration_test.go new/terragrunt-0.99.1/test/integration_test.go --- old/terragrunt-0.99.0/test/integration_test.go 2026-01-26 22:29:22.000000000 +0100 +++ new/terragrunt-0.99.1/test/integration_test.go 2026-01-29 19:26:42.000000000 +0100 @@ -4673,3 +4673,31 @@ assert.NotContains(t, stderr, "\x1b") assert.NotContains(t, stdout, "\x1b") } + +// TestTerragruntPassNullValues verifies that terragrunt can pass null values to +// Terraform variables. This is a regression test for: +// https://github.com/gruntwork-io/terragrunt/issues/5452 +func TestTerragruntPassNullValues(t *testing.T) { + t.Parallel() + + tmpEnvPath := helpers.CopyEnvironment(t, testFixtureNullValue) + testPath := filepath.Join(tmpEnvPath, testFixtureNullValue) + + _, _, err := helpers.RunTerragruntCommandWithOutput( + t, + "terragrunt apply -auto-approve --non-interactive --working-dir "+testPath, + ) + require.NoError(t, err) + + stdout, _, err := helpers.RunTerragruntCommandWithOutput( + t, + "terragrunt output -json --non-interactive --working-dir "+testPath, + ) + require.NoError(t, err) + + outputs := map[string]helpers.TerraformOutput{} + require.NoError(t, json.Unmarshal([]byte(stdout), &outputs)) + + assert.Nil(t, outputs["output1"].Value) + assert.Equal(t, "variable 2", outputs["output2"].Value) +} ++++++ terragrunt.obsinfo ++++++ --- /var/tmp/diff_new_pack.A5ru6Q/_old 2026-01-30 18:28:29.865196120 +0100 +++ /var/tmp/diff_new_pack.A5ru6Q/_new 2026-01-30 18:28:29.893197296 +0100 @@ -1,5 +1,5 @@ name: terragrunt -version: 0.99.0 -mtime: 1769462962 -commit: 93b0edf1ca3c816e7cb72de6ed6f483cb69ad6ac +version: 0.99.1 +mtime: 1769711202 +commit: ab330c6bd7bd18bc06c57b35e34e3236a6fb1dae ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/terragrunt/vendor.tar.gz /work/SRC/openSUSE:Factory/.terragrunt.new.1995/vendor.tar.gz differ: char 13, line 1
