Skip to content

Delete decommissioned tfroot-twilio repository - #70

Merged
xnoto merged 2 commits into
mainfrom
chore/remove-tfroot-twilio
Sep 20, 2026
Merged

xnoto merged 2 commits into
mainfrom
chore/remove-tfroot-twilio

Conversation

@xnoto

@xnoto xnoto commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Owner explicitly requested deleting tfroot-twilio, not archiving it. Remove its catalog entry, dependent import/move declarations, and explicit App-secret recipient. Existing catalog-derived resources remove its repository/protection/team/file/secret instances through canonical tfroot-github apply.

Fixes: N/A — full retirement request, provider and AWS prerequisites verified below.

Type of change

  • Infrastructure (OpenTofu root or module)
  • Breaking change

Validation

  • Required PR test/plan pass — pending.
  • Generated files not hand-edited; canonical catalog/import metadata only.

Adversarial/security reviewers ADVANCE after prerequisite evidence. Provider-root teardown #9 mainapply35480009715success; AWS backend/role removal #55 mainapply35482094694success. Account-gated AWS HeadBucket404/ListBuckets absence and IAMGetRoleNoSuchEntity verified. Cluster bridge resources and app already removed through kustomize253/254. No state/credential retrieval.

Plan must contain only deletion of this repository's catalog-derived resources: repository, branch protection, two managed Dependabot files, team access, and its Actions secrets. Stop on changes to unrelated repositories or shared secrets. archive_on_destroy is not enabled, so apply performs deletion.

Impact and rollout

IRREVERSIBLE repository deletion on successful main apply, including repository-hosted settings/files/credentials/history. No archival repository or backup copies requested. This PR does not touch shared org credentials or other repositories. Backend and role are already absent, so deletion cannot prevent the completed provider teardown. Source restoration is not a guaranteed repository/history recovery.

Safety and secrets

  • No secret values, decrypted files, raw state or sensitive plans
  • No local OpenTofu init/plan/apply/destroy/import/state operations
  • Destructive effects and prerequisite evidence described above

AI-assisted; no upstream communications. Actual deletion remains gated on matching PR plan and main apply success.

## Summary

Owner-authorized full deletion (no archive) of the tfroot-twilio
repository through tfroot-github. Removes the catalog entry, its two
dependabot file imports, and its explicit
CHART_UPDATER_GITHUB_APP_PRIVATE_KEY recipient entry. Broadcast
Cloudflare auth recipients shrink automatically through
active_github_repositories; all other recipients are unchanged.

## Type of change

- [x] Infrastructure (OpenTofu root or module)
- [x] Breaking change

## Validation

- [ ] Required pull-request checks pass — pending `opentofu / test` and
`opentofu / plan`; PR CI is the validation authority.
- [x] No generated file changed — README (terraform-docs) lists resource
types only; regeneration not required.

Expected plan: destroy of only tfroot-twilio-scoped instances —
github_repository, strict branch protection, two repository files,
admins team access, and its three Actions-secret instances
(CHART_UPDATER_GITHUB_APP_PRIVATE_KEY, CLOUDFLARE_AUTH_CLIENT_ID,
CLOUDFLARE_AUTH_CLIENT_SECRET). archive_on_destroy is unset in
gh-repositories.tf; the integrations/github ~> 6.0 default is false, so
destroy deletes the repository instead of archiving it.

## Impact and rollout

Apply is sequenced after the separately owned AWS cleanup. Deletion of
the GitHub repository, its protections, managed files, and secret
instances happens only at the environment-gated main apply. Rollback
before apply: revert this branch.

## Safety and secrets

- [x] Contains no plaintext secrets, decrypted SOPS values, state files,
kubeconfigs, tokens, or private endpoints
- [x] No local OpenTofu init/plan/apply/destroy/import/state operations
were run or claimed — plans come from pull-request checks
- [x] Breaking/irreversible effects (repository deletion) are described
above; sequencing requires AWS cleanup first

AI-assisted change; review the destroy-scoped plan before merge.
The only moved block in moves.tf graduated tfroot-twilio from the
relaxed to the strict protection resource. The repository is being
removed from the catalog in this branch, so the historical moved block
must not outlive its target resource. No other repository is affected.
@xnoto
xnoto requested a review from a team as a code owner September 20, 2026 01:53
@github-actions

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

OpenTofu Test

OpenTofu test passed.

View the workflow run.

View run output
Terraform validate.......................................................Passed
Terraform validate with tflint...........................................Passed
Checkov..................................................................Passed
Terraform fmt............................................................Passed
Terraform docs...........................................................Passed
Detect hardcoded secrets.................................................Passed
check for case conflicts.................................................Passed
check for merge conflicts................................................Passed
check for broken symlinks............................(no files to check)Skipped
check vcs permalinks.....................................................Passed
detect destroyed symlinks................................................Passed
detect private key.......................................................Passed
fix end of files.........................................................Passed
mixed line ending........................................................Passed
trim trailing whitespace.................................................Passed
don't commit to branch..................................................Skipped
check for added large files..............................................Passed

@github-actions

Copy link
Copy Markdown
Contributor

OpenTofu Plan

OpenTofu plan passed.

View the workflow run.

View run output
OpenTofu will perform the following actions:

[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
      - created_at        = "2026-09-03 21:16:11 +0000 UTC" -> null
[REDACTED: potentially sensitive plan output]
      - key_id            = "3380204578043523366" -> null
      - plaintext_value   = (sensitive value) -> null
      - remote_updated_at = "2026-09-06 21:11:12 +0000 UTC" -> null
      - repository        = "tfroot-twilio" -> null
      - repository_id     = 1356437102 -> null
[REDACTED: potentially sensitive plan output]
      - updated_at        = "2026-09-06 21:11:12 +0000 UTC" -> null
    }

[REDACTED: potentially sensitive plan output]
  # (because key ["tfroot-twilio_CLOUDFLARE_AUTH_CLIENT_ID"] is not in for_each map)
[REDACTED: potentially sensitive plan output]
      - created_at        = "2026-09-03 21:16:08 +0000 UTC" -> null
      - id                = "tfroot-twilio:CLOUDFLARE_AUTH_CLIENT_ID" -> null
      - key_id            = "3380204578043523366" -> null
      - plaintext_value   = (sensitive value) -> null
      - remote_updated_at = "2026-09-03 21:16:08 +0000 UTC" -> null
      - repository        = "tfroot-twilio" -> null
      - repository_id     = 1356437102 -> null
[REDACTED: potentially sensitive plan output]
      - updated_at        = "2026-09-03 21:16:08 +0000 UTC" -> null
    }

[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
      - created_at        = "2026-09-03 21:16:09 +0000 UTC" -> null
[REDACTED: potentially sensitive plan output]
      - key_id            = "3380204578043523366" -> null
      - plaintext_value   = (sensitive value) -> null
      - remote_updated_at = "2026-09-03 21:16:09 +0000 UTC" -> null
      - repository        = "tfroot-twilio" -> null
      - repository_id     = 1356437102 -> null
[REDACTED: potentially sensitive plan output]
      - updated_at        = "2026-09-03 21:16:09 +0000 UTC" -> null
    }

  # github_branch_protection.protections["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_branch_protection" "protections" {
      - allows_deletions                = false -> null
      - allows_force_pushes             = false -> null
      - enforce_admins                  = true -> null
      - force_push_bypassers            = [] -> null
      - id                              = "BPR_kwDOUNmWbs4E7fVz" -> null
      - lock_branch                     = false -> null
      - pattern                         = "main" -> null
      - repository_id                   = "R_kgDOUNmWbg" -> null
      - require_conversation_resolution = true -> null
      - require_signed_commits          = false -> null
      - required_linear_history         = true -> null

      - required_pull_request_reviews {
          - dismiss_stale_reviews           = false -> null
          - dismissal_restrictions          = [] -> null
          - pull_request_bypassers          = [] -> null
          - require_code_owner_reviews      = false -> null
          - require_last_push_approval      = false -> null
          - required_approving_review_count = 0 -> null
          - restrict_dismissals             = false -> null
        }

      - required_status_checks {
          - contexts = [
              - "opentofu / plan",
              - "opentofu / test",
            ] -> null
          - strict   = true -> null
        }

      - restrict_pushes {
          - blocks_creations = true -> null
          - push_allowances  = [
              - "makeitworkcloud/admins",
            ] -> null
        }
    }

  # github_repository.repositories["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_repository" "repositories" {
      - allow_auto_merge                        = false -> null
      - allow_forking                           = true -> null
      - allow_merge_commit                      = true -> null
      - allow_rebase_merge                      = false -> null
      - allow_squash_merge                      = true -> null
      - allow_update_branch                     = false -> null
      - archived                                = false -> null
      - auto_init                               = true -> null
      - default_branch                          = "main" -> null
      - delete_branch_on_merge                  = true -> null
      - etag                                    = "W/\"0087a64a8a474b7bc0d1b279908cbc17afb8c7a55280c2e18dc2c06ed2993c80\"" -> null
      - fork                                    = "false" -> null
      - full_name                               = "makeitworkcloud/tfroot-twilio" -> null
      - git_clone_url                           = "git://github.com/makeitworkcloud/tfroot-twilio.git" -> null
      - has_discussions                         = false -> null
      - has_downloads                           = false -> null
      - has_issues                              = false -> null
      - has_projects                            = false -> null
      - has_wiki                                = false -> null
      - html_url                                = "https://github.com/makeitworkcloud/tfroot-twilio" -> null
      - http_clone_url                          = "https://github.com/makeitworkcloud/tfroot-twilio.git" -> null
      - id                                      = "tfroot-twilio" -> null
      - ignore_vulnerability_alerts_during_read = false -> null
      - is_template                             = false -> null
      - merge_commit_message                    = "PR_TITLE" -> null
      - merge_commit_title                      = "MERGE_MESSAGE" -> null
      - name                                    = "tfroot-twilio" -> null
      - node_id                                 = "R_kgDOUNmWbg" -> null
      - primary_language                        = "Makefile" -> null
      - private                                 = false -> null
      - repo_id                                 = 1356437102 -> null
      - squash_merge_commit_message             = "PR_BODY" -> null
      - squash_merge_commit_title               = "PR_TITLE" -> null
      - ssh_clone_url                           = "git@github.com:makeitworkcloud/tfroot-twilio.git" -> null
      - svn_url                                 = "https://github.com/makeitworkcloud/tfroot-twilio" -> null
      - topics                                  = [
          - "opentofu",
          - "s3-backend",
          - "sms",
[REDACTED: potentially sensitive plan output]
          - "twilio",
        ] -> null
      - visibility                              = "public" -> null
      - vulnerability_alerts                    = true -> null
      - web_commit_signoff_required             = false -> null

      - security_and_analysis {
[REDACTED: potentially sensitive plan output]
              - status = "disabled" -> null
            }
[REDACTED: potentially sensitive plan output]
              - status = "disabled" -> null
            }
        }
    }

  # github_repository_file.dependabot["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_repository_file" "dependabot" {
      - branch              = "main" -> null
      - commit_message      = <<-EOT
            feat: bootstrap OpenTofu root
            
            ## Summary
            
            Bootstrap `tfroot-twilio` as a no-resource OpenTofu root. It evaluates
            the pinned `RJPearson94/twilio` `0.27.1` provider, adds the shared
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            
            The PR also seeds the two exact `tfroot-github`-generated Dependabot
            files through the required pull-request path. This resolves the existing
            direct-commit/branch-protection conflict without changing protection
            rules or assigning downstream ownership.
            
            The bootstrap deliberately omits an S3 backend because its Makefile
            initializes with `-backend=false`; a permanent encrypted backend remains
            a follow-up prerequisite before Twilio resources can be managed.
            
            Fixes # N/A — owner-approved Twilio root bootstrap and centralized
            Dependabot delivery repair.
            
            ## Type of change
            
            - [ ] Bug fix
            - [x] Feature / enhancement
            - [ ] Documentation
            - [x] Infrastructure (OpenTofu root or module)
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [ ] Container image
            - [ ] CI / reusable workflow
            - [ ] Refactor / cleanup
            - [ ] Breaking change
            
            ## Validation
            
            - [x] Required pull-request checks pass — OpenTofu test and no-resource
            plan succeeded in [run
            33818165420](https://github.com/makeitworkcloud/tfroot-twilio/actions/runs/33818165420).
            - [x] Plan reports no changes; there are no provider configurations,
            data sources, or Twilio resources.
            - [x] Generated or centrally distributed files were regenerated by their
            owning automation, not hand-edited — the two generated files are an
            exact PR-based seed from `tfroot-github/gh-dependabot.tf`; central
            ownership remains unchanged and will adopt them after merge.
            
            The exact repository-scoped GitHub OIDC subject was validated through
            the separately applied [`tfroot-aws` PR
            #40](https://github.com/makeitworkcloud/tfroot-aws/pull/40). No local
[REDACTED: potentially sensitive plan output]
            Registry review verified `RJPearson94/twilio` `0.27.1` supports
            phone-number and inbound messaging-webhook fields; the bootstrap
            intentionally has no provider configuration or Twilio resources.
            
            ## Impact and rollout
            
            Producer/consumer chain: `images/tfroot-runner` supplies the canonical
            CI toolchain, `shared-workflows` supplies the reusable OpenTofu
            workflow, `tfroot-twilio` becomes the future Twilio phone/webhook owner,
            and `tfroot-github` remains the sole long-term owner of the seeded
            Dependabot files.
            
            Merging will submit the environment-gated main workflow. This
            bootstrap's apply has no provider-side effect because there are no
            configured providers, data sources, or resources. A later reviewed
[REDACTED: potentially sensitive plan output]
            inputs with least privilege before managing Twilio inventory. Twilio
            provisioning and webhook changes remain separately confirmation-gated.
            
            Rollback is a normal revert of this bootstrap PR. Do not manually edit
            the seeded Dependabot files after merge.
            
[REDACTED: potentially sensitive plan output]
            
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [x] No local OpenTofu init/plan/apply/destroy/import/state operations
            were run or claimed — plans come from pull-request checks.
            - [x] Breaking or irreversible effects are described above with rollback
            notes.
            
[REDACTED: potentially sensitive plan output]
            Security is not enabled; the committed diff was manually inspected
            before publication.
            
            AI agent materially produced this change; reviewers should confirm the
            retained no-resource bootstrap boundary and central generated-file
            ownership.
            
            ---------
            
            Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
        EOT -> null
      - commit_sha          = "315acbf8cf0411eb44c1d59ad3603724d5c15a7a" -> null
      - content             = <<-EOT
            # Managed by tfroot-github (gh-dependabot.tf); local edits are overwritten.
            "updates":
            - "directory": "/"
              "groups":
                "github-actions":
                  "patterns":
                  - "*"
              "package-ecosystem": "github-actions"
              "schedule":
                "interval": "daily"
            - "directory": "/"
              "groups":
                "opentofu":
                  "patterns":
                  - "*"
              "package-ecosystem": "opentofu"
              "schedule":
                "interval": "daily"
            "version": 2
        EOT -> null
      - file                = ".github/dependabot.yml" -> null
      - id                  = "tfroot-twilio:.github/dependabot.yml:main" -> null
      - overwrite_on_create = false -> null
      - ref                 = "main" -> null
      - repository          = "tfroot-twilio" -> null
      - repository_id       = 1356437102 -> null
      - sha                 = "03c5f79693e6cbffc5a63baddc58014ba0232170" -> null
    }

  # github_repository_file.dependabot_notify["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_repository_file" "dependabot_notify" {
      - branch              = "main" -> null
      - commit_message      = <<-EOT
            feat: bootstrap OpenTofu root
            
            ## Summary
            
            Bootstrap `tfroot-twilio` as a no-resource OpenTofu root. It evaluates
            the pinned `RJPearson94/twilio` `0.27.1` provider, adds the shared
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            
            The PR also seeds the two exact `tfroot-github`-generated Dependabot
            files through the required pull-request path. This resolves the existing
            direct-commit/branch-protection conflict without changing protection
            rules or assigning downstream ownership.
            
            The bootstrap deliberately omits an S3 backend because its Makefile
            initializes with `-backend=false`; a permanent encrypted backend remains
            a follow-up prerequisite before Twilio resources can be managed.
            
            Fixes # N/A — owner-approved Twilio root bootstrap and centralized
            Dependabot delivery repair.
            
            ## Type of change
            
            - [ ] Bug fix
            - [x] Feature / enhancement
            - [ ] Documentation
            - [x] Infrastructure (OpenTofu root or module)
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [ ] Container image
            - [ ] CI / reusable workflow
            - [ ] Refactor / cleanup
            - [ ] Breaking change
            
            ## Validation
            
            - [x] Required pull-request checks pass — OpenTofu test and no-resource
            plan succeeded in [run
            33818165420](https://github.com/makeitworkcloud/tfroot-twilio/actions/runs/33818165420).
            - [x] Plan reports no changes; there are no provider configurations,
            data sources, or Twilio resources.
            - [x] Generated or centrally distributed files were regenerated by their
            owning automation, not hand-edited — the two generated files are an
            exact PR-based seed from `tfroot-github/gh-dependabot.tf`; central
            ownership remains unchanged and will adopt them after merge.
            
            The exact repository-scoped GitHub OIDC subject was validated through
            the separately applied [`tfroot-aws` PR
            #40](https://github.com/makeitworkcloud/tfroot-aws/pull/40). No local
[REDACTED: potentially sensitive plan output]
            Registry review verified `RJPearson94/twilio` `0.27.1` supports
            phone-number and inbound messaging-webhook fields; the bootstrap
            intentionally has no provider configuration or Twilio resources.
            
            ## Impact and rollout
            
            Producer/consumer chain: `images/tfroot-runner` supplies the canonical
            CI toolchain, `shared-workflows` supplies the reusable OpenTofu
            workflow, `tfroot-twilio` becomes the future Twilio phone/webhook owner,
            and `tfroot-github` remains the sole long-term owner of the seeded
            Dependabot files.
            
            Merging will submit the environment-gated main workflow. This
            bootstrap's apply has no provider-side effect because there are no
            configured providers, data sources, or resources. A later reviewed
[REDACTED: potentially sensitive plan output]
            inputs with least privilege before managing Twilio inventory. Twilio
            provisioning and webhook changes remain separately confirmation-gated.
            
            Rollback is a normal revert of this bootstrap PR. Do not manually edit
            the seeded Dependabot files after merge.
            
[REDACTED: potentially sensitive plan output]
            
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [x] No local OpenTofu init/plan/apply/destroy/import/state operations
            were run or claimed — plans come from pull-request checks.
            - [x] Breaking or irreversible effects are described above with rollback
            notes.
            
[REDACTED: potentially sensitive plan output]
            Security is not enabled; the committed diff was manually inspected
            before publication.
            
            AI agent materially produced this change; reviewers should confirm the
            retained no-resource bootstrap boundary and central generated-file
            ownership.
            
            ---------
            
            Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
        EOT -> null
      - commit_sha          = "315acbf8cf0411eb44c1d59ad3603724d5c15a7a" -> null
      - content             = <<-EOT
            ---
            # Managed by tfroot-github (gh-dependabot.tf); local edits are overwritten.
            name: dependabot-notify
            
            on:
              pull_request:
                types: [opened, reopened]
            
            permissions: {}
            
            jobs:
              notify:
                if: github.actor == 'dependabot[bot]'
                uses: makeitworkcloud/shared-workflows/.github/workflows/_dependabot-notify.yml@main
[REDACTED: potentially sensitive plan output]
        EOT -> null
      - file                = ".github/workflows/dependabot-notify.yml" -> null
      - id                  = "tfroot-twilio:.github/workflows/dependabot-notify.yml:main" -> null
      - overwrite_on_create = false -> null
      - ref                 = "main" -> null
      - repository          = "tfroot-twilio" -> null
      - repository_id       = 1356437102 -> null
      - sha                 = "de2725088a33d9dc3bc14f05d3a709a093709856" -> null
    }

  # github_team_repository.admins["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_team_repository" "admins" {
      - etag       = "W/\"d9f6b77d1f4eda18d975a5149b2c3f63abdf3cbbc7629ab1a3bfdac162953393\"" -> null
      - id         = "15594330:tfroot-twilio" -> null
      - permission = "admin" -> null
      - repository = "tfroot-twilio" -> null
      - team_id    = "15594330" -> null
    }

  # github_workflow_repository_permissions.release_automation will be created
  + resource "github_workflow_repository_permissions" "release_automation" {
      + can_approve_pull_request_reviews = true
      + default_workflow_permissions     = "read"
      + id                               = (known after apply)
      + repository                       = "terraform-libvirt-domain"
    }

Plan: 1 to add, 0 to change, 8 to destroy.
OpenTofu will perform the following actions:

[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
      - created_at        = "2026-09-03 21:16:11 +0000 UTC" -> null
[REDACTED: potentially sensitive plan output]
      - key_id            = "3380204578043523366" -> null
      - plaintext_value   = (sensitive value) -> null
      - remote_updated_at = "2026-09-06 21:11:12 +0000 UTC" -> null
      - repository        = "tfroot-twilio" -> null
      - repository_id     = 1356437102 -> null
[REDACTED: potentially sensitive plan output]
      - updated_at        = "2026-09-06 21:11:12 +0000 UTC" -> null
    }

[REDACTED: potentially sensitive plan output]
  # (because key ["tfroot-twilio_CLOUDFLARE_AUTH_CLIENT_ID"] is not in for_each map)
[REDACTED: potentially sensitive plan output]
      - created_at        = "2026-09-03 21:16:08 +0000 UTC" -> null
      - id                = "tfroot-twilio:CLOUDFLARE_AUTH_CLIENT_ID" -> null
      - key_id            = "3380204578043523366" -> null
      - plaintext_value   = (sensitive value) -> null
      - remote_updated_at = "2026-09-03 21:16:08 +0000 UTC" -> null
      - repository        = "tfroot-twilio" -> null
      - repository_id     = 1356437102 -> null
[REDACTED: potentially sensitive plan output]
      - updated_at        = "2026-09-03 21:16:08 +0000 UTC" -> null
    }

[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
      - created_at        = "2026-09-03 21:16:09 +0000 UTC" -> null
[REDACTED: potentially sensitive plan output]
      - key_id            = "3380204578043523366" -> null
      - plaintext_value   = (sensitive value) -> null
      - remote_updated_at = "2026-09-03 21:16:09 +0000 UTC" -> null
      - repository        = "tfroot-twilio" -> null
      - repository_id     = 1356437102 -> null
[REDACTED: potentially sensitive plan output]
      - updated_at        = "2026-09-03 21:16:09 +0000 UTC" -> null
    }

  # github_branch_protection.protections["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_branch_protection" "protections" {
      - allows_deletions                = false -> null
      - allows_force_pushes             = false -> null
      - enforce_admins                  = true -> null
      - force_push_bypassers            = [] -> null
      - id                              = "BPR_kwDOUNmWbs4E7fVz" -> null
      - lock_branch                     = false -> null
      - pattern                         = "main" -> null
      - repository_id                   = "R_kgDOUNmWbg" -> null
      - require_conversation_resolution = true -> null
      - require_signed_commits          = false -> null
      - required_linear_history         = true -> null

      - required_pull_request_reviews {
          - dismiss_stale_reviews           = false -> null
          - dismissal_restrictions          = [] -> null
          - pull_request_bypassers          = [] -> null
          - require_code_owner_reviews      = false -> null
          - require_last_push_approval      = false -> null
          - required_approving_review_count = 0 -> null
          - restrict_dismissals             = false -> null
        }

      - required_status_checks {
          - contexts = [
              - "opentofu / plan",
              - "opentofu / test",
            ] -> null
          - strict   = true -> null
        }

      - restrict_pushes {
          - blocks_creations = true -> null
          - push_allowances  = [
              - "makeitworkcloud/admins",
            ] -> null
        }
    }

  # github_repository.repositories["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_repository" "repositories" {
      - allow_auto_merge                        = false -> null
      - allow_forking                           = true -> null
      - allow_merge_commit                      = true -> null
      - allow_rebase_merge                      = false -> null
      - allow_squash_merge                      = true -> null
      - allow_update_branch                     = false -> null
      - archived                                = false -> null
      - auto_init                               = true -> null
      - default_branch                          = "main" -> null
      - delete_branch_on_merge                  = true -> null
      - etag                                    = "W/\"0087a64a8a474b7bc0d1b279908cbc17afb8c7a55280c2e18dc2c06ed2993c80\"" -> null
      - fork                                    = "false" -> null
      - full_name                               = "makeitworkcloud/tfroot-twilio" -> null
      - git_clone_url                           = "git://github.com/makeitworkcloud/tfroot-twilio.git" -> null
      - has_discussions                         = false -> null
      - has_downloads                           = false -> null
      - has_issues                              = false -> null
      - has_projects                            = false -> null
      - has_wiki                                = false -> null
      - html_url                                = "https://github.com/makeitworkcloud/tfroot-twilio" -> null
      - http_clone_url                          = "https://github.com/makeitworkcloud/tfroot-twilio.git" -> null
      - id                                      = "tfroot-twilio" -> null
      - ignore_vulnerability_alerts_during_read = false -> null
      - is_template                             = false -> null
      - merge_commit_message                    = "PR_TITLE" -> null
      - merge_commit_title                      = "MERGE_MESSAGE" -> null
      - name                                    = "tfroot-twilio" -> null
      - node_id                                 = "R_kgDOUNmWbg" -> null
      - primary_language                        = "Makefile" -> null
      - private                                 = false -> null
      - repo_id                                 = 1356437102 -> null
      - squash_merge_commit_message             = "PR_BODY" -> null
      - squash_merge_commit_title               = "PR_TITLE" -> null
      - ssh_clone_url                           = "git@github.com:makeitworkcloud/tfroot-twilio.git" -> null
      - svn_url                                 = "https://github.com/makeitworkcloud/tfroot-twilio" -> null
      - topics                                  = [
          - "opentofu",
          - "s3-backend",
          - "sms",
[REDACTED: potentially sensitive plan output]
          - "twilio",
        ] -> null
      - visibility                              = "public" -> null
      - vulnerability_alerts                    = true -> null
      - web_commit_signoff_required             = false -> null

      - security_and_analysis {
[REDACTED: potentially sensitive plan output]
              - status = "disabled" -> null
            }
[REDACTED: potentially sensitive plan output]
              - status = "disabled" -> null
            }
        }
    }

  # github_repository_file.dependabot["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_repository_file" "dependabot" {
      - branch              = "main" -> null
      - commit_message      = <<-EOT
            feat: bootstrap OpenTofu root
            
            ## Summary
            
            Bootstrap `tfroot-twilio` as a no-resource OpenTofu root. It evaluates
            the pinned `RJPearson94/twilio` `0.27.1` provider, adds the shared
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            
            The PR also seeds the two exact `tfroot-github`-generated Dependabot
            files through the required pull-request path. This resolves the existing
            direct-commit/branch-protection conflict without changing protection
            rules or assigning downstream ownership.
            
            The bootstrap deliberately omits an S3 backend because its Makefile
            initializes with `-backend=false`; a permanent encrypted backend remains
            a follow-up prerequisite before Twilio resources can be managed.
            
            Fixes # N/A — owner-approved Twilio root bootstrap and centralized
            Dependabot delivery repair.
            
            ## Type of change
            
            - [ ] Bug fix
            - [x] Feature / enhancement
            - [ ] Documentation
            - [x] Infrastructure (OpenTofu root or module)
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [ ] Container image
            - [ ] CI / reusable workflow
            - [ ] Refactor / cleanup
            - [ ] Breaking change
            
            ## Validation
            
            - [x] Required pull-request checks pass — OpenTofu test and no-resource
            plan succeeded in [run
            33818165420](https://github.com/makeitworkcloud/tfroot-twilio/actions/runs/33818165420).
            - [x] Plan reports no changes; there are no provider configurations,
            data sources, or Twilio resources.
            - [x] Generated or centrally distributed files were regenerated by their
            owning automation, not hand-edited — the two generated files are an
            exact PR-based seed from `tfroot-github/gh-dependabot.tf`; central
            ownership remains unchanged and will adopt them after merge.
            
            The exact repository-scoped GitHub OIDC subject was validated through
            the separately applied [`tfroot-aws` PR
            #40](https://github.com/makeitworkcloud/tfroot-aws/pull/40). No local
[REDACTED: potentially sensitive plan output]
            Registry review verified `RJPearson94/twilio` `0.27.1` supports
            phone-number and inbound messaging-webhook fields; the bootstrap
            intentionally has no provider configuration or Twilio resources.
            
            ## Impact and rollout
            
            Producer/consumer chain: `images/tfroot-runner` supplies the canonical
            CI toolchain, `shared-workflows` supplies the reusable OpenTofu
            workflow, `tfroot-twilio` becomes the future Twilio phone/webhook owner,
            and `tfroot-github` remains the sole long-term owner of the seeded
            Dependabot files.
            
            Merging will submit the environment-gated main workflow. This
            bootstrap's apply has no provider-side effect because there are no
            configured providers, data sources, or resources. A later reviewed
[REDACTED: potentially sensitive plan output]
            inputs with least privilege before managing Twilio inventory. Twilio
            provisioning and webhook changes remain separately confirmation-gated.
            
            Rollback is a normal revert of this bootstrap PR. Do not manually edit
            the seeded Dependabot files after merge.
            
[REDACTED: potentially sensitive plan output]
            
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [x] No local OpenTofu init/plan/apply/destroy/import/state operations
            were run or claimed — plans come from pull-request checks.
            - [x] Breaking or irreversible effects are described above with rollback
            notes.
            
[REDACTED: potentially sensitive plan output]
            Security is not enabled; the committed diff was manually inspected
            before publication.
            
            AI agent materially produced this change; reviewers should confirm the
            retained no-resource bootstrap boundary and central generated-file
            ownership.
            
            ---------
            
            Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
        EOT -> null
      - commit_sha          = "315acbf8cf0411eb44c1d59ad3603724d5c15a7a" -> null
      - content             = <<-EOT
            # Managed by tfroot-github (gh-dependabot.tf); local edits are overwritten.
            "updates":
            - "directory": "/"
              "groups":
                "github-actions":
                  "patterns":
                  - "*"
              "package-ecosystem": "github-actions"
              "schedule":
                "interval": "daily"
            - "directory": "/"
              "groups":
                "opentofu":
                  "patterns":
                  - "*"
              "package-ecosystem": "opentofu"
              "schedule":
                "interval": "daily"
            "version": 2
        EOT -> null
      - file                = ".github/dependabot.yml" -> null
      - id                  = "tfroot-twilio:.github/dependabot.yml:main" -> null
      - overwrite_on_create = false -> null
      - ref                 = "main" -> null
      - repository          = "tfroot-twilio" -> null
      - repository_id       = 1356437102 -> null
      - sha                 = "03c5f79693e6cbffc5a63baddc58014ba0232170" -> null
    }

  # github_repository_file.dependabot_notify["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_repository_file" "dependabot_notify" {
      - branch              = "main" -> null
      - commit_message      = <<-EOT
            feat: bootstrap OpenTofu root
            
            ## Summary
            
            Bootstrap `tfroot-twilio` as a no-resource OpenTofu root. It evaluates
            the pinned `RJPearson94/twilio` `0.27.1` provider, adds the shared
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            
            The PR also seeds the two exact `tfroot-github`-generated Dependabot
            files through the required pull-request path. This resolves the existing
            direct-commit/branch-protection conflict without changing protection
            rules or assigning downstream ownership.
            
            The bootstrap deliberately omits an S3 backend because its Makefile
            initializes with `-backend=false`; a permanent encrypted backend remains
            a follow-up prerequisite before Twilio resources can be managed.
            
            Fixes # N/A — owner-approved Twilio root bootstrap and centralized
            Dependabot delivery repair.
            
            ## Type of change
            
            - [ ] Bug fix
            - [x] Feature / enhancement
            - [ ] Documentation
            - [x] Infrastructure (OpenTofu root or module)
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [ ] Container image
            - [ ] CI / reusable workflow
            - [ ] Refactor / cleanup
            - [ ] Breaking change
            
            ## Validation
            
            - [x] Required pull-request checks pass — OpenTofu test and no-resource
            plan succeeded in [run
            33818165420](https://github.com/makeitworkcloud/tfroot-twilio/actions/runs/33818165420).
            - [x] Plan reports no changes; there are no provider configurations,
            data sources, or Twilio resources.
            - [x] Generated or centrally distributed files were regenerated by their
            owning automation, not hand-edited — the two generated files are an
            exact PR-based seed from `tfroot-github/gh-dependabot.tf`; central
            ownership remains unchanged and will adopt them after merge.
            
            The exact repository-scoped GitHub OIDC subject was validated through
            the separately applied [`tfroot-aws` PR
            #40](https://github.com/makeitworkcloud/tfroot-aws/pull/40). No local
[REDACTED: potentially sensitive plan output]
            Registry review verified `RJPearson94/twilio` `0.27.1` supports
            phone-number and inbound messaging-webhook fields; the bootstrap
            intentionally has no provider configuration or Twilio resources.
            
            ## Impact and rollout
            
            Producer/consumer chain: `images/tfroot-runner` supplies the canonical
            CI toolchain, `shared-workflows` supplies the reusable OpenTofu
            workflow, `tfroot-twilio` becomes the future Twilio phone/webhook owner,
            and `tfroot-github` remains the sole long-term owner of the seeded
            Dependabot files.
            
            Merging will submit the environment-gated main workflow. This
            bootstrap's apply has no provider-side effect because there are no
            configured providers, data sources, or resources. A later reviewed
[REDACTED: potentially sensitive plan output]
            inputs with least privilege before managing Twilio inventory. Twilio
            provisioning and webhook changes remain separately confirmation-gated.
            
            Rollback is a normal revert of this bootstrap PR. Do not manually edit
            the seeded Dependabot files after merge.
            
[REDACTED: potentially sensitive plan output]
            
[REDACTED: potentially sensitive plan output]
[REDACTED: potentially sensitive plan output]
            - [x] No local OpenTofu init/plan/apply/destroy/import/state operations
            were run or claimed — plans come from pull-request checks.
            - [x] Breaking or irreversible effects are described above with rollback
            notes.
            
[REDACTED: potentially sensitive plan output]
            Security is not enabled; the committed diff was manually inspected
            before publication.
            
            AI agent materially produced this change; reviewers should confirm the
            retained no-resource bootstrap boundary and central generated-file
            ownership.
            
            ---------
            
            Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
        EOT -> null
      - commit_sha          = "315acbf8cf0411eb44c1d59ad3603724d5c15a7a" -> null
      - content             = <<-EOT
            ---
            # Managed by tfroot-github (gh-dependabot.tf); local edits are overwritten.
            name: dependabot-notify
            
            on:
              pull_request:
                types: [opened, reopened]
            
            permissions: {}
            
            jobs:
              notify:
                if: github.actor == 'dependabot[bot]'
                uses: makeitworkcloud/shared-workflows/.github/workflows/_dependabot-notify.yml@main
[REDACTED: potentially sensitive plan output]
        EOT -> null
      - file                = ".github/workflows/dependabot-notify.yml" -> null
      - id                  = "tfroot-twilio:.github/workflows/dependabot-notify.yml:main" -> null
      - overwrite_on_create = false -> null
      - ref                 = "main" -> null
      - repository          = "tfroot-twilio" -> null
      - repository_id       = 1356437102 -> null
      - sha                 = "de2725088a33d9dc3bc14f05d3a709a093709856" -> null
    }

  # github_team_repository.admins["tfroot-twilio"] will be destroyed
  # (because key ["tfroot-twilio"] is not in for_each map)
  - resource "github_team_repository" "admins" {
      - etag       = "W/\"d9f6b77d1f4eda18d975a5149b2c3f63abdf3cbbc7629ab1a3bfdac162953393\"" -> null
      - id         = "15594330:tfroot-twilio" -> null
      - permission = "admin" -> null
      - repository = "tfroot-twilio" -> null
      - team_id    = "15594330" -> null
    }

  # github_workflow_repository_permissions.release_automation will be created
  + resource "github_workflow_repository_permissions" "release_automation" {
      + can_approve_pull_request_reviews = true
      + default_workflow_permissions     = "read"
      + id                               = (known after apply)
      + repository                       = "terraform-libvirt-domain"
    }

Plan: 1 to add, 0 to change, 8 to destroy.

@xnoto

xnoto commented Sep 20, 2026

Copy link
Copy Markdown
Contributor Author

Owner approved the disclosed plan exception before merge: in addition to the eight tfroot-twilio-scoped deletions, apply may create the already-declared github_workflow_repository_permissions.release_automation resource for terraform-libvirt-domain (default_workflow_permissions=read, can_approve_pull_request_reviews=true). This is the one additional approved change; no other repository or shared-secret changes authorized. Required test and plan succeeded at cb0e84d. Provider teardown and AWS bucket/role deletion were already applied and verified. Proceeding under explicit owner approval.

@xnoto
xnoto merged commit b24c416 into main Sep 20, 2026
4 checks passed
@xnoto
xnoto deleted the chore/remove-tfroot-twilio branch September 20, 2026 03:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant