Skip to content

chore(deps): update dependency terragrunt to v1#1595

Merged
renovate[bot] merged 1 commit into
mainfrom
renovate/major-tofu
May 13, 2026
Merged

chore(deps): update dependency terragrunt to v1#1595
renovate[bot] merged 1 commit into
mainfrom
renovate/major-tofu

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented May 12, 2026

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Update Change
terragrunt major 0.99.51.0.4

Release Notes

gruntwork-io/terragrunt (terragrunt)

v1.0.4

Compare Source

🏎️ Performance Improvements

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

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

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

fast-copy strict control

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

terragrunt run plan --strict-control fast-copy

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

Fewer git rev-parse invocations on large estates

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

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

🐛 Bug Fixes

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

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

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

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

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

Included exclude blocks now get properly merged into unit configurations.

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

Fixed terragrunt find --include failing on relative include paths

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

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

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

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

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

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

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

get_repo_root() returns OS-native separators on Windows

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

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

Reported in #​5976.

Hardened module manifest handling

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

Provider Cache Server now supports custom host blocks

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

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

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

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

🧪 Experiments Updated

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

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

Two changes tighten this up:

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

Reported in #​5980.

cas — Local paths supported as stack component sources

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

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

  path = "service"
}

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

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

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

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

Units and stacks join modules and templates

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

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

Copy and scaffolded values

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

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

Catalog key bindings

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

stack-dependencies - Separate filenames for unit vs stack autoincludes

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

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

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

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

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

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

To learn more, see the experiment documentation.

stack-dependencies — Nested stack paths and discovery integration

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

Nested stack path references

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

# terragrunt.stack.hcl

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

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

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

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

Discovery commands surface stack dependencies

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

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

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

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

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

To learn more, see the experiment documentation.

Cache and plugin directories follow platform conventions

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

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

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

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

What's Changed

New Contributors

Full Changelog: gruntwork-io/terragrunt@v1.0.3...v1.0.4

v1.0.3

Compare Source

✨ New Features

--no-cas flag for disabling CAS per command

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

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

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

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

🐛 Bug Fixes

hcl fmt --diff no longer requires the diff binary

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

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

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

Fixed crash when include and locals with read_terragrunt_config coexist

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

Discovery now reports the underlying error instead of crashing.

Reported in #​5949.

Fixed crash when a root.hcl declares no remote_state block

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

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

Reported in terragrunt-ls#134.

Thanks to @​SAY-5 for contributing this fix!

Fixed a race condition in terragrunt stack generate

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

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

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

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

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

🧪 Experiments Added

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

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

With the experiment on, a unit like this:

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

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

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

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

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

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

🧪 Experiments Updated

cas — Stack integration via update_source_with_cas

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

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

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

  update_source_with_cas = true

  path = "service"
}

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

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

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

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

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

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

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


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

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

To learn more, see Excluding paths from discovery.

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

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

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

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

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

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

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

What's Changed

New Contributors

Full Changelog: gruntwork-io/terragrunt@v1.0.2...v1.0.3

v1.0.2

Compare Source

🐛 Bug Fixes

shared_credentials_files and other list/map backend config values were serialized incorrectly

Setting shared_credentials_files (or any other list-valued key) in the remote_state.config block produced a broken -backend-config argument:

-backend-config=shared_credentials_files=[/a/creds /b/creds]

OpenTofu and Terraform both failed to parse this. The same problem affected map-valued keys. Lists and maps are now written as single-line HCL (["/a/creds","/b/creds"] and {key="value"}), and strings inside them are quoted so embedded quotes, newlines, and tabs survive the round trip.

Thanks to @​Rahul-Kumar-prog for contributing this fix!

Panic in get_repo_root() when OpenTelemetry tracing is enabled with TRACEPARENT

Running terragrunt stack generate (or any command that invoked shell commands like git rev-parse) with OpenTelemetry trace exporting enabled (TG_TELEMETRY_TRACE_EXPORTER=http) caused a nil pointer panic:

Call to function "get_repo_root" failed: panic in function implementation:
runtime error: invalid memory address or nil pointer dereference

The root cause of the panic was fixed, and telemetry codepaths have been hardened against future panics.

stack output now respects the exclude block

terragrunt stack output previously ignored the exclude block on units, attempting to fetch outputs (including directly from S3 state when using --dependency-fetch-output-from-state) for units that should have been excluded.

The fix uses Terragrunt discovery to identify excluded units before reading outputs. Excluded units are now omitted from the stack output entirely, consistent with how they are handled during stack run.

To exclude a unit from stack output, add "output" to the actions list in the exclude block:

exclude {
  if      = true
  actions = ["plan", "apply", "destroy", "output"]
}

Special action values "all" and "all_except_output" are also supported.

🧪 Experiments Added

catalog-redesign — Reworked terragrunt catalog TUI

A new catalog-redesign experiment reworks the design of the terragrunt catalog TUI.

terragrunt catalog now launches the TUI right away and runs discovery in the background instead of waiting for discovery to complete before launching the TUI. As a consequence, terragrunt catalog users with large catalogs should see significant speed improvements as they launch the terragrunt catalog TUI.

Modules now stream into the list view of the catalog as they are discovered, so you'll be able to select and use a module even if your entire catalog hasn't been discovered yet.

If catalog.urls is not configured in root.hcl, terragrunt catalog no longer errors. A welcome screen explains how to populate the catalog and can open the catalog documentation on a keypress. In addition, terraform.source values from existing units are automatically included in the set of URLs used for discovery, so users with existing units get a populated catalog pointing to other modules that can be pulled from the same module source without any additional configuration.

This experiment is subject to change, and core elements of the design are being iterated on rapidly.

To try it out, run:

terragrunt catalog --experiment catalog-redesign

To learn more, see the experiment documentation.

🧪 Experiments Updated

stack-dependencies — Cross-stack dependency support and autoinclude improvements

The stack-dependencies experiment now supports cross-stack and nested-stack dependency patterns, expanding the autoinclude block capabilities in terragrunt.stack.hcl files.

New features:

  • stack.<name>.path references for depending on an entire stack. The DAG expands the stack into its constituent units so that all units in the stack complete before the dependent unit runs
  • stack.<name>.<unit_name>.path references for depending on a specific unit within a nested stack (fine-grained cross-stack dependencies)
  • dependency blocks targeting stack directories — aggregated outputs from all units in the stack are accessible as dependency.stack_name.outputs.unit_name.output_key
  • Partial evaluation of local.* in autoinclude — expressions mixing local.* and dependency.* are partially evaluated during stack generation: locals resolve to literals while dependency references are preserved for evaluation when the unit is applied

Dependency on an entire stack:

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

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

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

    inputs = {
      vpc_id = dependency.infra.outputs.vpc.vpc_id
    }
  }
}

Dependency on a unit within a nested stack:

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

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

  autoinclude {
    dependency "vpc" {
      config_path = stack.networking.vpc.path
    }

    inputs = {
      vpc_id = dependency.vpc.outputs.vpc_id
    }
  }
}
terragrunt run --all --experiment stack-dependencies -- plan

To learn more, see the experiment documentation.

⚙️ Process Updates

Install script now supports tip and test builds

The install script can now install tip builds and on-demand test builds. Three new flags are available:

  • --tip installs the latest tip build from main
  • --test installs an on-demand test build
  • --commit <sha> installs a build for a specific commit

Downloads are verified against GPG/Cosign signatures and SHA256 checksums before installation.

Tip build notifications on referenced issues

When a tip build is produced on main for a merged PR, Terragrunt now posts a comment on any issues that PR references, linking to the build and including instructions for installing and testing it.

What's Changed

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • "before 9am on tuesday"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot requested a review from a team as a code owner May 12, 2026 07:51
@renovate renovate Bot enabled auto-merge (squash) May 12, 2026 07:51
@renovate renovate Bot force-pushed the renovate/major-tofu branch 2 times, most recently from f5136b1 to 4a96460 Compare May 12, 2026 07:55
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 12, 2026

Terraform Plan

Shared

1password/account — No changes
1password/futo-account — No changes
cloudflare/account — No changes
cloudflare/api-keys — No changes
docker/org — No changes
⚠️ github/org — Plan: 1 to add, 5 to change, 0 to destroy.
OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create
  ~ update in-place (current -> planned)
  # github_repository.repositories["static-pages"] will be updated in-place
  ~ resource "github_repository" "repositories" {
      ~ description                             = "Pages and packages for Immich." -> "Redirect urls to personal, hosted, instances of Immich."
        id                                      = "static-pages"
      + ignore_vulnerability_alerts_during_read = false
        name                                    = "static-pages"
        # (37 unchanged attributes hidden)
        # (1 unchanged block hidden)
    }
  # github_repository_collaborators.repo_collaborators["immich"] will be updated in-place
  ~ resource "github_repository_collaborators" "repo_collaborators" {
        id             = "455229168"
      ~ invitation_ids = {
          - "koen-futo"  = "286515056"
          - "martabal"   = "284848949"
          - "martyfuhry" = "284848968"
          - "matthinc"   = "284848954"
          - "sudoicezen" = "284848972"
        } -> (known after apply)
        # (2 unchanged attributes hidden)
      - user {
          - permission = "admin" -> null
          - username   = "alextran1502" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "bo0tzz" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "jrasm91" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "zackpollard" -> null
        }
      + user {
          + permission = "maintain"
          + username   = "alextran1502"
        }
      + user {
          + permission = "maintain"
          + username   = "bo0tzz"
        }
      + user {
          + permission = "maintain"
          + username   = "jrasm91"
        }
      + user {
          + permission = "maintain"
          + username   = "zackpollard"
        }
        # (57 unchanged blocks hidden)
    }
  # github_repository_collaborators.repo_collaborators["static-pages"] will be updated in-place
  ~ resource "github_repository_collaborators" "repo_collaborators" {
        id             = "822727374"
      ~ invitation_ids = {
          - "PixelJonas" = "284848947"
          - "fyfrey"     = "284848959"
          - "kennyfuto"  = "288622006"
          - "koen-futo"  = "286515046"
          - "martabal"   = "284848951"
          - "martyfuhry" = "284848969"
          - "matthinc"   = "284848955"
          - "orhan98"    = "315880176"
          - "sudoicezen" = "284848974"
        } -> (known after apply)
        # (2 unchanged attributes hidden)
      - user {
          - permission = "admin" -> null
          - username   = "alextran1502" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "bo0tzz" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "jrasm91" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "zackpollard" -> null
        }
      + user {
          + permission = "maintain"
          + username   = "alextran1502"
        }
      + user {
          + permission = "maintain"
          + username   = "bo0tzz"
        }
      + user {
          + permission = "maintain"
          + username   = "jrasm91"
        }
      + user {
          + permission = "maintain"
          + username   = "zackpollard"
        }
        # (56 unchanged blocks hidden)
    }
  # github_repository_collaborators.repo_collaborators["test-assets"] will be updated in-place
  ~ resource "github_repository_collaborators" "repo_collaborators" {
        id             = "697157116"
      ~ invitation_ids = {
          - "PixelJonas" = "284848946"
          - "fyfrey"     = "284848960"
          - "kennyfuto"  = "288622000"
          - "koen-futo"  = "286515048"
          - "martabal"   = "284848952"
          - "martyfuhry" = "284848970"
          - "matthinc"   = "284848956"
          - "orhan98"    = "315880175"
          - "sudoicezen" = "284848973"
        } -> (known after apply)
        # (2 unchanged attributes hidden)
      - user {
          - permission = "admin" -> null
          - username   = "alextran1502" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "bo0tzz" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "jrasm91" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "zackpollard" -> null
        }
      + user {
          + permission = "maintain"
          + username   = "alextran1502"
        }
      + user {
          + permission = "maintain"
          + username   = "bo0tzz"
        }
      + user {
          + permission = "maintain"
          + username   = "jrasm91"
        }
      + user {
          + permission = "maintain"
          + username   = "zackpollard"
        }
        # (56 unchanged blocks hidden)
    }
  # github_repository_collaborators.repo_collaborators["ui"] will be created
  + resource "github_repository_collaborators" "repo_collaborators" {
      + id             = (known after apply)
      + invitation_ids = (known after apply)
      + repository     = "ui"
      + repository_id  = (known after apply)
      + user {
          + permission = "maintain"
          + username   = "C-Otto"
        }
      + user {
          + permission = "maintain"
          + username   = "LeLunZ"
        }
      + user {
          + permission = "maintain"
          + username   = "PixelJonas"
        }
      + user {
          + permission = "maintain"
          + username   = "Snowknight26"
        }
      + user {
          + permission = "maintain"
          + username   = "YarosMallorca"
        }
      + user {
          + permission = "maintain"
          + username   = "adamantike"
        }
      + user {
          + permission = "maintain"
          + username   = "alex-phillips"
        }
      + user {
          + permission = "maintain"
          + username   = "alextran1502"
        }
      + user {
          + permission = "maintain"
          + username   = "arnolicious"
        }
      + user {
          + permission = "maintain"
          + username   = "ben-basten"
        }
      + user {
          + permission = "maintain"
          + username   = "benbeckford"
        }
      + user {
          + permission = "maintain"
          + username   = "benmccann"
        }
      + user {
          + permission = "maintain"
          + username   = "bo0tzz"
        }
      + user {
          + permission = "maintain"
          + username   = "brighteyed"
        }
      + user {
          + permission = "maintain"
          + username   = "bwees"
        }
      + user {
          + permission = "maintain"
          + username   = "danieldietzler"
        }
      + user {
          + permission = "maintain"
          + username   = "etnoy"
        }
      + user {
          + permission = "maintain"
          + username   = "fyfrey"
        }
      + user {
          + permission = "maintain"
          + username   = "idubnori"
        }
      + user {
          + permission = "maintain"
          + username   = "insertish"
        }
      + user {
          + permission = "maintain"
          + username   = "jbaez"
        }
      + user {
          + permission = "maintain"
          + username   = "jrasm91"
        }
      + user {
          + permission = "maintain"
          + username   = "kennyfuto"
        }
      + user {
          + permission = "maintain"
          + username   = "koen-futo"
        }
      + user {
          + permission = "maintain"
          + username   = "martabal"
        }
      + user {
          + permission = "maintain"
          + username   = "martyfuhry"
        }
      + user {
          + permission = "maintain"
          + username   = "matthinc"
        }
      + user {
          + permission = "maintain"
          + username   = "meesfrensel"
        }
      + user {
          + permission = "maintain"
          + username   = "mertalev"
        }
      + user {
          + permission = "maintain"
          + username   = "michelheusschen"
        }
      + user {
          + permission = "maintain"
          + username   = "midzelis"
        }
      + user {
          + permission = "maintain"
          + username   = "nirokato"
        }
      + user {
          + permission = "maintain"
          + username   = "nutgood"
        }
      + user {
          + permission = "maintain"
          + username   = "oddlama"
        }
      + user {
          + permission = "maintain"
          + username   = "onedr0p"
        }
      + user {
          + permission = "maintain"
          + username   = "orhan98"
        }
      + user {
          + permission = "maintain"
          + username   = "samholton"
        }
      + user {
          + permission = "maintain"
          + username   = "santoshakil"
        }
      + user {
          + permission = "maintain"
          + username   = "shenlong-tanwen"
        }
      + user {
          + permission = "maintain"
          + username   = "timonrieger"
        }
      + user {
          + permission = "maintain"
          + username   = "uhthomas"
        }
      + user {
          + permission = "maintain"
          + username   = "xCJPECKOVERx"
        }
      + user {
          + permission = "maintain"
          + username   = "zackpollard"
        }
      + user {
          + permission = "triage"
          + username   = "1-tempest"
        }
      + user {
          + permission = "triage"
          + username   = "CrushedAsian255"
        }
      + user {
          + permission = "triage"
          + username   = "DeclanE47"
        }
      + user {
          + permission = "triage"
          + username   = "JW-CH"
        }
      + user {
          + permission = "triage"
          + username   = "Mraedis"
        }
      + user {
          + permission = "triage"
          + username   = "NicholasFlamy"
        }
      + user {
          + permission = "triage"
          + username   = "Xiticks"
        }
      + user {
          + permission = "triage"
          + username   = "aviv926"
        }
      + user {
          + permission = "triage"
          + username   = "dahool"
        }
      + user {
          + permission = "triage"
          + username   = "ddshd"
        }
      + user {
          + permission = "triage"
          + username   = "fhuhne"
        }
      + user {
          + permission = "triage"
          + username   = "github-cli"
        }
      + user {
          + permission = "triage"
          + username   = "mmomjian"
        }
      + user {
          + permission = "triage"
          + username   = "schuhbacca"
        }
      + user {
          + permission = "triage"
          + username   = "skatsubo"
        }
      + user {
          + permission = "triage"
          + username   = "sudoicezen"
        }
    }
  # github_repository_collaborators.repo_collaborators["walkrs"] will be updated in-place
  ~ resource "github_repository_collaborators" "repo_collaborators" {
        id             = "1156754889"
      ~ invitation_ids = {
          - "C-Otto"          = "307331486"
          - "PixelJonas"      = "307331438"
          - "adamantike"      = "307331464"
          - "dahool"          = "307331471"
          - "ddshd"           = "307331444"
          - "fyfrey"          = "307331463"
          - "github-cli"      = "307331445"
          - "jbaez"           = "307331428"
          - "kennyfuto"       = "307331447"
          - "koen-futo"       = "307331458"
          - "martabal"        = "307331390"
          - "martyfuhry"      = "307331483"
          - "matthinc"        = "307331420"
          - "michelheusschen" = "307331480"
          - "midzelis"        = "309034718"
          - "orhan98"         = "315880173"
          - "samholton"       = "307331386"
          - "schuhbacca"      = "307331432"
          - "skatsubo"        = "307331414"
        } -> (known after apply)
        # (2 unchanged attributes hidden)
      - user {
          - permission = "admin" -> null
          - username   = "alextran1502" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "bo0tzz" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "jrasm91" -> null
        }
      - user {
          - permission = "admin" -> null
          - username   = "zackpollard" -> null
        }
      + user {
          + permission = "maintain"
          + username   = "alextran1502"
        }
      + user {
          + permission = "maintain"
          + username   = "bo0tzz"
        }
      + user {
          + permission = "maintain"
          + username   = "jrasm91"
        }
      + user {
          + permission = "maintain"
          + username   = "zackpollard"
        }
        # (56 unchanged blocks hidden)
    }
Plan: 1 to add, 5 to change, 0 to destroy.
╷
│ Warning: Argument is deprecated
│ 
│   with github_repository.repositories,
│   on repositories.tf line 183, in resource "github_repository" "repositories":183:   has_downloads             = true
│ 
│ This attribute is no longer in use, but it hasn't been removed yet. It will
│ be removed in a future version. See
│ https://github.com/orgs/community/discussions/102145#discussioncomment-8351756
│ 
│ (and 54 more similar warnings elsewhere)
╵
─────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so OpenTofu can't
guarantee to take exactly these actions if you run "tofu apply" now.
Releasing state lock. This may take a few moments...
github/secrets — No changes
github/webhooks — No changes
zitadel/cloud — No changes
zitadel/self-hosted — No changes

Scoped (dev)

discord/community — No changes
monitoring/grafana — No changes
zitadel/customer — No changes

Scoped (prod)

⚠️ discord/community — Plan: 0 to add, 63 to change, 0 to destroy.
data.external.members: Still reading... [10s elapsed]
OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  ~ update in-place (current -> planned)
  # discord_forum_channel.dev_focus_topic will be updated in-place
  ~ resource "discord_forum_channel" "dev_focus_topic" {
        id                       = "1045707766754451486"
        name                     = "dev-focus-topic"
      ~ position                 = 22 -> 2
        # (5 unchanged attributes hidden)
    }
  # discord_forum_channel.draft_announcements will be updated in-place
  ~ resource "discord_forum_channel" "draft_announcements" {
        id                       = "1073000522338017381"
        name                     = "draft-announcements"
      ~ position                 = 19 -> 1
        # (5 unchanged attributes hidden)
    }
  # discord_forum_channel.focus_discussion will be updated in-place
  ~ resource "discord_forum_channel" "focus_discussion" {
        id                       = "1026327300284887111"
        name                     = "focus-discussion"
      ~ position                 = 6 -> 2
        # (5 unchanged attributes hidden)
    }
  # discord_forum_channel.help_desk_support will be updated in-place
  ~ resource "discord_forum_channel" "help_desk_support" {
        id                       = "1049703391762321418"
        name                     = "help-desk-support"
      ~ position                 = 4 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_forum_channel.leadership_focus_topic will be updated in-place
  ~ resource "discord_forum_channel" "leadership_focus_topic" {
        id                       = "1229454284479795291"
        name                     = "leadership-focus-topic"
      ~ position                 = 39 -> 3
        # (5 unchanged attributes hidden)
    }
  # discord_forum_channel.team_focus_topic will be updated in-place
  ~ resource "discord_forum_channel" "team_focus_topic" {
        id                       = "1330248543721754746"
        name                     = "team-focus-topic"
      ~ position                 = 26 -> 3
        # (5 unchanged attributes hidden)
    }
  # discord_forum_channel.team_pull_requests will be updated in-place
  ~ resource "discord_forum_channel" "team_pull_requests" {
        id                       = "1476975523271016661"
        name                     = "team-pull-requests"
      ~ position                 = 27 -> 4
        # (6 unchanged attributes hidden)
    }
  # discord_forum_channel.yucca_focus_topic will be updated in-place
  ~ resource "discord_forum_channel" "yucca_focus_topic" {
        id                       = "1413525610700996739"
        name                     = "yucca-focus-topic"
      ~ position                 = 32 -> 2
        # (6 unchanged attributes hidden)
    }
  # discord_news_channel.github_releases will be updated in-place
  ~ resource "discord_news_channel" "github_releases" {
        id                       = "991477056791658567"
        name                     = "github-releases"
      ~ position                 = 46 -> 5
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.bot_spam will be updated in-place
  ~ resource "discord_text_channel" "bot_spam" {
        id                       = "1159083520027787307"
        name                     = "bot-spam"
      ~ position                 = 47 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.branding will be updated in-place
  ~ resource "discord_text_channel" "branding" {
        id                       = "1215143314358009866"
        name                     = "branding"
      ~ position                 = 54 -> 4
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.build_status will be updated in-place
  ~ resource "discord_text_channel" "build_status" {
        id                       = "981216275210584134"
        name                     = "build-status"
      ~ position                 = 66 -> 16
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.cloudflare_status will be updated in-place
  ~ resource "discord_text_channel" "cloudflare_status" {
        id                       = "1313493521755410443"
        name                     = "cloudflare-status"
      ~ position                 = 42 -> 1
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.conference_room will be updated in-place
  ~ resource "discord_text_channel" "conference_room" {
        id                       = "1206801539470069810"
        name                     = "conference-room"
      ~ position                 = 53 -> 3
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.contributing will be updated in-place
  ~ resource "discord_text_channel" "contributing" {
        id                       = "1071165397228855327"
        name                     = "contributing"
      ~ position                 = 7 -> 3
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.dev will be updated in-place
  ~ resource "discord_text_channel" "dev" {
        id                       = "979148343693422593"
        name                     = "dev"
      ~ position                 = 20 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_cli will be updated in-place
  ~ resource "discord_text_channel" "dev_cli" {
        id                       = "1175153422866059329"
        name                     = "dev-cli"
      ~ position                 = 64 -> 14
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_fosdem will be updated in-place
  ~ resource "discord_text_channel" "dev_fosdem" {
        id                       = "1291108934861586492"
        name                     = "dev-fosdem"
      ~ position                 = 50 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_ml will be updated in-place
  ~ resource "discord_text_channel" "dev_ml" {
        id                       = "1175513104877101078"
        name                     = "dev-ml"
      ~ position                 = 55 -> 5
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_mobile will be updated in-place
  ~ resource "discord_text_channel" "dev_mobile" {
        id                       = "1069026079349669951"
        name                     = "dev-mobile"
      ~ position                 = 58 -> 8
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_off_topic will be updated in-place
  ~ resource "discord_text_channel" "dev_off_topic" {
        id                       = "1034520166115053638"
        name                     = "dev-off-topic"
      ~ position                 = 21 -> 1
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.dev_ops will be updated in-place
  ~ resource "discord_text_channel" "dev_ops" {
        id                       = "1176633064462487686"
        name                     = "dev-ops"
      ~ position                 = 61 -> 11
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_roles will be updated in-place
  ~ resource "discord_text_channel" "dev_roles" {
        id                       = "1196526624812839034"
        name                     = "dev-roles"
      ~ position                 = 59 -> 9
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_security will be updated in-place
  ~ resource "discord_text_channel" "dev_security" {
        id                       = "1020479445167001650"
        name                     = "dev-security"
      ~ position                 = 60 -> 10
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_server will be updated in-place
  ~ resource "discord_text_channel" "dev_server" {
        id                       = "1155894065062236160"
        name                     = "dev-server"
      ~ position                 = 52 -> 2
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.dev_web will be updated in-place
  ~ resource "discord_text_channel" "dev_web" {
        id                       = "1169697266806820974"
        name                     = "dev-web"
      ~ position                 = 63 -> 13
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.developer_updates will be updated in-place
  ~ resource "discord_text_channel" "developer_updates" {
        id                       = "1361300925788192778"
        name                     = "developer-updates"
      ~ position                 = 41 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.emotes will be updated in-place
  ~ resource "discord_text_channel" "emotes" {
        id                       = "1287169306244943894"
        name                     = "emotes"
      ~ position                 = 48 -> 1
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.fosdem_2025 will be updated in-place
  ~ resource "discord_text_channel" "fosdem_2025" {
        id                       = "1334949885442654248"
        name                     = "fosdem-2025"
      ~ position                 = 51 -> 1
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.futo will be updated in-place
  ~ resource "discord_text_channel" "futo" {
        id                       = "1208144146825748491"
        name                     = "futo"
      ~ position                 = 56 -> 6
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.futo_discussion_old will be updated in-place
  ~ resource "discord_text_channel" "futo_discussion_old" {
        id                       = "1238236317729554523"
        name                     = "futo-discussion-old"
      ~ position                 = 62 -> 12
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.github_issues_and_discussion will be updated in-place
  ~ resource "discord_text_channel" "github_issues_and_discussion" {
        id                       = "991483015958106202"
        name                     = "github-issues-and-discussion"
      ~ position                 = 44 -> 3
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.github_pull_requests will be updated in-place
  ~ resource "discord_text_channel" "github_pull_requests" {
        id                       = "991483093179445350"
        name                     = "github-pull-requests"
      ~ position                 = 45 -> 4
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.github_status will be updated in-place
  ~ resource "discord_text_channel" "github_status" {
        id                       = "1240662502912692236"
        name                     = "github-status"
      ~ position                 = 43 -> 2
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.imagegenius_aio will be updated in-place
  ~ resource "discord_text_channel" "imagegenius_aio" {
        id                       = "1178366211675930634"
        name                     = "imagegenius-aio"
      ~ position                 = 11 -> 0
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.immich will be updated in-place
  ~ resource "discord_text_channel" "immich" {
        id                       = "994044917355663450"
        name                     = "immich"
      ~ position                 = 9 -> 5
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.immich_frame will be updated in-place
  ~ resource "discord_text_channel" "immich_frame" {
        id                       = "1217843270244372480"
        name                     = "immich-frame"
      ~ position                 = 13 -> 2
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.immich_go will be updated in-place
  ~ resource "discord_text_channel" "immich_go" {
        id                       = "1178366369423700080"
        name                     = "immich-go"
      ~ position                 = 12 -> 1
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.immich_kiosk will be updated in-place
  ~ resource "discord_text_channel" "immich_kiosk" {
        id                       = "1293191523927851099"
        name                     = "immich-kiosk"
      ~ position                 = 14 -> 3
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.immich_nix will be updated in-place
  ~ resource "discord_text_channel" "immich_nix" {
        id                       = "1288786177952059435"
        name                     = "immich-nix"
      ~ position                 = 57 -> 7
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.immich_power_tools will be updated in-place
  ~ resource "discord_text_channel" "immich_power_tools" {
        id                       = "1278195895594258553"
        name                     = "immich-power-tools"
      ~ position                 = 15 -> 4
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.jasons_adventures_with_unraid_docker_and_networking will be updated in-place
  ~ resource "discord_text_channel" "jasons_adventures_with_unraid_docker_and_networking" {
        id                       = "1230989262325813270"
        name                     = "jasons-adventures-with-unraid-docker-and-networking"
      ~ position                 = 65 -> 15
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.leadership will be updated in-place
  ~ resource "discord_text_channel" "leadership" {
        id                       = "1176686059422232636"
        name                     = "leadership"
      ~ position                 = 36 -> 0
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.leadership_alerts will be updated in-place
  ~ resource "discord_text_channel" "leadership_alerts" {
        id                       = "1260975801625608213"
        name                     = "leadership-alerts"
      ~ position                 = 38 -> 2
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.leadership_off_topic will be updated in-place
  ~ resource "discord_text_channel" "leadership_off_topic" {
        id                       = "1255863786686906489"
        name                     = "leadership-off-topic"
      ~ position                 = 37 -> 1
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.merch will be updated in-place
  ~ resource "discord_text_channel" "merch" {
        id                       = "1336794023888818288"
        name                     = "merch"
      ~ position                 = 10 -> 6
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.moderator_only will be updated in-place
  ~ resource "discord_text_channel" "moderator_only" {
        id                       = "991930223991988255"
        name                     = "moderator-only"
      ~ position                 = 40 -> 4
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.off_topic will be updated in-place
  ~ resource "discord_text_channel" "off_topic" {
        id                       = "991643870523830382"
        name                     = "off-topic"
      ~ position                 = 49 -> 2
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.package_maintainers will be updated in-place
  ~ resource "discord_text_channel" "package_maintainers" {
        id                       = "1288859036015398974"
        name                     = "package-maintainers"
      ~ position                 = 5 -> 1
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.support_crew will be updated in-place
  ~ resource "discord_text_channel" "support_crew" {
        id                       = "1184258493948117084"
        name                     = "support-crew"
      ~ position                 = 18 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.team will be updated in-place
  ~ resource "discord_text_channel" "team" {
        id                       = "1330248080271999086"
        name                     = "team"
      ~ position                 = 23 -> 0
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.team_alerts will be updated in-place
  ~ resource "discord_text_channel" "team_alerts" {
        id                       = "1360190417643110460"
        name                     = "team-alerts"
      ~ position                 = 29 -> 6
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.team_off_topic will be updated in-place
  ~ resource "discord_text_channel" "team_off_topic" {
        id                       = "1330252547751022632"
        name                     = "team-off-topic"
      ~ position                 = 25 -> 2
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.team_purchases will be updated in-place
  ~ resource "discord_text_channel" "team_purchases" {
        id                       = "1263492970691297300"
        name                     = "team-purchases"
      ~ position                 = 28 -> 5
        # (5 unchanged attributes hidden)
    }
  # discord_text_channel.team_slop will be updated in-place
  ~ resource "discord_text_channel" "team_slop" {
        id                       = "1485644163247640657"
        name                     = "team-slop"
      ~ position                 = 24 -> 1
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.translations will be updated in-place
  ~ resource "discord_text_channel" "translations" {
        id                       = "1250427404976132138"
        name                     = "translations"
      ~ position                 = 8 -> 4
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.truenas will be updated in-place
  ~ resource "discord_text_channel" "truenas" {
        id                       = "1178410588821524561"
        name                     = "truenas"
      ~ position                 = 16 -> 5
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.unraid will be updated in-place
  ~ resource "discord_text_channel" "unraid" {
        id                       = "1228387901889445989"
        name                     = "unraid"
      ~ position                 = 17 -> 6
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.yucca will be updated in-place
  ~ resource "discord_text_channel" "yucca" {
        id                       = "1413525175747608688"
        name                     = "yucca"
      ~ position                 = 30 -> 0
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.yucca_alerts will be updated in-place
  ~ resource "discord_text_channel" "yucca_alerts" {
        id                       = "1413525667429093469"
        name                     = "yucca-alerts"
      ~ position                 = 33 -> 3
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.yucca_alerts_dev will be updated in-place
  ~ resource "discord_text_channel" "yucca_alerts_dev" {
        id                       = "1425822463736021134"
        name                     = "yucca-alerts-dev"
      ~ position                 = 35 -> 5
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.yucca_alerts_testing will be updated in-place
  ~ resource "discord_text_channel" "yucca_alerts_testing" {
        id                       = "1425822461890662460"
        name                     = "yucca-alerts-testing"
      ~ position                 = 34 -> 4
        # (6 unchanged attributes hidden)
    }
  # discord_text_channel.yucca_off_topic will be updated in-place
  ~ resource "discord_text_channel" "yucca_off_topic" {
        id                       = "1413525269192376413"
        name                     = "yucca-off-topic"
      ~ position                 = 31 -> 1
        # (6 unchanged attributes hidden)
    }
Plan: 0 to add, 63 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so OpenTofu can't
guarantee to take exactly these actions if you run "tofu apply" now.
discord/futo — No changes
monitoring/grafana — No changes
zitadel/customer — No changes

@renovate renovate Bot force-pushed the renovate/major-tofu branch from 4a96460 to 0d8733b Compare May 12, 2026 12:27
@renovate renovate Bot force-pushed the renovate/major-tofu branch from 0d8733b to b0d530f Compare May 12, 2026 19:28
@renovate renovate Bot merged commit 63363d5 into main May 13, 2026
20 checks passed
@renovate renovate Bot deleted the renovate/major-tofu branch May 13, 2026 00:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant