Skip to content

terragrunt

Infrastructure as Code

A thin wrapper that enables Terraform modules to be run at scale with DRY configuration

Go Latest v1.0.7 · 2d ago Security brief →

Features

  • Provides a concise DSL for reusing Terraform configurations
  • Automates state remote backend setup and locking
  • Supports hierarchical module execution and dependency management

Recent releases

View all 18 releases →
No immediate action
v1.0.7 Mixed

tfr URL versioning; CAS non‑git/registry; path preservation; Windows filters; parallelism

No immediate action
v1.0.6 Breaking risk

download_dir fix + deep_merge + catalog TUI

No immediate action
v1.0.5 New feature

Full lock file + parallel output

v1.0.4 Breaking risk
⚠ Upgrade required
  • Cache and plugin directories now follow platform conventions (Linux: `$XDG_CACHE_HOME/terragrunt`, macOS: `~/Library/Caches/terragrunt`, Windows: `%LocalAppData%/terragrunt`). Existing caches at the legacy `~/.cache/terragrunt` location remain untouched.
  • Provider Cache Server now supports custom `host` blocks from `.terraformrc`.
Notable features
  • `fast-copy` strict control for faster copy walks
  • Memoized `run_cmd` and Git repo‑root lookups across units regardless of Provider Cache Server
  • Reduced `git rev-parse --show-toplevel` invocations on large estates
Full changelog

🏎️ Performance Improvements

run_cmd and Git repo-root results memoized without the Provider Cache Server

Within a single command, repeated run_cmd(...) calls and repeated Git repo-root lookups across units used to share their cached results only when the Provider Cache Server was running. Commands invoked without --provider-cache (the common case for find, list, and run --all against estates that do not need provider caching) re-evaluated each run_cmd and re-shelled to git rev-parse --show-toplevel for every unit.

Both caches are now active for every command, so identical run_cmd arguments and repeated repo-root lookups are reused across units regardless of whether the Provider Cache Server is enabled.

fast-copy strict control

With the new fast-copy strict control enabled, Terragrunt compiles each include_in_copy and exclude_from_copy pattern once and evaluates it inline during a single copy walk. This avoids re-walking subdirectories for every pattern, which should result in noticeable speed improvements for large source modules.

terragrunt run plan --strict-control fast-copy

The new matcher does not collapse ** to zero path segments when a neighbor is a wildcard, so a/**/*.tf matches a/sub/main.tf but not a/main.tf. Patterns that relied on the old collapsing behavior should use brace alternation like {*.tf,**/*.tf} to cover both depths.

Fewer git rev-parse invocations on large estates

The get_repo_root() HCL function, the runner, and the find and list discovery commands all ask Git for the enclosing repository root. Previously, two units in the same repository each triggered their own git rev-parse --show-toplevel, even when the answer was identical. On large estates this added up to one fork per unit (and sometimes more) for a value that never changed.

A repository discovered for one working directory is now reused for any other working directory inside it, for the duration of the command. Nested repositories (a checkout vendored inside another) still resolve to their own root.

🐛 Bug Fixes

--auth-provider-cmd no longer runs once per dependency cache directory

Resolving dependency outputs ran the configured --auth-provider-cmd again from inside each .terragrunt-cache working directory, on top of the call already made for the unit.

Terragrunt now reuses the credentials already obtained for the dependency when reading outputs from a cached working directory, so --auth-provider-cmd is invoked once per dependency instead of twice.

Fixed exclude block being dropped when defined only in an included parent

A unit that pulled in an exclude block from an include that did not declare its own exclude block saw the include's exclude configurations ignored.

Included exclude blocks now get properly merged into unit configurations.

Reported in #5089. Thanks to @HeikoNeblung for contributing this fix!

Fixed terragrunt find --include failing on relative include paths

Running terragrunt find --include against units whose include blocks reference parent configs with relative paths (../root.hcl, ./common.hcl, bare filenames, etc.) emitted errors like Rel: can't make ../root.hcl relative to /abs/working-dir and dropped those entries from the output.

Relative include paths are now resolved against the unit's directory before being made relative to the working directory, matching how the rest of Terragrunt interprets the path attribute on an include block.

find and list no longer hard-fail when a path cannot be made relative to its base. The condition is logged as a warning and the path is emitted as-is, so output stays complete and the command exits zero.

Tolerate non-JSON warnings in tofu/terraform output -json

Resolving dependency outputs no longer fails when the underlying tofu/terraform output -json invocation prints a deprecation warning to stdout alongside the JSON payload. Terraform 1.15.0 introduced a backend deprecation warning for the S3 dynamodb_table parameter that is emitted on stdout after the JSON object, which broke parsing with errors like invalid character 'W' after top-level value and the misleading downstream message There is no variable named "dependency".

Terragrunt now isolates the first JSON object in the captured stdout, so leading log lines (for example, the long-standing AWS Client Side Monitoring Enabling CSM line) and trailing warning blocks are both ignored when reading dependency outputs.

Resolves #6001. Thanks to @jpke for contributing this fix!

get_repo_root() returns OS-native separators on Windows

git rev-parse --show-toplevel always emits forward-slash paths, even on Windows. Terragrunt returned that string unchanged from get_repo_root(), so configurations that compared the result against path/filepath-style paths or fed it back into helpers expecting OS-native separators saw spurious mismatches and broken joins on Windows.

The output is now normalized to OS-native separators before being returned, so get_repo_root() produces C:\repo\path on Windows and /repo/path on Linux and macOS.

Reported in #5976.

Hardened module manifest handling

Terragrunt now bounds .terragrunt-module-manifest cleanup to the manifest's own folder, skips paths with symlinked parents, and removes invalid manifests after reading any valid entries. Existing manifests keep the same gob format.

Provider Cache Server now supports custom host blocks

Running terragrunt with the Provider Cache Server enabled against a private registry declared via a host block in .terraformrc (or a file referenced by TF_CLI_CONFIG_FILE) failed with errors such as provider registry.opentofu.org/<org>/<provider> was not found, because the cache server proxy did not recognize the custom registry and rewrote requests to registry.opentofu.org.

Terragrunt now registers each custom host block with the cache server, seeds its service discovery from the services map so registries that do not serve .well-known/terraform.json still work, and forwards OPENTOFU_NETRC_* / TF_TOKEN_* credentials so authenticated registries continue to authenticate through the proxy.

# .terraformrc
host "registry.example.com" {
  services = {
    "providers.v1" = "https://registry.example.com/repository/terraform-hosted/v1/providers/"
  }
}

Resolves #5916. Thanks to @elkh510 for contributing this fix!

🧪 Experiments Updated

stack-dependencies — Stricter validation and clearer parse errors for autoinclude

Malformed configuration inside an autoinclude block previously produced misleading messages or, in some cases, was silently ignored during stack discovery.

Two changes tighten this up:

  • A dependency block inside autoinclude must declare exactly one label. Zero labels (dependency {}) and multiple labels (dependency "a" "b" {}) are now rejected at parse time with a diagnostic that points at the offending block.
  • Parse failures encountered while expanding autoinclude files during stack generate, find, and list are surfaced with the underlying HCL diagnostic instead of being swallowed or remapped to a generic discovery error.

Reported in #5980.

cas — Local paths supported as stack component sources

CAS-backed stack generation now accepts a local filesystem path as the source of a consumer stack or unit block, in addition to a remote Git URL. Terragrunt copies the referenced directory into a temporary directory, computes a content-addressed root hash over the copy, and applies the same update_source_with_cas rewriting as the remote flow. The original directory is left untouched.

# live/terragrunt.stack.hcl
stack "service" {
  source = "../catalog//stacks/service"

  path = "service"
}

This makes a catalog usable against a local checkout under the same update_source_with_cas = true attributes that already work for Git URLs, which is helpful when iterating on a catalog before tagging a release.

See the CAS documentation and Explicit Stacks: Local catalog sources for details.

catalog-redesign — Units and stacks, scaffolded values, and key-binding cleanup

The redesigned terragrunt catalog TUI gains two new component kinds, a guided scaffolding flow for placing them, and a small key-binding cleanup.

Units and stacks join modules and templates

Catalog discovery now classifies units (directories containing a terragrunt.hcl) and stacks (directories containing a terragrunt.stack.hcl) as first-class component kinds, alongside OpenTofu/Terraform modules and boilerplate templates. The list view picks them up automatically and they appear under their own tabs; press tab and shift+tab to cycle.

When more than one classification could apply to the same directory (for example, a stack directory that also contains a unit), Terragrunt resolves it to a single kind under a fixed precedence: template, stack, unit, module.

Copy and scaffolded values

Selecting a unit or stack from the catalog now offers a copy action that materializes the component into your working directory. Terragrunt walks the copied component for values.<name> references and, if it finds any, writes a sibling terragrunt.values.hcl stub. Names referenced outside a try(...) are listed as required with a "TODO" placeholder; names referenced through a try(...) are listed as optional, pre-populated with the literal default from the fallback. An existing terragrunt.values.hcl is left alone.

After the TUI exits, Terragrunt prints a short callout pointing at the directory it wrote to and any follow-up command you need to run, instead of leaving you to find the new directory yourself.

Catalog key bindings

The ctrl+j binding on the catalog list has been removed in favor of enter alone for choosing a focused entry, and dropped from the navigation set used while filtering. The mini help footer is updated to match.

stack-dependencies - Separate filenames for unit vs stack autoincludes

Generated autoinclude files now use distinct filenames depending on the component kind, so tooling (LSP, read_terragrunt_config(), indexers) can identify a file's purpose from its name alone:

  • Unit-level autoincludes continue to be written as terragrunt.autoinclude.hcl.
  • Stack-level autoincludes (autoinclude blocks declared inside a stack { ... }) are now written as terragrunt.autoinclude.stack.hcl. The .stack.hcl suffix mirrors terragrunt.stack.hcl, matching the convention used elsewhere for stack files.
# terragrunt.stack.hcl
unit "app" {
  source = "../catalog/units/app"
  path   = "app"

  autoinclude {
    # Generated as: .terragrunt-stack/app/terragrunt.autoinclude.hcl
    dependency "vpc" { config_path = unit.vpc.path }
  }
}

stack "networking" {
  source = "../catalog/stacks/networking"
  path   = "networking"

  autoinclude {
    # Generated as: .terragrunt-stack/networking/terragrunt.autoinclude.stack.hcl
    dependency "shared" { config_path = unit.shared.path }
  }
}

This change implements the naming convention proposed in the Stack Dependencies RFC so configurations for units and stacks always live in files whose names clearly indicate their purpose.

To learn more, see the experiment documentation.

stack-dependencies — Nested stack paths and discovery integration

The stack-dependencies experiment gains two improvements: nested stack path references at arbitrary depth, and integration with the find and list discovery commands.

Nested stack path references

stack.<name>.<nested_stack>.path now resolves at arbitrary nesting depth. Previously, only units within a stack were reachable via stack.<name>.<unit_name>.path; nested stacks are now first-class references too.

# terragrunt.stack.hcl

stack "infra" {
  source = "../catalog/stacks/infra"
  path   = "infra"
}

unit "app" {
  source = "../catalog/units/app"
  path   = "app"

  autoinclude {
    dependency "deep" {
      # infra contains a nested "deep" stack; reference it directly.
      config_path = stack.infra.deep.path
    }

    inputs = {
      val = dependency.deep.outputs.val
    }
  }
}

Discovery commands surface stack dependencies

The terragrunt find and terragrunt list discovery commands now reflect stack dependencies generated by the autoinclude block. The DAG output correctly orders units by their autoinclude dependencies and shows dependency relationships in JSON, tree, and long formats.

# JSON output includes dependency relationships from autoinclude
$ terragrunt find --json --dag --dependencies --experiment stack-dependencies

# Long list format shows a Dependencies column
$ terragrunt list --long --dependencies --dag --experiment stack-dependencies

# Tree format visualizes the dependency hierarchy
$ terragrunt list --tree --dag --experiment stack-dependencies

Multi-level dependency trees (for example, A → B,C where B → D,E) are ordered correctly in DAG mode: leaf units appear first, parents appear after all their dependencies.

To learn more, see the experiment documentation.

Cache and plugin directories follow platform conventions

Terragrunt's global cache directory now resolves to the platform's user cache location instead of a hard-coded ~/.cache/terragrunt. On Linux this honors XDG_CACHE_HOME (still ~/.cache/terragrunt by default), on macOS it resolves to ~/Library/Caches/terragrunt, and on Windows it resolves under %LocalAppData%. The CAS content store, the auto provider cache, and the IaC engine plugin directory all move with it.

Existing caches at the previous locations are not migrated. They become orphaned and continue to consume disk space until removed.

Consider deleting the old paths to reclaim that space if you are on macOS or Windows, or have configured a custom XDG_CACHE_HOME:

# CAS store and engine plugins under the legacy ~/.cache layout
rm -rf ~/.cache/terragrunt

What's Changed

  • feat: stack dependencies in find and dag by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5945
  • feat: Adding support for units and stacks in catalog by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5971
  • feat: Adding support for local paths in CAS by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5933
  • feat: updated name for stack depednencies by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/6018
  • fix: manifest handling improvements by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/6032
  • fix: Removing extra --auth-provider-cmd call by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6045
  • fix: Use FromSlash on return of git rev-parse --show-toplevel by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5987
  • fix: Cleaning up #5232 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6009
  • fix: better errors reporting form autoincludes by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5985
  • fix: Dropping references to ctrl-\+j in the catalog key bindings by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6007
  • fix: Ensuring relativization is safer by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6025
  • fix: tolerate non-JSON warnings in tofu/terraform output -json (#6001) by @jpke in https://github.com/gruntwork-io/terragrunt/pull/6029
  • fix: support custom host blocks in Provider Cache Server by @elkh510 in https://github.com/gruntwork-io/terragrunt/pull/5917
  • perf: Memoizing get_repo_root() better by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5989
  • perf: Moving context cache construction earlier by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6019
  • docs: Adding a Pull Requests section to the changelog by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5982
  • docs: Update buttons on nav by @karlcarstensen in https://github.com/gruntwork-io/terragrunt/pull/6000
  • docs: Calling out update for existing cache locations in v1.0.4 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6005
  • docs: Cleaning up changelog for v1.0.4 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6050
  • docs: Documenting #5917 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6044
  • docs: Optimizing SEO a bit by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5990
  • docs: Updating terminology to modernize it a bit by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6016
  • chore: Supporting immutable releases by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5905
  • chore: Cleaning up other scripts with shellcheck and shfmt by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5983
  • chore: Add fast-copy strict control by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5966
  • chore: Expanding lll coverage to worktrees by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5861
  • chore: Expanding lll coverage to os-exec by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5862
  • chore: Expanding lll coverage to runner-creds by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5865
  • chore: Expanding lll coverage to tflint by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5866
  • chore: Expanding lll coverage to queue by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5867
  • chore: Addressing review feedback on #5989 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5991
  • chore: Integrate vexec into engine by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5957
  • chore: Moving to XDG-aware paths by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5941
  • chore: Optimizing catalog performance by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5973
  • chore: Adding checkbox for changelog updates by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6012
  • chore: Integrating vexec into Command by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6004
  • chore: Addressing #6019 feedback by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6023
  • chore: Addressing test flakes by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6028
  • chore: Adding thank you to @jpke for fix in #6029 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6035
  • chore: Dropping insignificant OpenTelemetry traces by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6034
  • chore: Adding better symlinks experiment tests by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/6038

New Contributors

  • @jpke made their first contribution in https://github.com/gruntwork-io/terragrunt/pull/6029
  • @elkh510 made their first contribution in https://github.com/gruntwork-io/terragrunt/pull/5917

Full Changelog: https://github.com/gruntwork-io/terragrunt/compare/v1.0.3...v1.0.4

v1.0.3 Mixed
Notable features
  • --no-cas flag for disabling CAS per command
  • mark-many-as-read experiment with mark_glob_as_read HCL function
  • update_source_with_cas for relative sources in catalog repositories
Full changelog

✨ New Features

--no-cas flag for disabling CAS per command

The new --no-cas flag disables the CAS for a single invocation, even when the cas experiment is enabled. It is available on run, stack generate, and stack run.

terragrunt stack generate --experiment cas --no-cas

This is useful when you want to fall back to the standard getter path without unwinding experiment configuration.

Generation and runs error when --no-cas is combined with update_source_with_cas = true on any reachable unit, stack, or terraform block, since relative sources in catalog repositories cannot be resolved without the CAS.

🐛 Bug Fixes

hcl fmt --diff no longer requires the diff binary

Previously, terragrunt hcl fmt --diff spawned a diff process discovered in $PATH to render its output. This made it incompatible with minimal container images and Windows installations where that binary was unavailable.

The flag now produces unified diff output without depending on any external binary.

Note that the output is not byte-identical to GNU diff -u. Each file diff is now preceded by a diff old/<path> new/<path> header line, and the ---/+++ lines no longer include a trailing timestamp. Scripts that parsed the previous output may need small adjustments.

Fixed crash when include and locals with read_terragrunt_config coexist

A unit that combined an include block with a locals block calling read_terragrunt_config(...) could crash during discovery, surfacing as a misleading Call to function "read_terragrunt_config" failed error pointed at the locals expression.

Discovery now reports the underlying error instead of crashing.

Reported in #5949.

Fixed crash when a root.hcl declares no remote_state block

A root.hcl that only declared locals (or otherwise omitted a remote_state block) could trigger a nil pointer dereference inside Terragrunt's remote-state initialization. Downstream tools that embed the Terragrunt config parser, such as terragrunt-ls, crashed on every such file.

A missing remote_state block now initializes an empty remote-state value instead of panicking, so parsing proceeds normally when no backend is configured.

Reported in terragrunt-ls#134.

Thanks to @SAY-5 for contributing this fix!

Fixed a race condition in terragrunt stack generate

Fixed a race condition in terragrunt stack generate that could produce non-deterministic file errors on nested stack hierarchies. The same stack file could reach the worker pool twice through different path forms and cause the duplicate writes to conflict with each other. Paths are now normalized before dispatch so each stack file is generated exactly once per invocation.

When a stack file is legitimately claimed by more than one parent during generation, Terragrunt now logs a warning that names the contending parents and records the latest claimant, so the configuration can be corrected before it causes silent overwrites.

Fixed data race in --version flag parsing under concurrent CLI invocations

When multiple Terragrunt CLI invocations ran concurrently in the same process, urfave/cli/v2's package-level VersionFlag singleton was mutated concurrently by each invocation's flag-parsing path, producing a WARNING: DATA RACE on shared flag state.

Terragrunt now sets cli.App.HideVersion = true at construction, which prevents urfave from auto-appending its shared VersionFlag into each App's flag set. The --version / -v flag is unchanged from the user's perspective — it is handled by Terragrunt's own flag registered in internal/cli/flags/global.NewHelpVersionFlags.

🧪 Experiments Added

mark-many-as-read — Mark many files as read in one step

Enable the new mark-many-as-read experiment to turn on two behaviors that each mark many files as read in a single call: automatic marking of files inside a local terraform { source = "..." } block, and the new mark_glob_as_read HCL function.

With the experiment on, a unit like this:

# live/unit/terragrunt.hcl
terraform {
  source = "../../modules/service"
}

records every *.tf, *.tf.json, *.hcl, *.tofu, and *.tofu.json file found under ../../modules/service (recursively) as read for the unit. Non-source files such as README.md are skipped. A reading-based filter expression such as --filter 'reading=../../modules/service/**' then matches every unit that points at the module, so a change to any file in the module cascades to its consumers.

The same experiment also enables a new HCL function, mark_glob_as_read(pattern), which expands a glob using the same gobwas/glob syntax as filter expressions and marks every matching file as read. It returns the list of absolute paths that matched, so it composes with other expressions:

locals {
  configs = mark_glob_as_read("${get_terragrunt_dir()}/config/{*.yaml,**/*.yaml}")
}

** only collapses the surrounding separators when the adjacent segments are literals, so match-at-any-depth with a wildcard trailing segment is written as {*.yaml,**/*.yaml}. See the HCL reference for full pattern syntax.

This is useful when a unit reads a collection of files indirectly (for example, via run_cmd or templatefile) and you want changes to any of them to trigger the unit through reading-based filters. Calling mark_glob_as_read without the experiment enabled returns an error.

🧪 Experiments Updated

cas — Stack integration via update_source_with_cas

The cas experiment now integrates with stacks. Units and terraform blocks can set update_source_with_cas = true to use relative source paths in catalog repositories, removing the need to plumb remote Git URLs through values expressions.

# stacks/my-stack/terragrunt.stack.hcl (in your catalog repository)

unit "service" {
  source = "../..//units/my-service"

  update_source_with_cas = true

  path = "service"
}

During stack generation, Terragrunt rewrites these relative sources to cas:: references that resolve against content stored in the CAS. The repository is cloned once, and subsequent stack generations resolve content from the local store without network access. Generated .terragrunt-stack files contain deterministic CAS references, so regeneration does not produce spurious diffs.

CAS also supports SHA-256 repositories now, detected automatically via git rev-parse --show-object-format. The on-disk store layout was reorganized into blobs/ and trees/ namespaces under ~/.cache/terragrunt/cas/store/.

To learn more, see the CAS documentation and Explicit Stacks: CAS Integration.

catalog-redesign — Templates and .terragrunt-catalog-ignore

The catalog-redesign experiment picked up user-visible improvements to discovery and filtering.

Discovery walks the entire repository instead of only a modules/ directory, so modules and templates can live anywhere in the tree. Boilerplate templates (directories containing a .boilerplate/ subdirectory or a top-level boilerplate.yml) are discovered as a distinct component kind alongside OpenTofu/Terraform modules and labeled as templates in the UI. When a directory qualifies as both, it is classified as a template.

Catalog authors can commit a .terragrunt-catalog-ignore file at the repo root to keep directories such as examples/ or test/ out of discovery. The file uses .gitignore-style semantics: one pattern per line, # for comments, ! for negation, and last match wins. Matching is anchored at the repo root; a lone * does not cross /, and ** does.

# .terragrunt-catalog-ignore
examples
examples/**
test/**
!test/keep

An --ignore-file flag (also available via TG_IGNORE_FILE) points at an additional ignore file that is layered on top of the repo's .terragrunt-catalog-ignore. The extra rules are appended under last-match-wins semantics, so the flag can either add new exclusions or re-include paths that the repo file excluded.

To learn more, see Excluding paths from discovery.

The list view is split into All, Modules, and Templates tabs, with All selected on launch so every discovered component is visible without switching views. Press tab and shift+tab to cycle between them; each tab keeps its own cursor and search filter.

stack-dependencies — Multi-level nested stack.<name>.<nested_stack>.path references

The stack-dependencies experiment already supported stack.<name>.path (a whole stack) and stack.<name>.<unit_name>.path (a unit inside a stack). It now also resolves references where the second segment is itself a nested stack, so an autoinclude block in a parent stack can target a stack that lives inside another stack:

# live/terragrunt.stack.hcl
stack "infra" {
  source = "../catalog/stacks/infra"
  path   = "infra"
}

unit "app" {
  source = "../catalog/units/app"
  path   = "app"

  autoinclude {
    dependency "deep" {
      config_path = stack.infra.deep.path
    }
  }
}

Here stack.infra.deep.path resolves to the generated directory of a stack "deep" block declared inside catalog/stacks/infra/terragrunt.stack.hcl. This makes deeper stack hierarchies addressable from a single dependency expression without flattening the layout.

What's Changed

  • feat: Mark module sources as read by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5963
  • feat: Adding support for CAS in stacks by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5911
  • feat: Splitting modules from templates by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5932
  • feat: allow units to depend on stacks by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5924
  • fix: Addressing panic in read_terragrunt_config() by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5953
  • fix: version flag race condition fix by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5961
  • fix: fixing concurrent-write race in stack generate by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5962
  • fix(remotestate): survive nil Config passed to New by @SAY-5 in https://github.com/gruntwork-io/terragrunt/pull/5965
  • docs: Cleaning up changelog for v1.0.3 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5977
  • docs: Touching up docs for catalog-redesign by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5940
  • docs: Adding Terragrunt Scale callout in README.md by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5946
  • docs: Fixing Kapa integration by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5942
  • chore: Integrating vexec into NewGitRunner by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5934
  • chore: Offboarding Travis by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5944
  • chore: Expanding lll coverage to amazonsts by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5852
  • chore: Expanding lll coverage to runner-common by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5853
  • chore: Expanding lll coverage to runner-graph by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5854
  • chore: Expanding lll coverage to list by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5855
  • chore: stacks generation improvements by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5969
  • chore: Expanding lll coverage to errorconfig by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5856
  • chore: Expanding lll coverage to experiment by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5857
  • chore: Expanding lll coverage to externalcmd by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5858
  • chore: Expanding lll coverage to cache-controllers by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5859
  • chore: Expanding lll coverage to vfs by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5860
  • chore: Expanding lll coverage to stack by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5841
  • chore: Expanding lll coverage to backend-delete by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5842
  • chore: Expanding lll coverage to cloner by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5843
  • chore: Expanding lll coverage to engine by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5844
  • chore: Expanding lll coverage to git by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5845
  • chore: Consolidating independent integration tests by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5938
  • chore: Integrating signals into vexec by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5935
  • chore: Expanding lll coverage to prepare by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5846
  • chore: Expanding lll coverage to exec by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5847
  • chore: Expanding lll coverage to find by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5848
  • chore: Expanding lll coverage to stacks-output by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5850
  • chore(deps): bump astro from 6.1.2 to 6.1.6 in /docs by @dependabot[bot] in https://github.com/gruntwork-io/terragrunt/pull/5947
  • chore: Expanding lll coverage to placeholders by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5851
  • chore: Removing dependency on diff by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5954
  • chore: Addressing feedback on #5953 and #5954 by @yhakbar in https://github.com/gruntwork-io/terragrunt/pull/5964
  • chore: Windows signing fix by @denis256 in https://github.com/gruntwork-io/terragrunt/pull/5979

New Contributors

  • @SAY-5 made their first contribution in https://github.com/gruntwork-io/terragrunt/pull/5965

Full Changelog: https://github.com/gruntwork-io/terragrunt/compare/v1.0.2...v1.0.3

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
9,606
Forks
1,201
Languages
Go Makefile HCL

Community & Support

Beta — feedback welcome: [email protected]