Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package terragrunt for openSUSE:Factory checked in at 2025-05-13 20:06:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/terragrunt (Old) and /work/SRC/openSUSE:Factory/.terragrunt.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "terragrunt" Tue May 13 20:06:12 2025 rev:226 rq:1276956 version:0.78.3 Changes: -------- --- /work/SRC/openSUSE:Factory/terragrunt/terragrunt.changes 2025-05-12 16:51:45.215915136 +0200 +++ /work/SRC/openSUSE:Factory/.terragrunt.new.30101/terragrunt.changes 2025-05-13 20:06:16.588866110 +0200 @@ -1,0 +2,15 @@ +Mon May 12 18:57:35 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- Update to version 0.78.3: + * Bug Fixes + When an error retry results in a plan succeeding when it + initially failed, usage of run --all -- plan -detailed-exitcode + will now properly take into account the final exit code, rather + than the first one, meaning that the exit code of the whole run + will be zero if no other units fail their plans. + * What's Changed + - fix #3845 set the correct exit code when a retry is + successful. by @wakeful in #3966 + - docs: Improving Run Queue docs by @yhakbar in #4272 + +------------------------------------------------------------------- Old: ---- terragrunt-0.78.2.obscpio New: ---- terragrunt-0.78.3.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ terragrunt.spec ++++++ --- /var/tmp/diff_new_pack.9laeYe/_old 2025-05-13 20:06:19.588992325 +0200 +++ /var/tmp/diff_new_pack.9laeYe/_new 2025-05-13 20:06:19.600992830 +0200 @@ -17,7 +17,7 @@ Name: terragrunt -Version: 0.78.2 +Version: 0.78.3 Release: 0 Summary: Thin wrapper for Terraform for working with multiple Terraform modules License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.9laeYe/_old 2025-05-13 20:06:19.829002422 +0200 +++ /var/tmp/diff_new_pack.9laeYe/_new 2025-05-13 20:06:19.861003769 +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.78.2</param> + <param name="revision">v0.78.3</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.9laeYe/_old 2025-05-13 20:06:19.985008985 +0200 +++ /var/tmp/diff_new_pack.9laeYe/_new 2025-05-13 20:06:20.005009827 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/gruntwork-io/terragrunt</param> - <param name="changesrevision">57b42381d9cf464d39833052b82851bd0061c9fe</param></service></servicedata> + <param name="changesrevision">b19d23fcb73889cd9dac48040dfbf2b84117d20d</param></service></servicedata> (No newline at EOF) ++++++ terragrunt-0.78.2.obscpio -> terragrunt-0.78.3.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/docs/_docs/02_features/05-run-queue.md new/terragrunt-0.78.3/docs/_docs/02_features/05-run-queue.md --- old/terragrunt-0.78.2/docs/_docs/02_features/05-run-queue.md 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/docs/_docs/02_features/05-run-queue.md 2025-05-12 16:48:19.000000000 +0200 @@ -27,43 +27,185 @@ ### Example DAG -Consider a setup where Unit B depends on Unit A, and Unit C depends on Unit B. Unit D has no dependencies. +Consider a setup where: + +- Unit "dependent" depends on unit "dependency". +- Unit "dependency" depends on unit "ancestor-dependency". +- Unit "independent" has no dependencies nor dependents. + +Represented textually, the file structure might look like: + +```tree +root +├── ancestor-dependency +│ └── terragrunt.hcl +├── independent +│ └── terragrunt.hcl +└── subtree + ├── dependency + │ └── terragrunt.hcl + └── dependent + └── terragrunt.hcl +```  -- **`run --all plan` Order:** Terragrunt would run C and D concurrently. Once C finishes, B would run. Once B finishes, A would run. -- **`run --all destroy` Order:** Terragrunt would run A and D concurrently. Once A finishes, B would run. Once B finishes, C would run. +Assuming a current working directory of the `root` directory, Terragrunt would run units in the following order: + +- **`run --all plan` Order:** Terragrunt would run `independent` and `ancestor-dependency` concurrently. Once `ancestor-dependency` finishes, `dependency` would run. Once `dependency` finishes, `dependent` would run. +- **`run --all destroy` Order:** Terragrunt would run `dependent` and `independent` concurrently. Once `dependent` finishes, `dependency` would run. Once `dependency` finishes, `ancestor-dependency` would run. ## Controlling the Queue -Several flags allow you to customize how Terragrunt builds and executes the run queue: +Several flags allow you to customize how Terragrunt builds and executes the run queue. By default, Terragrunt will include all units that are in the current working directory. + +### Include by default + +By default, when using the `--all` flag, Terragrunt will include all units that are in the current working directory, and any external dependencies. + +Certain flags trigger "Exclude by default" behavior, meaning that Terragrunt will no longer automatically include all units in the current working directory, and will instead rely on discovering configurations based on the provided queue control flags. + +Those flags will be discussed in the next section. ### Filtering Units You can control which units are included or excluded from the queue: - [`--queue-include-dir`](/docs/reference/cli-options#queue-include-dir): Specify glob patterns for directories to *include*. Can be used multiple times. -- [`--queue-exclude-dir`](/docs/reference/cli-options#queue-exclude-dir): Specify glob patterns for directories to *exclude*. Can be used multiple times. Note that dependencies of excluded units might be included unless they are also explicitly excluded. + + e.g. `terragrunt run --all plan --queue-include-dir "subtree/*"` + + Include units within the `subtree` directory (along with their dependencies), i.e., `subtree/dependent`, `subtree/dependency` and `ancestor-dependency`. + > **Note:** Using the `--queue-include-dir` automatically triggers "Exclude by default" behavior, as mentioned above. + > + > **Note:** `ancestor-dependency` is still included by default here because it's a dependency of `dependency`. Using [`--queue-strict-include`](/docs/reference/cli-options#queue-strict-include) would prevent that. + +- [`--queue-exclude-dir`](/docs/reference/cli-options#queue-exclude-dir): Specify glob patterns for directories to *exclude*. Can be specified multiple times. + + e.g. `terragrunt run --all plan --queue-exclude-dir "independent"` + + Exclude the `independent` unit. `ancestor-dependency`, `subtree/dependency`, and `subtree/dependent` would still be processed according to their dependencies. + > **Note:** Dependencies of excluded units will still be included unless they are also explicitly excluded. In this example, excluding `subtree/dependency` would not automatically exclude `ancestor-dependency`. + - [`--queue-excludes-file`](/docs/reference/cli-options#queue-excludes-file): Provide a file containing a list of directories to exclude. -- [`--queue-strict-include`](/docs/reference/cli-options#queue-strict-include): Only include units matching `--queue-include-dir`. Excludes everything else by default. -- [`--queue-include-external`](/docs/reference/cli-options#queue-include-external): Include external dependencies (those outside the main working directory or included directories). + + e.g. `terragrunt run --all plan --queue-excludes-file ".tg-excludes"` + + ```text + # .tg-excludes + + independent + subtree/dependency + ``` + + Exclude `independent` and `subtree/dependency` from the run, only running `subtree/dependent` and `ancestor-dependency`. + > **Tip:** The default value for this flag is `.terragrunt-excludes`. Populate a file named this in your project root to exclude units from being run by default, without using the `--queue-excludes-file` flag. + +- [`--queue-strict-include`](/docs/reference/cli-options#queue-strict-include): Only include units matching `--queue-include-dir`. + + e.g. `terragrunt run --all plan --queue-include-dir "subtree/dependency" --queue-strict-include` + + Only include the `subtree/dependency` unit. Its dependency, `ancestor-dependency`, will be excluded because it does not match the include and strict mode is enabled. + +- [`--queue-include-external`](/docs/reference/cli-options#queue-include-external): Include external dependencies (those outside the current working directory) by default. + + e.g. `terragrunt run --all plan --working-dir subtree --queue-include-external` + + Include `ancestor-dependency` in addition to the `subtree/dependent` and `subtree/dependency` units. + > **Note:** The `--queue-include-external` flag is simply a convenience flag to avoid the interactive prompt to request inclusion of external dependencies. By default, Terragrunt will wait for user input to determine whether or not external dependencies should be included. + - [`--queue-exclude-external`](/docs/reference/cli-options#queue-exclude-external): Exclude external dependencies. + + e.g. `terragrunt run --all plan --working-dir subtree --queue-exclude-external` + + Exclude `ancestor-dependency` from the run. Only run `subtree/dependent` and `subtree/dependency`. + > **Note:** This flag is simply a convenience flag to avoid the interactive prompt to request exclusion of external dependencies. By default, Terragrunt will wait for user input to determine whether or not external dependencies should be excluded. + - [`--queue-include-units-reading`](/docs/reference/cli-options#queue-include-units-reading): Include units that read a specific file (via [includes](/docs/reference/config-blocks-and-attributes#include) or HCL functions like [`mark_as_read`](/docs/reference/built-in-functions#mark_as_read)). -### Modifying Order and Error Handling + e.g. `terragrunt run --all plan --queue-include-units-reading "subtree/common.hcl"` -- [`--queue-construct-as`](/docs/reference/cli-options#find-queue-construct-as) (`--as`): Build the dependency queue *as if* running a particular command. Useful for performing dry-runs of [`run`](/docs/reference/cli-options#run) using discovery commands, like [`find`](/docs/reference/cli-options#find) and [`list`](/docs/reference/cli-options#list). -- [`--queue-ignore-dag-order`](/docs/reference/cli-options#queue-ignore-dag-order): Execute units concurrently without respecting the dependency order. Useful for read-only commands like `validate` or `plan` across independent units, but **dangerous** for commands that modify state (`apply`, `destroy`). -- [`--queue-ignore-errors`](/docs/reference/cli-options#queue-ignore-errors): Continue processing the queue even if some units fail. Useful for identifying all errors at once, but can lead to inconsistent state if used with `apply` or `destroy`. + Example `subtree/dependent/terragrunt.hcl`: -## Important Considerations + ```hcl + dependency "dep" { + config_path = "../dependency" + skip_outputs = true + } + + include "common" { + path = find_in_parent_folders("common.hcl") + } + ``` + + Example `subtree/dependency/terragrunt.hcl`: + + ```hcl + dependency "dep" { + config_path = "../../ancestor-dependency" + skip_outputs = true + } + + include "common" { + path = find_in_parent_folders("common.hcl") + } + ``` + + Example `subtree/common.hcl`: + + ```hcl + # Intentionally empty + ``` + + Include `subtree/dependent` and `subtree/dependency` (the units that read `subtree/common.hcl`) in the run. + > **Tip:** Sometimes, it can be impossible for Terragrunt to know that certain files are read by a unit (e.g. if the file is read in the OpenTofu/Terraform module, not in Terragrunt configuration). In cases like this, you can use the [`mark_as_read`](/docs/reference/built-in-functions#mark_as_read) HCL function to explicitly tell Terragrunt that a unit reads a file. -- When using `run --all plan` with units that have dependencies (e.g. via `dependency` or `dependencies` blocks), the command will fail if those dependencies have never been deployed. This is because Terragrunt cannot resolve dependency outputs without existing state. +### Modifying Order and Error Handling + +- [`--queue-construct-as`](/docs/reference/cli-options#queue-construct-as) (`--as`): Build the run queue *as if* a particular command was run. Useful for performing dry-runs of [`run`](/docs/reference/cli-options#run) using discovery commands, like [`find`](/docs/reference/cli-options#find) and [`list`](/docs/reference/cli-options#list). + e.g. `terragrunt list --queue-construct-as destroy` + This lists the units in the order they'd be processed for `run --all destroy`: + + ```bash + $ terragrunt list --as destroy -l + Type Path + unit independent + unit subtree/dependent + unit subtree/dependency + unit ancestor-dependency + ``` + + ```bash + $ terragrunt list --as plan -l + Type Path + unit ancestor-dependency + unit independent + unit subtree/dependency + unit subtree/dependent + ``` + +- [`--queue-ignore-dag-order`](/docs/reference/cli-options#queue-ignore-dag-order): Execute units concurrently without respecting the dependency order. + + e.g. `terragrunt run --all plan --queue-ignore-dag-order` + + Run `plan` on `ancestor-dependency`, `subtree/dependency`, `subtree/dependent`, and `independent` all concurrently, without waiting for their defined dependencies. For instance, `subtree/dependent`'s plan would not wait for `subtree/dependency`'s plan to complete. + > **Caution:** This flag is useful for faster runs in stateless commands like `validate` or `plan`, but is **dangerous** for commands that modify state like `apply` or `destroy`. You might encounter failed applies if unit dependencies are not applied before dependents, and conversely, failed destroys if unit dependents are not destroyed before dependencies. - To work around this issue, use [mock outputs in dependency blocks](/docs/reference/config-blocks-and-attributes#dependency). +- [`--queue-ignore-errors`](/docs/reference/cli-options#queue-ignore-errors): Continue processing the queue even if some units fail. -- Do not set `TF_PLUGIN_CACHE_DIR` when using `run --all` (unless using OpenTofu >= 1.10). + e.g. `terragrunt run --all plan --queue-ignore-errors` - This can cause concurrent access issues with the provider cache. Instead, use Terragrunt's built-in [Provider Cache Server](/docs/features/provider-cache-server/). + If `ancestor-dependency`'s plan fails, Terragrunt will still attempt to run `plan` for `subtree/dependency`, then `subtree/dependent`, and also for `independent`. + > **Caution:** This flag is useful for identifying all errors at once, but can lead to inconsistent state if used with `apply` or `destroy`. You might encounter failed applies if unit dependencies are not applied successfully before dependents, and conversely, failed destroys if unit dependents are not destroyed successfully before dependencies. + +## Important Considerations -- When using `run --all` with `apply` or `destroy`, Terragrunt automatically adds the `-auto-approve` flag due to limitations with shared stdin making individual approvals impossible. Use [`--no-auto-approve`](/docs/reference/cli-options#no-auto-approve) to override this, but be aware you might need alternative approval workflows. +> **Caution:** When using `run --all plan` with units that have dependencies (e.g. via `dependency` or `dependencies` blocks), the command will fail if those dependencies have never been deployed. This is because Terragrunt cannot resolve dependency outputs without existing state. +> +> To work around this issue, use [mock outputs in dependency blocks](/docs/reference/config-blocks-and-attributes#dependency). +> +> **Caution:** Do not set `TF_PLUGIN_CACHE_DIR` when using `run --all` (unless using OpenTofu >= 1.10). +> +> This can cause concurrent access issues with the provider cache. Instead, use Terragrunt's built-in [Provider Cache Server](/docs/features/provider-cache-server/). +> +> **Caution:** When using `run --all` with `apply` or `destroy`, Terragrunt automatically adds the `-auto-approve` flag due to limitations with shared stdin making individual approvals impossible. Use [`--no-auto-approve`](/docs/reference/cli-options#no-auto-approve) to override this, but be aware you might need alternative approval workflows. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/docs/assets/img/05-run-queue-0.svg new/terragrunt-0.78.3/docs/assets/img/05-run-queue-0.svg --- old/terragrunt-0.78.2/docs/assets/img/05-run-queue-0.svg 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/docs/assets/img/05-run-queue-0.svg 2025-05-12 16:48:19.000000000 +0200 @@ -1,17 +1,17 @@ -<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.0" preserveAspectRatio="xMinYMin meet" viewBox="0 0 849 394"><svg class="d2-2624522423 d2-svg" width="849" height="394" viewBox="-101 -101 849 394"><rect x="-101.000000" y="-101.000000" width="849.000000" height="394.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[ -.d2-2624522423 .text-bold { - font-family: "d2-2624522423-font-bold"; +<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.0" preserveAspectRatio="xMinYMin meet" viewBox="0 0 1055 394"><svg class="d2-1312178538 d2-svg" width="1055" height="394" viewBox="-101 -101 1055 394"><rect x="-101.000000" y="-101.000000" width="1055.000000" height="394.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[ +.d2-1312178538 .text-bold { + font-family: "d2-1312178538-font-bold"; } @font-face { - font-family: d2-2624522423-font-bold; - src: url("data:application/font-woff;base64,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"); + font-family: d2-1312178538-font-bold; + src: url("data:application/font-woff;base64,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"); } -.d2-2624522423 .text-italic { - font-family: "d2-2624522423-font-italic"; +.d2-1312178538 .text-italic { + font-family: "d2-1312178538-font-italic"; } @font-face { - font-family: d2-2624522423-font-italic; - src: url("data:application/font-woff;base64,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"); + font-family: d2-1312178538-font-italic; + src: url("data:application/font-woff;base64,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"); }]]></style><style type="text/css"><![CDATA[.shape { shape-rendering: geometricPrecision; stroke-linejoin: round; @@ -25,155 +25,155 @@ opacity: 0.5; } - .d2-2624522423 .fill-N1{fill:#0A0F25;} - .d2-2624522423 .fill-N2{fill:#676C7E;} - .d2-2624522423 .fill-N3{fill:#9499AB;} - .d2-2624522423 .fill-N4{fill:#CFD2DD;} - .d2-2624522423 .fill-N5{fill:#DEE1EB;} - .d2-2624522423 .fill-N6{fill:#EEF1F8;} - .d2-2624522423 .fill-N7{fill:#FFFFFF;} - .d2-2624522423 .fill-B1{fill:#0D32B2;} - .d2-2624522423 .fill-B2{fill:#0D32B2;} - .d2-2624522423 .fill-B3{fill:#E3E9FD;} - .d2-2624522423 .fill-B4{fill:#E3E9FD;} - .d2-2624522423 .fill-B5{fill:#EDF0FD;} - .d2-2624522423 .fill-B6{fill:#F7F8FE;} - .d2-2624522423 .fill-AA2{fill:#4A6FF3;} - .d2-2624522423 .fill-AA4{fill:#EDF0FD;} - .d2-2624522423 .fill-AA5{fill:#F7F8FE;} - .d2-2624522423 .fill-AB4{fill:#EDF0FD;} - .d2-2624522423 .fill-AB5{fill:#F7F8FE;} - .d2-2624522423 .stroke-N1{stroke:#0A0F25;} - .d2-2624522423 .stroke-N2{stroke:#676C7E;} - .d2-2624522423 .stroke-N3{stroke:#9499AB;} - .d2-2624522423 .stroke-N4{stroke:#CFD2DD;} - .d2-2624522423 .stroke-N5{stroke:#DEE1EB;} - .d2-2624522423 .stroke-N6{stroke:#EEF1F8;} - .d2-2624522423 .stroke-N7{stroke:#FFFFFF;} - .d2-2624522423 .stroke-B1{stroke:#0D32B2;} - .d2-2624522423 .stroke-B2{stroke:#0D32B2;} - .d2-2624522423 .stroke-B3{stroke:#E3E9FD;} - .d2-2624522423 .stroke-B4{stroke:#E3E9FD;} - .d2-2624522423 .stroke-B5{stroke:#EDF0FD;} - .d2-2624522423 .stroke-B6{stroke:#F7F8FE;} - .d2-2624522423 .stroke-AA2{stroke:#4A6FF3;} - .d2-2624522423 .stroke-AA4{stroke:#EDF0FD;} - .d2-2624522423 .stroke-AA5{stroke:#F7F8FE;} - .d2-2624522423 .stroke-AB4{stroke:#EDF0FD;} - .d2-2624522423 .stroke-AB5{stroke:#F7F8FE;} - .d2-2624522423 .background-color-N1{background-color:#0A0F25;} - .d2-2624522423 .background-color-N2{background-color:#676C7E;} - .d2-2624522423 .background-color-N3{background-color:#9499AB;} - .d2-2624522423 .background-color-N4{background-color:#CFD2DD;} - .d2-2624522423 .background-color-N5{background-color:#DEE1EB;} - .d2-2624522423 .background-color-N6{background-color:#EEF1F8;} - .d2-2624522423 .background-color-N7{background-color:#FFFFFF;} - .d2-2624522423 .background-color-B1{background-color:#0D32B2;} - .d2-2624522423 .background-color-B2{background-color:#0D32B2;} - .d2-2624522423 .background-color-B3{background-color:#E3E9FD;} - .d2-2624522423 .background-color-B4{background-color:#E3E9FD;} - .d2-2624522423 .background-color-B5{background-color:#EDF0FD;} - .d2-2624522423 .background-color-B6{background-color:#F7F8FE;} - .d2-2624522423 .background-color-AA2{background-color:#4A6FF3;} - .d2-2624522423 .background-color-AA4{background-color:#EDF0FD;} - .d2-2624522423 .background-color-AA5{background-color:#F7F8FE;} - .d2-2624522423 .background-color-AB4{background-color:#EDF0FD;} - .d2-2624522423 .background-color-AB5{background-color:#F7F8FE;} - .d2-2624522423 .color-N1{color:#0A0F25;} - .d2-2624522423 .color-N2{color:#676C7E;} - .d2-2624522423 .color-N3{color:#9499AB;} - .d2-2624522423 .color-N4{color:#CFD2DD;} - .d2-2624522423 .color-N5{color:#DEE1EB;} - .d2-2624522423 .color-N6{color:#EEF1F8;} - .d2-2624522423 .color-N7{color:#FFFFFF;} - .d2-2624522423 .color-B1{color:#0D32B2;} - .d2-2624522423 .color-B2{color:#0D32B2;} - .d2-2624522423 .color-B3{color:#E3E9FD;} - .d2-2624522423 .color-B4{color:#E3E9FD;} - .d2-2624522423 .color-B5{color:#EDF0FD;} - .d2-2624522423 .color-B6{color:#F7F8FE;} - .d2-2624522423 .color-AA2{color:#4A6FF3;} - .d2-2624522423 .color-AA4{color:#EDF0FD;} - .d2-2624522423 .color-AA5{color:#F7F8FE;} - .d2-2624522423 .color-AB4{color:#EDF0FD;} - .d2-2624522423 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sket ch-overlay-AA4{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}@media screen and (prefers-color-scheme:dark){ - .d2-2624522423 .fill-N1{fill:#CDD6F4;} - .d2-2624522423 .fill-N2{fill:#BAC2DE;} - .d2-2624522423 .fill-N3{fill:#A6ADC8;} - .d2-2624522423 .fill-N4{fill:#585B70;} - .d2-2624522423 .fill-N5{fill:#45475A;} - .d2-2624522423 .fill-N6{fill:#313244;} - .d2-2624522423 .fill-N7{fill:#1E1E2E;} - .d2-2624522423 .fill-B1{fill:#CBA6f7;} - .d2-2624522423 .fill-B2{fill:#CBA6f7;} - .d2-2624522423 .fill-B3{fill:#6C7086;} - .d2-2624522423 .fill-B4{fill:#585B70;} - .d2-2624522423 .fill-B5{fill:#45475A;} - .d2-2624522423 .fill-B6{fill:#313244;} - .d2-2624522423 .fill-AA2{fill:#f38BA8;} - .d2-2624522423 .fill-AA4{fill:#45475A;} - .d2-2624522423 .fill-AA5{fill:#313244;} - .d2-2624522423 .fill-AB4{fill:#45475A;} - .d2-2624522423 .fill-AB5{fill:#313244;} - .d2-2624522423 .stroke-N1{stroke:#CDD6F4;} - .d2-2624522423 .stroke-N2{stroke:#BAC2DE;} - .d2-2624522423 .stroke-N3{stroke:#A6ADC8;} - .d2-2624522423 .stroke-N4{stroke:#585B70;} - .d2-2624522423 .stroke-N5{stroke:#45475A;} - .d2-2624522423 .stroke-N6{stroke:#313244;} - .d2-2624522423 .stroke-N7{stroke:#1E1E2E;} - .d2-2624522423 .stroke-B1{stroke:#CBA6f7;} - .d2-2624522423 .stroke-B2{stroke:#CBA6f7;} - .d2-2624522423 .stroke-B3{stroke:#6C7086;} - .d2-2624522423 .stroke-B4{stroke:#585B70;} - .d2-2624522423 .stroke-B5{stroke:#45475A;} - .d2-2624522423 .stroke-B6{stroke:#313244;} - .d2-2624522423 .stroke-AA2{stroke:#f38BA8;} - .d2-2624522423 .stroke-AA4{stroke:#45475A;} - .d2-2624522423 .stroke-AA5{stroke:#313244;} - .d2-2624522423 .stroke-AB4{stroke:#45475A;} - .d2-2624522423 .stroke-AB5{stroke:#313244;} - .d2-2624522423 .background-color-N1{background-color:#CDD6F4;} - .d2-2624522423 .background-color-N2{background-color:#BAC2DE;} - .d2-2624522423 .background-color-N3{background-color:#A6ADC8;} - .d2-2624522423 .background-color-N4{background-color:#585B70;} - .d2-2624522423 .background-color-N5{background-color:#45475A;} - .d2-2624522423 .background-color-N6{background-color:#313244;} - .d2-2624522423 .background-color-N7{background-color:#1E1E2E;} - .d2-2624522423 .background-color-B1{background-color:#CBA6f7;} - .d2-2624522423 .background-color-B2{background-color:#CBA6f7;} - .d2-2624522423 .background-color-B3{background-color:#6C7086;} - .d2-2624522423 .background-color-B4{background-color:#585B70;} - .d2-2624522423 .background-color-B5{background-color:#45475A;} - .d2-2624522423 .background-color-B6{background-color:#313244;} - .d2-2624522423 .background-color-AA2{background-color:#f38BA8;} - .d2-2624522423 .background-color-AA4{background-color:#45475A;} - .d2-2624522423 .background-color-AA5{background-color:#313244;} - .d2-2624522423 .background-color-AB4{background-color:#45475A;} - .d2-2624522423 .background-color-AB5{background-color:#313244;} - .d2-2624522423 .color-N1{color:#CDD6F4;} - .d2-2624522423 .color-N2{color:#BAC2DE;} - .d2-2624522423 .color-N3{color:#A6ADC8;} - .d2-2624522423 .color-N4{color:#585B70;} - .d2-2624522423 .color-N5{color:#45475A;} - .d2-2624522423 .color-N6{color:#313244;} - .d2-2624522423 .color-N7{color:#1E1E2E;} - .d2-2624522423 .color-B1{color:#CBA6f7;} - .d2-2624522423 .color-B2{color:#CBA6f7;} - .d2-2624522423 .color-B3{color:#6C7086;} - .d2-2624522423 .color-B4{color:#585B70;} - .d2-2624522423 .color-B5{color:#45475A;} - .d2-2624522423 .color-B6{color:#313244;} - .d2-2624522423 .color-AA2{color:#f38BA8;} - .d2-2624522423 .color-AA4{color:#45475A;} - .d2-2624522423 .color-AA5{color:#313244;} - .d2-2624522423 .color-AB4{color:#45475A;} - .d2-2624522423 .color-AB5{color:#313244;}.appendix text.text{fill:#CDD6F4}.md{--color-fg-default:#CDD6F4;--color-fg-muted:#BAC2DE;--color-fg-subtle:#A6ADC8;--color-canvas-default:#1E1E2E;--color-canvas-subtle:#313244;--color-border-default:#CBA6f7;--color-border-muted:#CBA6f7;--color-neutral-muted:#313244;--color-accent-fg:#CBA6f7;--color-accent-emphasis:#CBA6f7;--color-attention-subtle:#BAC2DE;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-B2{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-B3{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-B4{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-B5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-B6{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AA2{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color -burn}.sketch-overlay-AA4{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AA5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AB4{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AB5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N1{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N2{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-N5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N6{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N7{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.light-code{display: none}.dark-code{display: block}}]]></style><g class="QQ== "><g class="shape" ><rect x="0.000000" y="0.000000" width="88.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="44.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit A</text></g><g class="Qg=="><g class="shape" ><rect x="280.000000" y="0.000000" width="88.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="324.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit B</text></g><g class="Qw=="><g class="shape" ><rect x="560.000000" y="0.000000" width="87.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="603.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit C</text></g><g class="RA=="><g class="shape" ><rect x="0.000000" y="126.000000" width="88.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="44.000000" y="164.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit D</text></g><g class="KEEgLSZndDsgQilbMF0="><marker id="mk-d2-2624522423-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 90.000000 33.000000 C 164.800003 33.000000 203.199997 33.000000 276.000000 33.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2624522423-3488378134)" mask="url(#d2-2624522423)" /><text x="184.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><g class="KEIgLSZndDsgQylbMF0="><path d="M 370.000000 33.000000 C 444.799988 33.000000 483.200012 33.000000 556.000000 33.000000" fill="none" c lass="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2624522423-3488378134)" mask="url(#d2-2624522423)" /><text x="464.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><mask id="d2-2624522423" maskUnits="userSpaceOnUse" x="-101" y="-101" width="849" height="394"> -<rect x="-101" y="-101" width="849" height="394" fill="white"></rect> -<rect x="20.500000" y="22.500000" width="47" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="300.500000" y="22.500000" width="47" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="580.500000" y="22.500000" width="46" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="20.500000" y="148.500000" width="47" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="144.000000" y="23.000000" width="80" height="21" fill="black"></rect> -<rect x="424.000000" y="23.000000" width="80" height="21" fill="black"></rect> + .d2-1312178538 .fill-N1{fill:#0A0F25;} + .d2-1312178538 .fill-N2{fill:#676C7E;} + .d2-1312178538 .fill-N3{fill:#9499AB;} + .d2-1312178538 .fill-N4{fill:#CFD2DD;} + .d2-1312178538 .fill-N5{fill:#DEE1EB;} + .d2-1312178538 .fill-N6{fill:#EEF1F8;} + .d2-1312178538 .fill-N7{fill:#FFFFFF;} + .d2-1312178538 .fill-B1{fill:#0D32B2;} + .d2-1312178538 .fill-B2{fill:#0D32B2;} + .d2-1312178538 .fill-B3{fill:#E3E9FD;} + .d2-1312178538 .fill-B4{fill:#E3E9FD;} + .d2-1312178538 .fill-B5{fill:#EDF0FD;} + .d2-1312178538 .fill-B6{fill:#F7F8FE;} + .d2-1312178538 .fill-AA2{fill:#4A6FF3;} + .d2-1312178538 .fill-AA4{fill:#EDF0FD;} + .d2-1312178538 .fill-AA5{fill:#F7F8FE;} + .d2-1312178538 .fill-AB4{fill:#EDF0FD;} + .d2-1312178538 .fill-AB5{fill:#F7F8FE;} + .d2-1312178538 .stroke-N1{stroke:#0A0F25;} + .d2-1312178538 .stroke-N2{stroke:#676C7E;} + .d2-1312178538 .stroke-N3{stroke:#9499AB;} + .d2-1312178538 .stroke-N4{stroke:#CFD2DD;} + .d2-1312178538 .stroke-N5{stroke:#DEE1EB;} + .d2-1312178538 .stroke-N6{stroke:#EEF1F8;} + .d2-1312178538 .stroke-N7{stroke:#FFFFFF;} + .d2-1312178538 .stroke-B1{stroke:#0D32B2;} + .d2-1312178538 .stroke-B2{stroke:#0D32B2;} + .d2-1312178538 .stroke-B3{stroke:#E3E9FD;} + .d2-1312178538 .stroke-B4{stroke:#E3E9FD;} + .d2-1312178538 .stroke-B5{stroke:#EDF0FD;} + .d2-1312178538 .stroke-B6{stroke:#F7F8FE;} + .d2-1312178538 .stroke-AA2{stroke:#4A6FF3;} + .d2-1312178538 .stroke-AA4{stroke:#EDF0FD;} + .d2-1312178538 .stroke-AA5{stroke:#F7F8FE;} + .d2-1312178538 .stroke-AB4{stroke:#EDF0FD;} + .d2-1312178538 .stroke-AB5{stroke:#F7F8FE;} + .d2-1312178538 .background-color-N1{background-color:#0A0F25;} + .d2-1312178538 .background-color-N2{background-color:#676C7E;} + .d2-1312178538 .background-color-N3{background-color:#9499AB;} + .d2-1312178538 .background-color-N4{background-color:#CFD2DD;} + .d2-1312178538 .background-color-N5{background-color:#DEE1EB;} + .d2-1312178538 .background-color-N6{background-color:#EEF1F8;} + .d2-1312178538 .background-color-N7{background-color:#FFFFFF;} + .d2-1312178538 .background-color-B1{background-color:#0D32B2;} + .d2-1312178538 .background-color-B2{background-color:#0D32B2;} + .d2-1312178538 .background-color-B3{background-color:#E3E9FD;} + .d2-1312178538 .background-color-B4{background-color:#E3E9FD;} + .d2-1312178538 .background-color-B5{background-color:#EDF0FD;} + .d2-1312178538 .background-color-B6{background-color:#F7F8FE;} + .d2-1312178538 .background-color-AA2{background-color:#4A6FF3;} + .d2-1312178538 .background-color-AA4{background-color:#EDF0FD;} + .d2-1312178538 .background-color-AA5{background-color:#F7F8FE;} + .d2-1312178538 .background-color-AB4{background-color:#EDF0FD;} + .d2-1312178538 .background-color-AB5{background-color:#F7F8FE;} + .d2-1312178538 .color-N1{color:#0A0F25;} + .d2-1312178538 .color-N2{color:#676C7E;} + .d2-1312178538 .color-N3{color:#9499AB;} + .d2-1312178538 .color-N4{color:#CFD2DD;} + .d2-1312178538 .color-N5{color:#DEE1EB;} + .d2-1312178538 .color-N6{color:#EEF1F8;} + .d2-1312178538 .color-N7{color:#FFFFFF;} + .d2-1312178538 .color-B1{color:#0D32B2;} + .d2-1312178538 .color-B2{color:#0D32B2;} + .d2-1312178538 .color-B3{color:#E3E9FD;} + .d2-1312178538 .color-B4{color:#E3E9FD;} + .d2-1312178538 .color-B5{color:#EDF0FD;} + .d2-1312178538 .color-B6{color:#F7F8FE;} + .d2-1312178538 .color-AA2{color:#4A6FF3;} + .d2-1312178538 .color-AA4{color:#EDF0FD;} + .d2-1312178538 .color-AA5{color:#F7F8FE;} + .d2-1312178538 .color-AB4{color:#EDF0FD;} + .d2-1312178538 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sket ch-overlay-AA4{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}@media screen and (prefers-color-scheme:dark){ + .d2-1312178538 .fill-N1{fill:#CDD6F4;} + .d2-1312178538 .fill-N2{fill:#BAC2DE;} + .d2-1312178538 .fill-N3{fill:#A6ADC8;} + .d2-1312178538 .fill-N4{fill:#585B70;} + .d2-1312178538 .fill-N5{fill:#45475A;} + .d2-1312178538 .fill-N6{fill:#313244;} + .d2-1312178538 .fill-N7{fill:#1E1E2E;} + .d2-1312178538 .fill-B1{fill:#CBA6f7;} + .d2-1312178538 .fill-B2{fill:#CBA6f7;} + .d2-1312178538 .fill-B3{fill:#6C7086;} + .d2-1312178538 .fill-B4{fill:#585B70;} + .d2-1312178538 .fill-B5{fill:#45475A;} + .d2-1312178538 .fill-B6{fill:#313244;} + .d2-1312178538 .fill-AA2{fill:#f38BA8;} + .d2-1312178538 .fill-AA4{fill:#45475A;} + .d2-1312178538 .fill-AA5{fill:#313244;} + .d2-1312178538 .fill-AB4{fill:#45475A;} + .d2-1312178538 .fill-AB5{fill:#313244;} + .d2-1312178538 .stroke-N1{stroke:#CDD6F4;} + .d2-1312178538 .stroke-N2{stroke:#BAC2DE;} + .d2-1312178538 .stroke-N3{stroke:#A6ADC8;} + .d2-1312178538 .stroke-N4{stroke:#585B70;} + .d2-1312178538 .stroke-N5{stroke:#45475A;} + .d2-1312178538 .stroke-N6{stroke:#313244;} + .d2-1312178538 .stroke-N7{stroke:#1E1E2E;} + .d2-1312178538 .stroke-B1{stroke:#CBA6f7;} + .d2-1312178538 .stroke-B2{stroke:#CBA6f7;} + .d2-1312178538 .stroke-B3{stroke:#6C7086;} + .d2-1312178538 .stroke-B4{stroke:#585B70;} + .d2-1312178538 .stroke-B5{stroke:#45475A;} + .d2-1312178538 .stroke-B6{stroke:#313244;} + .d2-1312178538 .stroke-AA2{stroke:#f38BA8;} + .d2-1312178538 .stroke-AA4{stroke:#45475A;} + .d2-1312178538 .stroke-AA5{stroke:#313244;} + .d2-1312178538 .stroke-AB4{stroke:#45475A;} + .d2-1312178538 .stroke-AB5{stroke:#313244;} + .d2-1312178538 .background-color-N1{background-color:#CDD6F4;} + .d2-1312178538 .background-color-N2{background-color:#BAC2DE;} + .d2-1312178538 .background-color-N3{background-color:#A6ADC8;} + .d2-1312178538 .background-color-N4{background-color:#585B70;} + .d2-1312178538 .background-color-N5{background-color:#45475A;} + .d2-1312178538 .background-color-N6{background-color:#313244;} + .d2-1312178538 .background-color-N7{background-color:#1E1E2E;} + .d2-1312178538 .background-color-B1{background-color:#CBA6f7;} + .d2-1312178538 .background-color-B2{background-color:#CBA6f7;} + .d2-1312178538 .background-color-B3{background-color:#6C7086;} + .d2-1312178538 .background-color-B4{background-color:#585B70;} + .d2-1312178538 .background-color-B5{background-color:#45475A;} + .d2-1312178538 .background-color-B6{background-color:#313244;} + .d2-1312178538 .background-color-AA2{background-color:#f38BA8;} + .d2-1312178538 .background-color-AA4{background-color:#45475A;} + .d2-1312178538 .background-color-AA5{background-color:#313244;} + .d2-1312178538 .background-color-AB4{background-color:#45475A;} + .d2-1312178538 .background-color-AB5{background-color:#313244;} + .d2-1312178538 .color-N1{color:#CDD6F4;} + .d2-1312178538 .color-N2{color:#BAC2DE;} + .d2-1312178538 .color-N3{color:#A6ADC8;} + .d2-1312178538 .color-N4{color:#585B70;} + .d2-1312178538 .color-N5{color:#45475A;} + .d2-1312178538 .color-N6{color:#313244;} + .d2-1312178538 .color-N7{color:#1E1E2E;} + .d2-1312178538 .color-B1{color:#CBA6f7;} + .d2-1312178538 .color-B2{color:#CBA6f7;} + .d2-1312178538 .color-B3{color:#6C7086;} + .d2-1312178538 .color-B4{color:#585B70;} + .d2-1312178538 .color-B5{color:#45475A;} + .d2-1312178538 .color-B6{color:#313244;} + .d2-1312178538 .color-AA2{color:#f38BA8;} + .d2-1312178538 .color-AA4{color:#45475A;} + .d2-1312178538 .color-AA5{color:#313244;} + .d2-1312178538 .color-AB4{color:#45475A;} + .d2-1312178538 .color-AB5{color:#313244;}.appendix text.text{fill:#CDD6F4}.md{--color-fg-default:#CDD6F4;--color-fg-muted:#BAC2DE;--color-fg-subtle:#A6ADC8;--color-canvas-default:#1E1E2E;--color-canvas-subtle:#313244;--color-border-default:#CBA6f7;--color-border-muted:#CBA6f7;--color-neutral-muted:#313244;--color-accent-fg:#CBA6f7;--color-accent-emphasis:#CBA6f7;--color-attention-subtle:#BAC2DE;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-B2{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-B3{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-B4{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-B5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-B6{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AA2{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color -burn}.sketch-overlay-AA4{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AA5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AB4{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AB5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N1{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N2{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-N5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N6{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N7{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.light-code{display: none}.dark-code{display: block}}]]></style><g class="ZGVw ZW5kZW50"><g class="shape" ><rect x="7.000000" y="0.000000" width="122.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="68.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">dependent</text></g><g class="ZGVwZW5kZW5jeQ=="><g class="shape" ><rect x="328.000000" y="0.000000" width="133.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="394.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">dependency</text></g><g class="YW5jZXN0b3ItZGVwZW5kZW5jeQ=="><g class="shape" ><rect x="653.000000" y="0.000000" width="200.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="753.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">ancestor-dependency</text></g><g class="aW5kZXBlbmRlbnQ="><g class="shape" ><rect x="0.000000" y="126.000000" width="136.000000" he ight="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="68.000000" y="164.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">independent</text></g><g class="KGRlcGVuZGVudCAtJmd0OyBkZXBlbmRlbmN5KVswXQ=="><marker id="mk-d2-1312178538-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 131.000000 33.000000 C 211.399994 33.000000 251.199997 33.000000 324.000000 33.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1312178538-3488378134)" mask="url(#d2-1312178538)" /><text x="229.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><g class="KGRlcGVuZGVuY3kgLSZndDs gYW5jZXN0b3ItZGVwZW5kZW5jeSlbMF0="><path d="M 463.000000 33.000000 C 537.799988 33.000000 576.200012 33.000000 649.000000 33.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1312178538-3488378134)" mask="url(#d2-1312178538)" /><text x="557.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><mask id="d2-1312178538" maskUnits="userSpaceOnUse" x="-101" y="-101" width="1055" height="394"> +<rect x="-101" y="-101" width="1055" height="394" fill="white"></rect> +<rect x="27.500000" y="22.500000" width="81" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="348.500000" y="22.500000" width="92" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="673.500000" y="22.500000" width="159" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="20.500000" y="148.500000" width="95" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="189.000000" y="23.000000" width="80" height="21" fill="black"></rect> +<rect x="517.000000" y="23.000000" width="80" height="21" fill="black"></rect> </mask></svg></svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/docs-starlight/public/d2/docs/02-features/05-run-queue-0.svg new/terragrunt-0.78.3/docs-starlight/public/d2/docs/02-features/05-run-queue-0.svg --- old/terragrunt-0.78.2/docs-starlight/public/d2/docs/02-features/05-run-queue-0.svg 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/docs-starlight/public/d2/docs/02-features/05-run-queue-0.svg 2025-05-12 16:48:19.000000000 +0200 @@ -1,17 +1,17 @@ -<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.0" preserveAspectRatio="xMinYMin meet" viewBox="0 0 849 394"><svg class="d2-2624522423 d2-svg" width="849" height="394" viewBox="-101 -101 849 394"><rect x="-101.000000" y="-101.000000" width="849.000000" height="394.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[ -.d2-2624522423 .text-bold { - font-family: "d2-2624522423-font-bold"; +<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="0.7.0" preserveAspectRatio="xMinYMin meet" viewBox="0 0 1055 394"><svg class="d2-1312178538 d2-svg" width="1055" height="394" viewBox="-101 -101 1055 394"><rect x="-101.000000" y="-101.000000" width="1055.000000" height="394.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[ +.d2-1312178538 .text-bold { + font-family: "d2-1312178538-font-bold"; } @font-face { - font-family: d2-2624522423-font-bold; - src: url("data:application/font-woff;base64,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"); + font-family: d2-1312178538-font-bold; + src: url("data:application/font-woff;base64,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"); } -.d2-2624522423 .text-italic { - font-family: "d2-2624522423-font-italic"; +.d2-1312178538 .text-italic { + font-family: "d2-1312178538-font-italic"; } @font-face { - font-family: d2-2624522423-font-italic; - src: url("data:application/font-woff;base64,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"); + font-family: d2-1312178538-font-italic; + src: url("data:application/font-woff;base64,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"); }]]></style><style type="text/css"><![CDATA[.shape { shape-rendering: geometricPrecision; stroke-linejoin: round; @@ -25,155 +25,155 @@ opacity: 0.5; } - .d2-2624522423 .fill-N1{fill:#0A0F25;} - .d2-2624522423 .fill-N2{fill:#676C7E;} - .d2-2624522423 .fill-N3{fill:#9499AB;} - .d2-2624522423 .fill-N4{fill:#CFD2DD;} - .d2-2624522423 .fill-N5{fill:#DEE1EB;} - .d2-2624522423 .fill-N6{fill:#EEF1F8;} - .d2-2624522423 .fill-N7{fill:#FFFFFF;} - .d2-2624522423 .fill-B1{fill:#0D32B2;} - .d2-2624522423 .fill-B2{fill:#0D32B2;} - .d2-2624522423 .fill-B3{fill:#E3E9FD;} - .d2-2624522423 .fill-B4{fill:#E3E9FD;} - .d2-2624522423 .fill-B5{fill:#EDF0FD;} - .d2-2624522423 .fill-B6{fill:#F7F8FE;} - .d2-2624522423 .fill-AA2{fill:#4A6FF3;} - .d2-2624522423 .fill-AA4{fill:#EDF0FD;} - .d2-2624522423 .fill-AA5{fill:#F7F8FE;} - .d2-2624522423 .fill-AB4{fill:#EDF0FD;} - .d2-2624522423 .fill-AB5{fill:#F7F8FE;} - .d2-2624522423 .stroke-N1{stroke:#0A0F25;} - .d2-2624522423 .stroke-N2{stroke:#676C7E;} - .d2-2624522423 .stroke-N3{stroke:#9499AB;} - .d2-2624522423 .stroke-N4{stroke:#CFD2DD;} - .d2-2624522423 .stroke-N5{stroke:#DEE1EB;} - .d2-2624522423 .stroke-N6{stroke:#EEF1F8;} - .d2-2624522423 .stroke-N7{stroke:#FFFFFF;} - .d2-2624522423 .stroke-B1{stroke:#0D32B2;} - .d2-2624522423 .stroke-B2{stroke:#0D32B2;} - .d2-2624522423 .stroke-B3{stroke:#E3E9FD;} - .d2-2624522423 .stroke-B4{stroke:#E3E9FD;} - .d2-2624522423 .stroke-B5{stroke:#EDF0FD;} - .d2-2624522423 .stroke-B6{stroke:#F7F8FE;} - .d2-2624522423 .stroke-AA2{stroke:#4A6FF3;} - .d2-2624522423 .stroke-AA4{stroke:#EDF0FD;} - .d2-2624522423 .stroke-AA5{stroke:#F7F8FE;} - .d2-2624522423 .stroke-AB4{stroke:#EDF0FD;} - .d2-2624522423 .stroke-AB5{stroke:#F7F8FE;} - .d2-2624522423 .background-color-N1{background-color:#0A0F25;} - .d2-2624522423 .background-color-N2{background-color:#676C7E;} - .d2-2624522423 .background-color-N3{background-color:#9499AB;} - .d2-2624522423 .background-color-N4{background-color:#CFD2DD;} - .d2-2624522423 .background-color-N5{background-color:#DEE1EB;} - .d2-2624522423 .background-color-N6{background-color:#EEF1F8;} - .d2-2624522423 .background-color-N7{background-color:#FFFFFF;} - .d2-2624522423 .background-color-B1{background-color:#0D32B2;} - .d2-2624522423 .background-color-B2{background-color:#0D32B2;} - .d2-2624522423 .background-color-B3{background-color:#E3E9FD;} - .d2-2624522423 .background-color-B4{background-color:#E3E9FD;} - .d2-2624522423 .background-color-B5{background-color:#EDF0FD;} - .d2-2624522423 .background-color-B6{background-color:#F7F8FE;} - .d2-2624522423 .background-color-AA2{background-color:#4A6FF3;} - .d2-2624522423 .background-color-AA4{background-color:#EDF0FD;} - .d2-2624522423 .background-color-AA5{background-color:#F7F8FE;} - .d2-2624522423 .background-color-AB4{background-color:#EDF0FD;} - .d2-2624522423 .background-color-AB5{background-color:#F7F8FE;} - .d2-2624522423 .color-N1{color:#0A0F25;} - .d2-2624522423 .color-N2{color:#676C7E;} - .d2-2624522423 .color-N3{color:#9499AB;} - .d2-2624522423 .color-N4{color:#CFD2DD;} - .d2-2624522423 .color-N5{color:#DEE1EB;} - .d2-2624522423 .color-N6{color:#EEF1F8;} - .d2-2624522423 .color-N7{color:#FFFFFF;} - .d2-2624522423 .color-B1{color:#0D32B2;} - .d2-2624522423 .color-B2{color:#0D32B2;} - .d2-2624522423 .color-B3{color:#E3E9FD;} - .d2-2624522423 .color-B4{color:#E3E9FD;} - .d2-2624522423 .color-B5{color:#EDF0FD;} - .d2-2624522423 .color-B6{color:#F7F8FE;} - .d2-2624522423 .color-AA2{color:#4A6FF3;} - .d2-2624522423 .color-AA4{color:#EDF0FD;} - .d2-2624522423 .color-AA5{color:#F7F8FE;} - .d2-2624522423 .color-AB4{color:#EDF0FD;} - .d2-2624522423 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sket ch-overlay-AA4{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2624522423);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}@media screen and (prefers-color-scheme:dark){ - .d2-2624522423 .fill-N1{fill:#CDD6F4;} - .d2-2624522423 .fill-N2{fill:#BAC2DE;} - .d2-2624522423 .fill-N3{fill:#A6ADC8;} - .d2-2624522423 .fill-N4{fill:#585B70;} - .d2-2624522423 .fill-N5{fill:#45475A;} - .d2-2624522423 .fill-N6{fill:#313244;} - .d2-2624522423 .fill-N7{fill:#1E1E2E;} - .d2-2624522423 .fill-B1{fill:#CBA6f7;} - .d2-2624522423 .fill-B2{fill:#CBA6f7;} - .d2-2624522423 .fill-B3{fill:#6C7086;} - .d2-2624522423 .fill-B4{fill:#585B70;} - .d2-2624522423 .fill-B5{fill:#45475A;} - .d2-2624522423 .fill-B6{fill:#313244;} - .d2-2624522423 .fill-AA2{fill:#f38BA8;} - .d2-2624522423 .fill-AA4{fill:#45475A;} - .d2-2624522423 .fill-AA5{fill:#313244;} - .d2-2624522423 .fill-AB4{fill:#45475A;} - .d2-2624522423 .fill-AB5{fill:#313244;} - .d2-2624522423 .stroke-N1{stroke:#CDD6F4;} - .d2-2624522423 .stroke-N2{stroke:#BAC2DE;} - .d2-2624522423 .stroke-N3{stroke:#A6ADC8;} - .d2-2624522423 .stroke-N4{stroke:#585B70;} - .d2-2624522423 .stroke-N5{stroke:#45475A;} - .d2-2624522423 .stroke-N6{stroke:#313244;} - .d2-2624522423 .stroke-N7{stroke:#1E1E2E;} - .d2-2624522423 .stroke-B1{stroke:#CBA6f7;} - .d2-2624522423 .stroke-B2{stroke:#CBA6f7;} - .d2-2624522423 .stroke-B3{stroke:#6C7086;} - .d2-2624522423 .stroke-B4{stroke:#585B70;} - .d2-2624522423 .stroke-B5{stroke:#45475A;} - .d2-2624522423 .stroke-B6{stroke:#313244;} - .d2-2624522423 .stroke-AA2{stroke:#f38BA8;} - .d2-2624522423 .stroke-AA4{stroke:#45475A;} - .d2-2624522423 .stroke-AA5{stroke:#313244;} - .d2-2624522423 .stroke-AB4{stroke:#45475A;} - .d2-2624522423 .stroke-AB5{stroke:#313244;} - .d2-2624522423 .background-color-N1{background-color:#CDD6F4;} - .d2-2624522423 .background-color-N2{background-color:#BAC2DE;} - .d2-2624522423 .background-color-N3{background-color:#A6ADC8;} - .d2-2624522423 .background-color-N4{background-color:#585B70;} - .d2-2624522423 .background-color-N5{background-color:#45475A;} - .d2-2624522423 .background-color-N6{background-color:#313244;} - .d2-2624522423 .background-color-N7{background-color:#1E1E2E;} - .d2-2624522423 .background-color-B1{background-color:#CBA6f7;} - .d2-2624522423 .background-color-B2{background-color:#CBA6f7;} - .d2-2624522423 .background-color-B3{background-color:#6C7086;} - .d2-2624522423 .background-color-B4{background-color:#585B70;} - .d2-2624522423 .background-color-B5{background-color:#45475A;} - .d2-2624522423 .background-color-B6{background-color:#313244;} - .d2-2624522423 .background-color-AA2{background-color:#f38BA8;} - .d2-2624522423 .background-color-AA4{background-color:#45475A;} - .d2-2624522423 .background-color-AA5{background-color:#313244;} - .d2-2624522423 .background-color-AB4{background-color:#45475A;} - .d2-2624522423 .background-color-AB5{background-color:#313244;} - .d2-2624522423 .color-N1{color:#CDD6F4;} - .d2-2624522423 .color-N2{color:#BAC2DE;} - .d2-2624522423 .color-N3{color:#A6ADC8;} - .d2-2624522423 .color-N4{color:#585B70;} - .d2-2624522423 .color-N5{color:#45475A;} - .d2-2624522423 .color-N6{color:#313244;} - .d2-2624522423 .color-N7{color:#1E1E2E;} - .d2-2624522423 .color-B1{color:#CBA6f7;} - .d2-2624522423 .color-B2{color:#CBA6f7;} - .d2-2624522423 .color-B3{color:#6C7086;} - .d2-2624522423 .color-B4{color:#585B70;} - .d2-2624522423 .color-B5{color:#45475A;} - .d2-2624522423 .color-B6{color:#313244;} - .d2-2624522423 .color-AA2{color:#f38BA8;} - .d2-2624522423 .color-AA4{color:#45475A;} - .d2-2624522423 .color-AA5{color:#313244;} - .d2-2624522423 .color-AB4{color:#45475A;} - .d2-2624522423 .color-AB5{color:#313244;}.appendix text.text{fill:#CDD6F4}.md{--color-fg-default:#CDD6F4;--color-fg-muted:#BAC2DE;--color-fg-subtle:#A6ADC8;--color-canvas-default:#1E1E2E;--color-canvas-subtle:#313244;--color-border-default:#CBA6f7;--color-border-muted:#CBA6f7;--color-neutral-muted:#313244;--color-accent-fg:#CBA6f7;--color-accent-emphasis:#CBA6f7;--color-attention-subtle:#BAC2DE;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-B2{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-B3{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-B4{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-B5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-B6{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AA2{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color -burn}.sketch-overlay-AA4{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AA5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AB4{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-AB5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N1{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N2{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2624522423);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-dark-d2-2624522423);mix-blend-mode:overlay}.sketch-overlay-N5{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N6{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.sketch-overlay-N7{fill:url(#streaks-darker-d2-2624522423);mix-blend-mode:lighten}.light-code{display: none}.dark-code{display: block}}]]></style><g class="QQ== "><g class="shape" ><rect x="0.000000" y="0.000000" width="88.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="44.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit A</text></g><g class="Qg=="><g class="shape" ><rect x="280.000000" y="0.000000" width="88.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="324.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit B</text></g><g class="Qw=="><g class="shape" ><rect x="560.000000" y="0.000000" width="87.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="603.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit C</text></g><g class="RA=="><g class="shape" ><rect x="0.000000" y="126.000000" width="88.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="44.000000" y="164.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Unit D</text></g><g class="KEEgLSZndDsgQilbMF0="><marker id="mk-d2-2624522423-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 90.000000 33.000000 C 164.800003 33.000000 203.199997 33.000000 276.000000 33.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2624522423-3488378134)" mask="url(#d2-2624522423)" /><text x="184.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><g class="KEIgLSZndDsgQylbMF0="><path d="M 370.000000 33.000000 C 444.799988 33.000000 483.200012 33.000000 556.000000 33.000000" fill="none" c lass="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2624522423-3488378134)" mask="url(#d2-2624522423)" /><text x="464.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><mask id="d2-2624522423" maskUnits="userSpaceOnUse" x="-101" y="-101" width="849" height="394"> -<rect x="-101" y="-101" width="849" height="394" fill="white"></rect> -<rect x="20.500000" y="22.500000" width="47" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="300.500000" y="22.500000" width="47" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="580.500000" y="22.500000" width="46" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="20.500000" y="148.500000" width="47" height="21" fill="rgba(0,0,0,0.75)"></rect> -<rect x="144.000000" y="23.000000" width="80" height="21" fill="black"></rect> -<rect x="424.000000" y="23.000000" width="80" height="21" fill="black"></rect> + .d2-1312178538 .fill-N1{fill:#0A0F25;} + .d2-1312178538 .fill-N2{fill:#676C7E;} + .d2-1312178538 .fill-N3{fill:#9499AB;} + .d2-1312178538 .fill-N4{fill:#CFD2DD;} + .d2-1312178538 .fill-N5{fill:#DEE1EB;} + .d2-1312178538 .fill-N6{fill:#EEF1F8;} + .d2-1312178538 .fill-N7{fill:#FFFFFF;} + .d2-1312178538 .fill-B1{fill:#0D32B2;} + .d2-1312178538 .fill-B2{fill:#0D32B2;} + .d2-1312178538 .fill-B3{fill:#E3E9FD;} + .d2-1312178538 .fill-B4{fill:#E3E9FD;} + .d2-1312178538 .fill-B5{fill:#EDF0FD;} + .d2-1312178538 .fill-B6{fill:#F7F8FE;} + .d2-1312178538 .fill-AA2{fill:#4A6FF3;} + .d2-1312178538 .fill-AA4{fill:#EDF0FD;} + .d2-1312178538 .fill-AA5{fill:#F7F8FE;} + .d2-1312178538 .fill-AB4{fill:#EDF0FD;} + .d2-1312178538 .fill-AB5{fill:#F7F8FE;} + .d2-1312178538 .stroke-N1{stroke:#0A0F25;} + .d2-1312178538 .stroke-N2{stroke:#676C7E;} + .d2-1312178538 .stroke-N3{stroke:#9499AB;} + .d2-1312178538 .stroke-N4{stroke:#CFD2DD;} + .d2-1312178538 .stroke-N5{stroke:#DEE1EB;} + .d2-1312178538 .stroke-N6{stroke:#EEF1F8;} + .d2-1312178538 .stroke-N7{stroke:#FFFFFF;} + .d2-1312178538 .stroke-B1{stroke:#0D32B2;} + .d2-1312178538 .stroke-B2{stroke:#0D32B2;} + .d2-1312178538 .stroke-B3{stroke:#E3E9FD;} + .d2-1312178538 .stroke-B4{stroke:#E3E9FD;} + .d2-1312178538 .stroke-B5{stroke:#EDF0FD;} + .d2-1312178538 .stroke-B6{stroke:#F7F8FE;} + .d2-1312178538 .stroke-AA2{stroke:#4A6FF3;} + .d2-1312178538 .stroke-AA4{stroke:#EDF0FD;} + .d2-1312178538 .stroke-AA5{stroke:#F7F8FE;} + .d2-1312178538 .stroke-AB4{stroke:#EDF0FD;} + .d2-1312178538 .stroke-AB5{stroke:#F7F8FE;} + .d2-1312178538 .background-color-N1{background-color:#0A0F25;} + .d2-1312178538 .background-color-N2{background-color:#676C7E;} + .d2-1312178538 .background-color-N3{background-color:#9499AB;} + .d2-1312178538 .background-color-N4{background-color:#CFD2DD;} + .d2-1312178538 .background-color-N5{background-color:#DEE1EB;} + .d2-1312178538 .background-color-N6{background-color:#EEF1F8;} + .d2-1312178538 .background-color-N7{background-color:#FFFFFF;} + .d2-1312178538 .background-color-B1{background-color:#0D32B2;} + .d2-1312178538 .background-color-B2{background-color:#0D32B2;} + .d2-1312178538 .background-color-B3{background-color:#E3E9FD;} + .d2-1312178538 .background-color-B4{background-color:#E3E9FD;} + .d2-1312178538 .background-color-B5{background-color:#EDF0FD;} + .d2-1312178538 .background-color-B6{background-color:#F7F8FE;} + .d2-1312178538 .background-color-AA2{background-color:#4A6FF3;} + .d2-1312178538 .background-color-AA4{background-color:#EDF0FD;} + .d2-1312178538 .background-color-AA5{background-color:#F7F8FE;} + .d2-1312178538 .background-color-AB4{background-color:#EDF0FD;} + .d2-1312178538 .background-color-AB5{background-color:#F7F8FE;} + .d2-1312178538 .color-N1{color:#0A0F25;} + .d2-1312178538 .color-N2{color:#676C7E;} + .d2-1312178538 .color-N3{color:#9499AB;} + .d2-1312178538 .color-N4{color:#CFD2DD;} + .d2-1312178538 .color-N5{color:#DEE1EB;} + .d2-1312178538 .color-N6{color:#EEF1F8;} + .d2-1312178538 .color-N7{color:#FFFFFF;} + .d2-1312178538 .color-B1{color:#0D32B2;} + .d2-1312178538 .color-B2{color:#0D32B2;} + .d2-1312178538 .color-B3{color:#E3E9FD;} + .d2-1312178538 .color-B4{color:#E3E9FD;} + .d2-1312178538 .color-B5{color:#EDF0FD;} + .d2-1312178538 .color-B6{color:#F7F8FE;} + .d2-1312178538 .color-AA2{color:#4A6FF3;} + .d2-1312178538 .color-AA4{color:#EDF0FD;} + .d2-1312178538 .color-AA5{color:#F7F8FE;} + .d2-1312178538 .color-AB4{color:#EDF0FD;} + .d2-1312178538 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sket ch-overlay-AA4{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-1312178538);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}@media screen and (prefers-color-scheme:dark){ + .d2-1312178538 .fill-N1{fill:#CDD6F4;} + .d2-1312178538 .fill-N2{fill:#BAC2DE;} + .d2-1312178538 .fill-N3{fill:#A6ADC8;} + .d2-1312178538 .fill-N4{fill:#585B70;} + .d2-1312178538 .fill-N5{fill:#45475A;} + .d2-1312178538 .fill-N6{fill:#313244;} + .d2-1312178538 .fill-N7{fill:#1E1E2E;} + .d2-1312178538 .fill-B1{fill:#CBA6f7;} + .d2-1312178538 .fill-B2{fill:#CBA6f7;} + .d2-1312178538 .fill-B3{fill:#6C7086;} + .d2-1312178538 .fill-B4{fill:#585B70;} + .d2-1312178538 .fill-B5{fill:#45475A;} + .d2-1312178538 .fill-B6{fill:#313244;} + .d2-1312178538 .fill-AA2{fill:#f38BA8;} + .d2-1312178538 .fill-AA4{fill:#45475A;} + .d2-1312178538 .fill-AA5{fill:#313244;} + .d2-1312178538 .fill-AB4{fill:#45475A;} + .d2-1312178538 .fill-AB5{fill:#313244;} + .d2-1312178538 .stroke-N1{stroke:#CDD6F4;} + .d2-1312178538 .stroke-N2{stroke:#BAC2DE;} + .d2-1312178538 .stroke-N3{stroke:#A6ADC8;} + .d2-1312178538 .stroke-N4{stroke:#585B70;} + .d2-1312178538 .stroke-N5{stroke:#45475A;} + .d2-1312178538 .stroke-N6{stroke:#313244;} + .d2-1312178538 .stroke-N7{stroke:#1E1E2E;} + .d2-1312178538 .stroke-B1{stroke:#CBA6f7;} + .d2-1312178538 .stroke-B2{stroke:#CBA6f7;} + .d2-1312178538 .stroke-B3{stroke:#6C7086;} + .d2-1312178538 .stroke-B4{stroke:#585B70;} + .d2-1312178538 .stroke-B5{stroke:#45475A;} + .d2-1312178538 .stroke-B6{stroke:#313244;} + .d2-1312178538 .stroke-AA2{stroke:#f38BA8;} + .d2-1312178538 .stroke-AA4{stroke:#45475A;} + .d2-1312178538 .stroke-AA5{stroke:#313244;} + .d2-1312178538 .stroke-AB4{stroke:#45475A;} + .d2-1312178538 .stroke-AB5{stroke:#313244;} + .d2-1312178538 .background-color-N1{background-color:#CDD6F4;} + .d2-1312178538 .background-color-N2{background-color:#BAC2DE;} + .d2-1312178538 .background-color-N3{background-color:#A6ADC8;} + .d2-1312178538 .background-color-N4{background-color:#585B70;} + .d2-1312178538 .background-color-N5{background-color:#45475A;} + .d2-1312178538 .background-color-N6{background-color:#313244;} + .d2-1312178538 .background-color-N7{background-color:#1E1E2E;} + .d2-1312178538 .background-color-B1{background-color:#CBA6f7;} + .d2-1312178538 .background-color-B2{background-color:#CBA6f7;} + .d2-1312178538 .background-color-B3{background-color:#6C7086;} + .d2-1312178538 .background-color-B4{background-color:#585B70;} + .d2-1312178538 .background-color-B5{background-color:#45475A;} + .d2-1312178538 .background-color-B6{background-color:#313244;} + .d2-1312178538 .background-color-AA2{background-color:#f38BA8;} + .d2-1312178538 .background-color-AA4{background-color:#45475A;} + .d2-1312178538 .background-color-AA5{background-color:#313244;} + .d2-1312178538 .background-color-AB4{background-color:#45475A;} + .d2-1312178538 .background-color-AB5{background-color:#313244;} + .d2-1312178538 .color-N1{color:#CDD6F4;} + .d2-1312178538 .color-N2{color:#BAC2DE;} + .d2-1312178538 .color-N3{color:#A6ADC8;} + .d2-1312178538 .color-N4{color:#585B70;} + .d2-1312178538 .color-N5{color:#45475A;} + .d2-1312178538 .color-N6{color:#313244;} + .d2-1312178538 .color-N7{color:#1E1E2E;} + .d2-1312178538 .color-B1{color:#CBA6f7;} + .d2-1312178538 .color-B2{color:#CBA6f7;} + .d2-1312178538 .color-B3{color:#6C7086;} + .d2-1312178538 .color-B4{color:#585B70;} + .d2-1312178538 .color-B5{color:#45475A;} + .d2-1312178538 .color-B6{color:#313244;} + .d2-1312178538 .color-AA2{color:#f38BA8;} + .d2-1312178538 .color-AA4{color:#45475A;} + .d2-1312178538 .color-AA5{color:#313244;} + .d2-1312178538 .color-AB4{color:#45475A;} + .d2-1312178538 .color-AB5{color:#313244;}.appendix text.text{fill:#CDD6F4}.md{--color-fg-default:#CDD6F4;--color-fg-muted:#BAC2DE;--color-fg-subtle:#A6ADC8;--color-canvas-default:#1E1E2E;--color-canvas-subtle:#313244;--color-border-default:#CBA6f7;--color-border-muted:#CBA6f7;--color-neutral-muted:#313244;--color-accent-fg:#CBA6f7;--color-accent-emphasis:#CBA6f7;--color-attention-subtle:#BAC2DE;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-B2{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-B3{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-B4{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-B5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-B6{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AA2{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color -burn}.sketch-overlay-AA4{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AA5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AB4{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-AB5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N1{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N2{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N3{fill:url(#streaks-normal-d2-1312178538);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-dark-d2-1312178538);mix-blend-mode:overlay}.sketch-overlay-N5{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N6{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.sketch-overlay-N7{fill:url(#streaks-darker-d2-1312178538);mix-blend-mode:lighten}.light-code{display: none}.dark-code{display: block}}]]></style><g class="ZGVw ZW5kZW50"><g class="shape" ><rect x="7.000000" y="0.000000" width="122.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="68.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">dependent</text></g><g class="ZGVwZW5kZW5jeQ=="><g class="shape" ><rect x="328.000000" y="0.000000" width="133.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="394.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">dependency</text></g><g class="YW5jZXN0b3ItZGVwZW5kZW5jeQ=="><g class="shape" ><rect x="653.000000" y="0.000000" width="200.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="753.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">ancestor-dependency</text></g><g class="aW5kZXBlbmRlbnQ="><g class="shape" ><rect x="0.000000" y="126.000000" width="136.000000" he ight="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="68.000000" y="164.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">independent</text></g><g class="KGRlcGVuZGVudCAtJmd0OyBkZXBlbmRlbmN5KVswXQ=="><marker id="mk-d2-1312178538-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 131.000000 33.000000 C 211.399994 33.000000 251.199997 33.000000 324.000000 33.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1312178538-3488378134)" mask="url(#d2-1312178538)" /><text x="229.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><g class="KGRlcGVuZGVuY3kgLSZndDs gYW5jZXN0b3ItZGVwZW5kZW5jeSlbMF0="><path d="M 463.000000 33.000000 C 537.799988 33.000000 576.200012 33.000000 649.000000 33.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-1312178538-3488378134)" mask="url(#d2-1312178538)" /><text x="557.000000" y="39.000000" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">depends on</text></g><mask id="d2-1312178538" maskUnits="userSpaceOnUse" x="-101" y="-101" width="1055" height="394"> +<rect x="-101" y="-101" width="1055" height="394" fill="white"></rect> +<rect x="27.500000" y="22.500000" width="81" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="348.500000" y="22.500000" width="92" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="673.500000" y="22.500000" width="159" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="20.500000" y="148.500000" width="95" height="21" fill="rgba(0,0,0,0.75)"></rect> +<rect x="189.000000" y="23.000000" width="80" height="21" fill="black"></rect> +<rect x="517.000000" y="23.000000" width="80" height="21" fill="black"></rect> </mask></svg></svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/docs-starlight/src/content/docs/02-features/05-run-queue.mdx new/terragrunt-0.78.3/docs-starlight/src/content/docs/02-features/05-run-queue.mdx --- old/terragrunt-0.78.2/docs-starlight/src/content/docs/02-features/05-run-queue.mdx 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/docs-starlight/src/content/docs/02-features/05-run-queue.mdx 2025-05-12 16:48:19.000000000 +0200 @@ -6,7 +6,7 @@ order: 5 --- -import { Aside } from '@astrojs/starlight/components'; +import { Aside, FileTree, Tabs, TabItem } from '@astrojs/starlight/components'; Terragrunt's "Run Queue" is the mechanism it uses to manage the run order and concurrency when running OpenTofu/Terraform commands across multiple Terragrunt [units](/docs/features/units). This is particularly relevant when using the [`run --all`](/docs/reference/cli/commands/run#all) or [`run --graph`](/docs/reference/cli/commands/run#graph) commands. @@ -24,57 +24,247 @@ ### Example DAG -Consider a setup where Unit B depends on Unit A, and Unit C depends on Unit B. Unit D has no dependencies. +Consider a setup where: + +- Unit "dependent" depends on unit "dependency". +- Unit "dependency" depends on unit "ancestor-dependency". +- Unit "independent" has no dependencies nor dependents. + +<FileTree> + +- root + - subtree + - dependent + - terragrunt.hcl + - dependency + - terragrunt.hcl + - ancestor-dependency + - terragrunt.hcl + - independent + - terragrunt.hcl + +</FileTree> + ```d2 direction: right # Define the nodes -A: Unit A { +dependent: dependent { shape: rectangle } -B: Unit B { +dependency: dependency { shape: rectangle } -C: Unit C { +ancestor-dependency: ancestor-dependency { shape: rectangle } -D: Unit D { +independent: independent { shape: rectangle } # Define the connections -A -> B: depends on -B -> C: depends on +dependent -> dependency: depends on +dependency -> ancestor-dependency: depends on ``` -- **`run --all plan` Order:** Terragrunt would run C and D concurrently. Once C finishes, B would run. Once B finishes, A would run. -- **`run --all destroy` Order:** Terragrunt would run A and D concurrently. Once A finishes, B would run. Once B finishes, C would run. +Assuming a current working directory of the `root` directory, Terragrunt would run units in the following order: + +- **`run --all plan` Order:** Terragrunt would run `independent` and `ancestor-dependency` concurrently. Once `ancestor-dependency` finishes, `dependency` would run. Once `dependency` finishes, `dependent` would run. +- **`run --all destroy` Order:** Terragrunt would run `dependent` and `independent` concurrently. Once `dependent` finishes, `dependency` would run. Once `dependency` finishes, `ancestor-dependency` would run. ## Controlling the Queue -Several flags allow you to customize how Terragrunt builds and executes the run queue: +Several flags allow you to customize how Terragrunt builds and executes the run queue. By default, Terragrunt will include all units that are in the current working directory. + +### Include by default + +By default, when using the `--all` flag, Terragrunt will include all units that are in the current working directory, and any external dependencies. + +Certain flags trigger "Exclude by default" behavior, meaning that Terragrunt will no longer automatically include all units in the current working directory, and will instead rely on discovering configurations based on the provided queue control flags. + +Those flags will be discussed in the next section. ### Filtering Units You can control which units are included or excluded from the queue: -- [`--queue-include-dir`](/docs/reference/cli/commands/run#queue-include-dir): Specify glob patterns for directories to *include*. Can be used multiple times. -- [`--queue-exclude-dir`](/docs/reference/cli/commands/run#queue-exclude-dir): Specify glob patterns for directories to *exclude*. Can be used multiple times. Note that dependencies of excluded units might be included unless they are also explicitly excluded. -- [`--queue-excludes-file`](/docs/reference/cli/commands/run#queue-excludes-file): Provide a file containing a list of directories to exclude. -- [`--queue-strict-include`](/docs/reference/cli/commands/run#queue-strict-include): Only include units matching `--queue-include-dir`. Excludes everything else by default. -- [`--queue-include-external`](/docs/reference/cli/commands/run#queue-include-external): Include external dependencies (those outside the main working directory or included directories). -- [`--queue-exclude-external`](/docs/reference/cli/commands/run#queue-exclude-external): Exclude external dependencies. -- [`--queue-include-units-reading`](/docs/reference/cli/commands/run#queue-include-units-reading): Include units that read a specific file (via [includes](/docs/reference/hcl/blocks#include) or HCL functions like [`mark_as_read`](/docs/reference/hcl/functions#mark_as_read)). +- [`--queue-include-dir`](/docs/reference/cli/commands/run#queue-include-dir): Specify glob patterns for directories to *include*. Can be used multiple times. + + e.g. `terragrunt run --all plan --queue-include-dir "subtree/*"` + + Include units within the `subtree` directory (along with their dependencies), i.e., `subtree/dependent`, `subtree/dependency` and `ancestor-dependency`. + + <Aside type="note"> + Using the `--queue-include-dir` automatically triggers "Exclude by default" behavior, as mentioned above. + </Aside> + + <Aside type="note"> + `ancestor-dependency` is still included by default here because it's a dependency of `dependency`. + + Using [`--queue-strict-include`](/docs/reference/cli/commands/run#queue-strict-include) would prevent that. + </Aside> + +- [`--queue-exclude-dir`](/docs/reference/cli/commands/run#queue-exclude-dir): Specify glob patterns for directories to *exclude*. Can be specified multiple times. + + e.g. `terragrunt run --all plan --queue-exclude-dir "independent"` + + Exclude the `independent` unit. `ancestor-dependency`, `subtree/dependency`, and `subtree/dependent` would still be processed according to their dependencies. + + <Aside type="note"> + Dependencies of excluded units will still be included unless they are also explicitly excluded. + + In this example, excluding `subtree/dependency` would not automatically exclude `ancestor-dependency`. + </Aside> + +- [`--queue-excludes-file`](/docs/reference/cli/commands/run#queue-excludes-file): Provide a file containing a list of directories to exclude. + + e.g. `terragrunt run --all plan --queue-excludes-file ".tg-excludes"` + + ```text + # .tg-excludes + + independent + subtree/dependency + ``` + + Exclude `independent` and `subtree/dependency` from the run, only running `subtree/dependent` and `ancestor-dependency`. + + <Aside type="tip"> + The default value for this flag is `.terragrunt-excludes`. + + Populate a file named this in your project root to exclude units from being run by default, without using the `--queue-excludes-file` flag. + </Aside> + +- [`--queue-strict-include`](/docs/reference/cli/commands/run#queue-strict-include): Only include units matching `--queue-include-dir`. + + e.g. `terragrunt run --all plan --queue-include-dir "subtree/dependency" --queue-strict-include` + + Only include the `subtree/dependency` unit. Its dependency, `ancestor-dependency`, will be excluded because it does not match the include and strict mode is enabled. + +- [`--queue-include-external`](/docs/reference/cli/commands/run#queue-include-external): Include external dependencies (those outside the current working directory) by default. + + e.g. `terragrunt run --all plan --working-dir subtree --queue-include-external` + + Include `ancestor-dependency` in addition to the `subtree/dependent` and `subtree/dependency` units. + + <Aside type="note"> + The `--queue-include-external` flag is simply a convenience flag to avoid the interactive prompt to request inclusion of external dependencies. + + By default, Terragrunt will wait for user input to determine whether or not external dependencies should be included. + </Aside> + +- [`--queue-exclude-external`](/docs/reference/cli/commands/run#queue-exclude-external): Exclude external dependencies. + + e.g. `terragrunt run --all plan --working-dir subtree --queue-exclude-external` + + Exclude `ancestor-dependency` from the run. Only run `subtree/dependent` and `subtree/dependency`. + + <Aside type="note"> + This flag is simply a convenience flag to avoid the interactive prompt to request exclusion of external dependencies. + + By default, Terragrunt will wait for user input to determine whether or not external dependencies should be excluded. + </Aside> + +- [`--queue-include-units-reading`](/docs/reference/cli/commands/run#queue-include-units-reading): Include units that read a specific file (via [includes](/docs/reference/hcl/blocks#include) or HCL functions like [`mark_as_read`](/docs/reference/hcl/functions#mark_as_read)). + + e.g. `terragrunt run --all plan --queue-include-units-reading "subtree/common.hcl"` + + <Tabs> + <TabItem label="subtree/dependent/terragrunt.hcl"> + + ```hcl + dependency "dep" { + config_path = "../dependency" + skip_outputs = true + } + + include "common" { + path = find_in_parent_folders("common.hcl") + } + ``` + </TabItem> + <TabItem label="subtree/dependency/terragrunt.hcl"> + + ```hcl + dependency "dep" { + config_path = "../../ancestor-dependency" + skip_outputs = true + } + + include "common" { + path = find_in_parent_folders("common.hcl") + } + ``` + </TabItem> + <TabItem label="subtree/common.hcl"> + + ```hcl + # Intentionally empty + ``` + </TabItem> + </Tabs> + + Include `subtree/dependent` and `subtree/dependency` (the units that read `subtree/common.hcl`) in the run. + + <Aside type="tip"> + Sometimes, it can be impossible for Terragrunt to know that certain files are read by a unit (e.g. if the file is read in the OpenTofu/Terraform module, not in Terragrunt configuration). + + In cases like this, you can use the [`mark_as_read`](/docs/reference/hcl/functions#mark_as_read) HCL function to explicitly tell Terragrunt that a unit reads a file. + </Aside> ### Modifying Order and Error Handling -- [`--queue-construct-as`](/docs/reference/cli/commands/list#queue-construct-as) (`--as`): Build the dependency queue *as if* running a particular command. Useful for performing dry-runs of [`run`](/docs/reference/cli/commands/run) using discovery commands, like [`find`](/docs/reference/cli/commands/find) and [`list`](/docs/reference/cli/commands/list). -- [`--queue-ignore-dag-order`](/docs/reference/cli/commands/run#queue-ignore-dag-order): Execute units concurrently without respecting the dependency order. Useful for read-only commands like `validate` or `plan` across independent units, but **dangerous** for commands that modify state (`apply`, `destroy`). -- [`--queue-ignore-errors`](/docs/reference/cli/commands/run#queue-ignore-errors): Continue processing the queue even if some units fail. Useful for identifying all errors at once, but can lead to inconsistent state if used with `apply` or `destroy`. +- [`--queue-construct-as`](/docs/reference/cli/commands/list#queue-construct-as) (`--as`): Build the run queue *as if* a particular command was run. Useful for performing dry-runs of [`run`](/docs/reference/cli/commands/run) using discovery commands, like [`find`](/docs/reference/cli/commands/find) and [`list`](/docs/reference/cli/commands/list). + + e.g. `terragrunt list --queue-construct-as destroy` + + This lists the units in the order they'd be processed for `run --all destroy`: + + ```bash + $ terragrunt list --as destroy -l + Type Path + unit independent + unit subtree/dependent + unit subtree/dependency + unit ancestor-dependency + ``` + + ```bash + $ terragrunt list --as plan -l + Type Path + unit ancestor-dependency + unit independent + unit subtree/dependency + unit subtree/dependent + ``` + +- [`--queue-ignore-dag-order`](/docs/reference/cli/commands/run#queue-ignore-dag-order): Execute units concurrently without respecting the dependency order. + + e.g. `terragrunt run --all plan --queue-ignore-dag-order` + + Run `plan` on `ancestor-dependency`, `subtree/dependency`, `subtree/dependent`, and `independent` all concurrently, without waiting for their defined dependencies. For instance, `subtree/dependent`'s plan would not wait for `subtree/dependency`'s plan to complete). + + <Aside type="caution"> + This flag is useful for faster runs in stateless commands like `validate` or `plan`, but is **dangerous** for commands that modify state like `apply` or `destroy`. + + You might encounter failed applies if unit dependencies are not applied before dependents, and conversely, failed destroys if unit dependents are not destroyed before dependencies. + </Aside> + +- [`--queue-ignore-errors`](/docs/reference/cli/commands/run#queue-ignore-errors): Continue processing the queue even if some units fail. + + e.g. `terragrunt run --all plan --queue-ignore-errors` + + If `ancestor-dependency`'s plan fails, Terragrunt will still attempt to run `plan` for `subtree/dependency`, then `subtree/dependent`, and also for `independent`. + + <Aside type="caution"> + This flag is useful for identifying all errors at once, but can lead to inconsistent state if used with `apply` or `destroy`. + + You might encounter failed applies if unit dependencies are not applied successfully before dependents, and conversely, failed destroys if unit dependents are not destroyed successfully before dependencies. + </Aside> ## Important Considerations diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/test/fixtures/detailed-exitcode/error/app2/terragrunt.hcl new/terragrunt-0.78.3/test/fixtures/detailed-exitcode/error/app2/terragrunt.hcl --- old/terragrunt-0.78.2/test/fixtures/detailed-exitcode/error/app2/terragrunt.hcl 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/test/fixtures/detailed-exitcode/error/app2/terragrunt.hcl 2025-05-12 16:48:19.000000000 +0200 @@ -1 +1,11 @@ -# Intentionally empty +/* + Sequential dependency on app1 to ensure proper test execution. + This prevents flaky tests since: + - Local provider returns exit code 2 for managed resources + - Local provider returns exit code 1 for data sources + - Only the last exit code in the sequence can be checked +*/ + +dependencies { + paths = ["../app1"] +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/test/fixtures/detailed-exitcode/fail-on-first-run/main.tf new/terragrunt-0.78.3/test/fixtures/detailed-exitcode/fail-on-first-run/main.tf --- old/terragrunt-0.78.2/test/fixtures/detailed-exitcode/fail-on-first-run/main.tf 1970-01-01 01:00:00.000000000 +0100 +++ new/terragrunt-0.78.3/test/fixtures/detailed-exitcode/fail-on-first-run/main.tf 2025-05-12 16:48:19.000000000 +0200 @@ -0,0 +1,16 @@ +data "external" "script" { + program = [ + "/bin/bash", + "-c", + <<EOT + set -euo pipefail + if [[ -f .file ]]; then + echo '{}' + rm .file + else + touch .file + exit 1 + fi + EOT + ] +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/test/fixtures/detailed-exitcode/fail-on-first-run/terragrunt.hcl new/terragrunt-0.78.3/test/fixtures/detailed-exitcode/fail-on-first-run/terragrunt.hcl --- old/terragrunt-0.78.2/test/fixtures/detailed-exitcode/fail-on-first-run/terragrunt.hcl 1970-01-01 01:00:00.000000000 +0100 +++ new/terragrunt-0.78.3/test/fixtures/detailed-exitcode/fail-on-first-run/terragrunt.hcl 2025-05-12 16:48:19.000000000 +0200 @@ -0,0 +1,3 @@ +retry_max_attempts = 2 +retry_sleep_interval_sec = 1 +retryable_errors = [".*"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/test/integration_test.go new/terragrunt-0.78.3/test/integration_test.go --- old/terragrunt-0.78.2/test/integration_test.go 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/test/integration_test.go 2025-05-12 16:48:19.000000000 +0200 @@ -233,6 +233,23 @@ assert.Equal(t, 2, exitCode.Get()) } +func TestDetailedExitCodeFailOnFirstRun(t *testing.T) { + t.Parallel() + + testFixturePath := filepath.Join(testFixtureDetailedExitCode, "fail-on-first-run") + + helpers.CleanupTerraformFolder(t, testFixturePath) + tmpEnvPath := helpers.CopyEnvironment(t, testFixturePath) + + var exitCode tf.DetailedExitCode + ctx := context.Background() + ctx = tf.ContextWithDetailedExitCode(ctx, &exitCode) + + _, _, err := helpers.RunTerragruntCommandWithOutputWithContext(t, ctx, "terragrunt run-all plan --terragrunt-log-level trace --terragrunt-non-interactive -detailed-exitcode --terragrunt-working-dir "+util.JoinPath(tmpEnvPath, testFixturePath)) + require.NoError(t, err) + assert.Equal(t, 0, exitCode.Get()) +} + func TestDetailedExitCodeChangesPresentOne(t *testing.T) { t.Parallel() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/tf/detailed_exitcode.go new/terragrunt-0.78.3/tf/detailed_exitcode.go --- old/terragrunt-0.78.2/tf/detailed_exitcode.go 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/tf/detailed_exitcode.go 2025-05-12 16:48:19.000000000 +0200 @@ -4,10 +4,6 @@ "sync" ) -const ( - DetailedExitCodeError = 1 -) - // DetailedExitCode is the TF detailed exit code. https://opentofu.org/docs/cli/commands/plan/ type DetailedExitCode struct { Code int @@ -26,18 +22,9 @@ // - 0 = Success // - 1 = Error // - 2 = Success with changes pending -// The method only updates if: -// - The current code is not 1 (error state) -// - The new code is greater than current OR equals 1 func (coder *DetailedExitCode) Set(newCode int) { coder.mu.Lock() defer coder.mu.Unlock() - if coder.Code == DetailedExitCodeError { - return - } - - if coder.Code < newCode || newCode == DetailedExitCodeError { - coder.Code = newCode - } + coder.Code = newCode } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/terragrunt-0.78.2/tf/run_cmd.go new/terragrunt-0.78.3/tf/run_cmd.go --- old/terragrunt-0.78.2/tf/run_cmd.go 2025-05-09 17:37:28.000000000 +0200 +++ new/terragrunt-0.78.3/tf/run_cmd.go 2025-05-12 16:48:19.000000000 +0200 @@ -74,6 +74,10 @@ if code != 1 { return output, nil } + } else { + if exitCode := DetailedExitCodeFromContext(ctx); exitCode != nil { + exitCode.Set(0) + } } return output, err ++++++ terragrunt.obsinfo ++++++ --- /var/tmp/diff_new_pack.9laeYe/_old 2025-05-13 20:06:22.689122747 +0200 +++ /var/tmp/diff_new_pack.9laeYe/_new 2025-05-13 20:06:22.689122747 +0200 @@ -1,5 +1,5 @@ name: terragrunt -version: 0.78.2 -mtime: 1746805048 -commit: 57b42381d9cf464d39833052b82851bd0061c9fe +version: 0.78.3 +mtime: 1747061299 +commit: b19d23fcb73889cd9dac48040dfbf2b84117d20d ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/terragrunt/vendor.tar.gz /work/SRC/openSUSE:Factory/.terragrunt.new.30101/vendor.tar.gz differ: char 29, line 2