Repository: cloudposse-terraform-components/aws-argocd-github-repo
Pull request #16: Add component tests
Author: login: goruha
Labels: name: needs-test
description: Needs testing
Created: 2025-04-01T17:56:18Z | Merged: 2025-04-02T09:28:32Z

# What
* [ ] Add `basic` component test
* [ ] Add `disabled` component test
* [ ] Test component drifting
* [ ] Add any additional use case tests


# Why
* Test basic component features
* Verify that the component does not create any resources when input `enabled: false` set
* Verify that the component does not drift on a second run with the same inputs
* Add test for any additional than basic use cases for the component

# References
* [Component test writing guide](https://docs.cloudposse.com/community/contribute/component-testing/)
* [List of component tests are done](https://github.com/orgs/cloudposse-terraform-components/projects/1/views/3)


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
	- Repository and team settings now reflect a configurable enabled flag, ensuring outputs are conditionally populated.
	- Introduced new YAML configurations for ArgoCD and GitHub integration, specifying components and settings for deployment.

- **Tests**
	- Expanded test coverage with new test suites and fixtures to validate component behavior and configuration.

- **Chores**
	- Improved repository hygiene with updated ignore rules and removed redundant test scripts.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/src/main.tf b/src/main.tf
index 4056ecf..06158b3 100644
--- a/src/main.tf
+++ b/src/main.tf
@@ -14,9 +14,9 @@ locals {
 
   manifest_kubernetes_namespace = var.manifest_kubernetes_namespace
 
-  team_slugs = toset(compact([
+  team_slugs = local.enabled ? toset(compact([
     for permission in var.permissions : lookup(permission, "team_slug", null)
-  ]))
+  ])) : []
 
   team_ids = [
     for team in data.github_team.default : team.id
diff --git a/src/outputs.tf b/src/outputs.tf
index 19430b3..e737724 100644
--- a/src/outputs.tf
+++ b/src/outputs.tf
@@ -15,25 +15,25 @@ output "repository" {
 
 output "repository_description" {
   description = "Repository description"
-  value       = local.github_repository.description
+  value       = local.enabled ? local.github_repository.description : null
 }
 
 output "repository_default_branch" {
   description = "Repository default branch"
-  value       = local.github_repository.default_branch
+  value       = local.enabled ? local.github_repository.default_branch : null
 }
 
 output "repository_url" {
   description = "Repository URL"
-  value       = local.github_repository.html_url
+  value       = local.enabled ? local.github_repository.html_url : null
 }
 
 output "repository_git_clone_url" {
   description = "Repository git clone URL"
-  value       = local.github_repository.git_clone_url
+  value       = local.enabled ? local.github_repository.git_clone_url : null
 }
 
 output "repository_ssh_clone_url" {
   description = "Repository SSH clone URL"
-  value       = local.github_repository.ssh_clone_url
+  value       = local.enabled ? local.github_repository.ssh_clone_url : null
 }
diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644
index 0000000..9807fcc
--- /dev/null
+++ b/test/.gitignore
@@ -0,0 +1,5 @@
+state/
+.cache
+test/test-suite.json
+.atmos
+test_suite.yaml
diff --git a/test/component_test.go b/test/component_test.go
new file mode 100644
index 0000000..867dabf
--- /dev/null
+++ b/test/component_test.go
@@ -0,0 +1,77 @@
+package test
+
+import (
+	"context"
+	"fmt"
+	"os"
+	// "strconv"
+	"testing"
+	"strings"
+
+	helper "github.com/cloudposse/test-helpers/pkg/atmos/component-helper"
+	awsTerratest "github.com/gruntwork-io/terratest/modules/aws"
+	"github.com/gruntwork-io/terratest/modules/random"
+	"github.com/google/go-github/v70/github"
+	"github.com/stretchr/testify/assert"
+)
+
+type ComponentSuite struct {
+	helper.TestSuite
+}
+
+func (s *ComponentSuite) TestBasic() {
+	const component = "argocd-github-repo/basic"
+	const stack = "default-test"
+	const awsRegion = "us-east-2"
+	const githubOrg = "cloudposse-tests"
+
+	token := os.Getenv("GITHUB_TOKEN")
+
+	randomID := strings.ToLower(random.UniqueId())
+
+	secretPath := fmt.Sprintf("/argocd/%s/github/api_key", randomID)
+	deployKeyPath := fmt.Sprintf("/argocd/deploy_keys/%s/%s", randomID, "%s")
+	repoName := fmt.Sprintf("argocd-github-repo-%s", randomID)
+
+	defer func() {
+		awsTerratest.DeleteParameter(s.T(), awsRegion, secretPath)
+	}()
+	awsTerratest.PutParameter(s.T(), awsRegion, secretPath, "Github API Key", token)
+
+	inputs := map[string]interface{}{
+		"ssm_github_deploy_key_format": deployKeyPath,
+		"ssm_github_api_key": secretPath,
+		"name": repoName,
+		"github_organization": githubOrg,
+	}
+
+	defer s.DestroyAtmosComponent(s.T(), component, stack, &inputs)
+	options, _ := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
+	assert.NotNil(s.T(), options)
+
+	client := github.NewClient(nil).WithAuthToken(token)
+
+	// Check if the repository exists
+	repo, _, err := client.Repositories.Get(context.Background(), githubOrg, repoName)
+	assert.Nil(s.T(), err)
+	assert.NotNil(s.T(), repo)
+
+	filePath := "mgmt/uw2-sandbox/argocd/applicationset.yaml"
+	// Use the GitHub API to check if the file exists in the repository
+	_, _, _, err = client.Repositories.GetContents(context.Background(), githubOrg, repoName, filePath, nil)
+	assert.Nil(s.T(), err)
+	s.DriftTest(component, stack, &inputs)
+}
+
+func (s *ComponentSuite) TestEnabledFlag() {
+	const component = "argocd-github-repo/disabled"
+	const stack = "default-test"
+	const awsRegion = "us-east-2"
+
+	s.VerifyEnabledFlag(component, stack, nil)
+}
+
+func TestRunSuite(t *testing.T) {
+	suite := new(ComponentSuite)
+	helper.Run(t, suite)
+}
diff --git a/test/fixtures/atmos.yaml b/test/fixtures/atmos.yaml
new file mode 100644
index 0000000..214a451
--- /dev/null
+++ b/test/fixtures/atmos.yaml
@@ -0,0 +1,77 @@
+# CLI config is loaded from the following locations (from lowest to highest priority):
+# system dir (`/usr/local/etc/atmos` on Linux, `%LOCALAPPDATA%/atmos` on Windows)
+# home dir (~/.atmos)
+# current directory
+# ENV vars
+# Command-line arguments
+#
+# It supports POSIX-style Globs for file names/paths (double-star `**` is supported)
+# https://en.wikipedia.org/wiki/Glob_(programming)
+
+# Base path for components, stacks and workflows configurations.
+# Can also be set using `ATMOS_BASE_PATH` ENV var, or `--base-path` command-line argument.
+# Supports both absolute and relative paths.
+# If not provided or is an empty string, `components.terraform.base_path`, `components.helmfile.base_path`, `stacks.base_path` and `workflows.base_path`
+# are independent settings (supporting both absolute and relative paths).
+# If `base_path` is provided, `components.terraform.base_path`, `components.helmfile.base_path`, `stacks.base_path` and `workflows.base_path`
+# are considered paths relative to `base_path`.
+base_path: ""
+
+components:
+  terraform:
+    # Can also be set using `ATMOS_COMPONENTS_TERRAFORM_BASE_PATH` ENV var, or `--terraform-dir` command-line argument
+    # Supports both absolute and relative paths
+    base_path: "components/terraform"
+    # Can also be set using `ATMOS_COMPONENTS_TERRAFORM_APPLY_AUTO_APPROVE` ENV var
+    apply_auto_approve: true
+    # Can also be set using `ATMOS_COMPONENTS_TERRAFORM_DEPLOY_RUN_INIT` ENV var, or `--deploy-run-init` command-line argument
+    deploy_run_init: true
+    # Can also be set using `ATMOS_COMPONENTS_TERRAFORM_INIT_RUN_RECONFIGURE` ENV var, or `--init-run-reconfigure` command-line argument
+    init_run_reconfigure: true
+    # Can also be set using `ATMOS_COMPONENTS_TERRAFORM_AUTO_GENERATE_BACKEND_FILE` ENV var, or `--auto-generate-backend-file` command-line argument
+    auto_generate_backend_file: true
+
+stacks:
+  # Can also be set using `ATMOS_STACKS_BASE_PATH` ENV var, or `--config-dir` and `--stacks-dir` command-line arguments
+  # Supports both absolute and relative paths
+  base_path: "stacks"
+  # Can also be set using `ATMOS_STACKS_INCLUDED_PATHS` ENV var (comma-separated values string)
+  # Since we are distinguishing stacks based on namespace, and namespace is not part
+  # of the stack name, we have to set `included_paths` via the ENV var in the Dockerfile
+  included_paths:
+    - "orgs/**/*"
+
+  # Can also be set using `ATMOS_STACKS_EXCLUDED_PATHS` ENV var (comma-separated values string)
+  excluded_paths:
+    - "**/_defaults.yaml"
+
+  # Can also be set using `ATMOS_STACKS_NAME_PATTERN` ENV var
+  name_pattern: "{tenant}-{stage}"
+
+workflows:
+  # Can also be set using `ATMOS_WORKFLOWS_BASE_PATH` ENV var, or `--workflows-dir` command-line arguments
+  # Supports both absolute and relative paths
+  base_path: "stacks/workflows"
+
+# https://github.com/cloudposse/atmos/releases/tag/v1.33.0
+logs:
+  file: "/dev/stdout"
+  # Supported log levels: Trace, Debug, Info, Warning, Off
+  level: Info
+
+settings:
+  # Can also be set using 'ATMOS_SETTINGS_LIST_MERGE_STRATEGY' environment variable, or '--settings-list-merge-strategy' command-line argument
+  list_merge_strategy: replace
+
+# `Go` templates in Atmos manifests
+# https://atmos.tools/core-concepts/stacks/templating
+# https://pkg.go.dev/text/template
+templates:
+  settings:
+    enabled: true
+    # https://masterminds.github.io/sprig
+    sprig:
+      enabled: true
+    # https://docs.gomplate.ca
+    gomplate:
+      enabled: true
diff --git a/test/fixtures/stacks/catalog/account-map.yaml b/test/fixtures/stacks/catalog/account-map.yaml
new file mode 100644
index 0000000..f83f5d7
--- /dev/null
+++ b/test/fixtures/stacks/catalog/account-map.yaml
@@ -0,0 +1,46 @@
+components:
+  terraform:
+    account-map:
+      metadata:
+        terraform_workspace: core-gbl-root
+      vars:
+        tenant: core
+        environment: gbl
+        stage: root
+
+#      This remote state is only for Cloud Posse internal use.
+#      It references the Cloud Posse test organizations actual infrastructure.
+#      remote_state_backend:
+#        s3:
+#          bucket: cptest-core-ue2-root-tfstate-core
+#          dynamodb_table: cptest-core-ue2-root-tfstate-core-lock
+#          role_arn: arn:aws:iam::822777368227:role/cptest-core-gbl-root-tfstate-core-ro
+#          encrypt: true
+#          key: terraform.tfstate
+#          acl: bucket-owner-full-control
+#          region: us-east-2
+
+      remote_state_backend_type: static
+      remote_state_backend:
+        # This static backend is used for tests that only need to use the account map iam-roles module
+        # to find the role to assume for Terraform operations. It is configured to use whatever
+        # the current user's role is, but the environment variable `TEST_ACCOUNT_ID` must be set to
+        # the account ID of the account that the user is currently assuming a role in.
+        #
+        # For some components, this backend is missing important data, and those components
+        # will need that data added to the backend configuration in order to work properly.
+        static:
+          account_info_map: {}
+          all_accounts: []
+          aws_partition: aws
+          full_account_map: {}
+          iam_role_arn_templates: {}
+          non_eks_accounts: []
+          profiles_enabled: false
+          root_account_aws_name: root
+          terraform_access_map: {}
+          terraform_dynamic_role_enabled: false
+          terraform_role_name_map:
+            apply: terraform
+            plan: planner
+          terraform_roles: {}
diff --git a/test/fixtures/stacks/catalog/usecase/basic.yaml b/test/fixtures/stacks/catalog/usecase/basic.yaml
new file mode 100644
index 0000000..9c43710
--- /dev/null
+++ b/test/fixtures/stacks/catalog/usecase/basic.yaml
@@ -0,0 +1,23 @@
+components:
+  terraform:
+    argocd-github-repo/basic:
+      metadata:
+        component: target
+      vars:
+        enabled: true
+        github_user: goruha
+        github_user_email: ci@acme.com
+        github_organization: cloudposse-tests
+        github_codeowner_teams:
+          - "@cloudposse-tests/admin"
+        permissions:
+          - team_slug: admin
+            permission: admin
+        name: argocd-deploy-non-prod
+        description: "ArgoCD desired state repository (Non-production) for ACME applications"
+        environments:
+          - tenant: mgmt
+            environment: uw2
+            stage: sandbox
+            auto-sync: false
+        gitignore_entries: []
diff --git a/test/fixtures/stacks/catalog/usecase/disabled.yaml b/test/fixtures/stacks/catalog/usecase/disabled.yaml
new file mode 100644
index 0000000..732b178
--- /dev/null
+++ b/test/fixtures/stacks/catalog/usecase/disabled.yaml
@@ -0,0 +1,23 @@
+components:
+  terraform:
+    argocd-github-repo/disabled:
+      metadata:
+        component: target
+      vars:
+        enabled: false
+        github_user: ci-acme
+        github_user_email: ci@acme.com
+        github_organization: cloudposse-tests
+        github_codeowner_teams:
+          - "@cloudposse-tests/admin"
+        permissions:
+          - team_slug: admins
+            permission: admin
+        name: argocd-deploy-non-prod
+        description: "ArgoCD desired state repository (Non-production) for ACME applications"
+        environments:
+          - tenant: mgmt
+            environment: uw2
+            stage: sandbox
+            auto-sync: false
+        gitignore_entries: []
diff --git a/test/fixtures/stacks/orgs/default/test/_defaults.yaml b/test/fixtures/stacks/orgs/default/test/_defaults.yaml
new file mode 100644
index 0000000..84d0e62
--- /dev/null
+++ b/test/fixtures/stacks/orgs/default/test/_defaults.yaml
@@ -0,0 +1,66 @@
+import:
+  - catalog/account-map
+
+terraform:
+  backend_type: local
+  backend:
+    local:
+      path: '{{ getenv "COMPONENT_HELPER_STATE_DIR" | default "../../../state" }}/{{ .component }}/terraform.tfstate'
+      workspace_dir: '{{ getenv "COMPONENT_HELPER_STATE_DIR" | default "../../../state" }}/{{ .component }}/'
+  vars:
+    namespace: eg
+    tenant: default
+    environment: ue2
+    region: us-east-2
+    stage: test
+    label_order:
+      - namespace
+      - tenant
+      - environment
+      - stage
+      - name
+      - attributes
+    descriptor_formats:
+      account_name:
+        format: "%v-%v"
+        labels:
+          - tenant
+          - stage
+      stack:
+        format: "%v-%v-%v"
+        labels:
+          - tenant
+          - environment
+          - stage
+
+components:
+  terraform:
+    account-map:
+      remote_state_backend:
+        static:
+          account_info_map:
+            default-test:
+              account_email_format: aws+cptest-%s@example.com
+              eks: true
+              id: '{{ getenv "TEST_ACCOUNT_ID" | default "<TEST_ACCOUNT_ID>" }}'
+              ou: default
+              parent_ou: none
+              stage: test
+              tags:
+                eks: false
+              tenant: default
+          all_accounts:
+            - default-test
+          artifacts_account_account_name: default-test
+          audit_account_account_name: default-test
+          dns_account_account_name: default-test
+          eks_accounts:
+            - default-test
+          full_account_map:
+            default-test: '{{ getenv "TEST_ACCOUNT_ID" | default "<TEST_ACCOUNT_ID>" }}'
+          iam_role_arn_templates:
+            default-test: 'arn:aws:iam::{{ getenv "TEST_ACCOUNT_ID" | default "<TEST_ACCOUNT_ID>" }}:role/tester-%s'
+          identity_account_account_name: default-test
+          root_account_account_name: default-test
+          terraform_roles:
+            default-test: ''
diff --git a/test/fixtures/stacks/orgs/default/test/tests.yaml b/test/fixtures/stacks/orgs/default/test/tests.yaml
new file mode 100644
index 0000000..ff07d73
--- /dev/null
+++ b/test/fixtures/stacks/orgs/default/test/tests.yaml
@@ -0,0 +1,4 @@
+import:
+  - orgs/default/test/_defaults
+  - catalog/usecase/basic
+  - catalog/usecase/disabled
diff --git a/test/fixtures/vendor.yaml b/test/fixtures/vendor.yaml
new file mode 100644
index 0000000..c5ec0ee
--- /dev/null
+++ b/test/fixtures/vendor.yaml
@@ -0,0 +1,18 @@
+apiVersion: atmos/v1
+kind: AtmosVendorConfig
+metadata:
+  name: fixtures
+  description: Atmos vendoring manifest
+spec:
+  sources:
+    - component: "account-map"
+      source: github.com/cloudposse/terraform-aws-components.git//modules/account-map?ref={{.Version}}
+      version: 1.520.0
+      targets:
+        - "components/terraform/account-map"
+      included_paths:
+        - "**/*.tf"
+        - "**/*.md"
+        - "**/*.tftmpl"
+        - "**/modules/**"
+      excluded_paths: []
diff --git a/test/go.mod b/test/go.mod
new file mode 100644
index 0000000..cefd09e
--- /dev/null
+++ b/test/go.mod
@@ -0,0 +1,186 @@
+module test
+
+go 1.23.4
+
+toolchain go1.23.7
+
+require (
+	github.com/cloudposse/test-helpers v0.22.0
+	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+	github.com/gruntwork-io/terratest v0.48.2
+	github.com/mattn/go-zglob v0.0.6 // indirect
+	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+	github.com/stretchr/testify v1.10.0
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+)
+
+// replace github.com/rebuy-de/aws-nuke/v2/mocks => github.com/ekristen/aws-nuke/v3/ v3.29.0
+
+require k8s.io/apimachinery v0.32.0
+
+require (
+	dario.cat/mergo v1.0.1 // indirect
+	filippo.io/edwards25519 v1.1.0 // indirect
+	github.com/agext/levenshtein v1.2.3 // indirect
+	github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
+	github.com/aws/aws-sdk-go v1.55.5 // indirect
+	github.com/aws/aws-sdk-go-v2 v1.36.3 // indirect
+	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect
+	github.com/aws/aws-sdk-go-v2/config v1.29.6 // indirect
+	github.com/aws/aws-sdk-go-v2/credentials v1.17.59 // indirect
+	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 // indirect
+	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.61 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 // indirect
+	github.com/aws/aws-sdk-go-v2/service/acm v1.30.18 // indirect
+	github.com/aws/aws-sdk-go-v2/service/amplify v1.28.8 // indirect
+	github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/backup v1.40.10 // indirect
+	github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.47.4 // indirect
+	github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.45.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/docdb v1.40.10 // indirect
+	github.com/aws/aws-sdk-go-v2/service/dynamodb v1.40.1 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ec2 v1.203.0 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ecr v1.41.0 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ecs v1.53.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/efs v1.34.11 // indirect
+	github.com/aws/aws-sdk-go-v2/service/eks v1.60.1 // indirect
+	github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/iam v1.39.1 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.0 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/kafka v1.38.16 // indirect
+	github.com/aws/aws-sdk-go-v2/service/kms v1.37.18 // indirect
+	github.com/aws/aws-sdk-go-v2/service/lambda v1.69.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/rds v1.93.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/route53 v1.48.7 // indirect
+	github.com/aws/aws-sdk-go-v2/service/s3 v1.76.1 // indirect
+	github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sesv2 v1.41.5 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sns v1.33.19 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sqs v1.37.14 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ssm v1.56.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 // indirect
+	github.com/aws/aws-sdk-go-v2/service/wafv2 v1.58.0 // indirect
+	github.com/aws/smithy-go v1.22.2 // indirect
+	github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
+	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
+	github.com/boombuler/barcode v1.0.2 // indirect
+	github.com/cespare/xxhash/v2 v2.3.0 // indirect
+	github.com/charmbracelet/lipgloss v0.10.0 // indirect
+	github.com/charmbracelet/log v0.4.0 // indirect
+	github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
+	github.com/emicklei/go-restful/v3 v3.12.1 // indirect
+	github.com/fsnotify/fsnotify v1.8.0 // indirect
+	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
+	github.com/go-errors/errors v1.5.1 // indirect
+	github.com/go-logfmt/logfmt v0.6.0 // indirect
+	github.com/go-logr/logr v1.4.2 // indirect
+	github.com/go-openapi/jsonpointer v0.21.0 // indirect
+	github.com/go-openapi/jsonreference v0.21.0 // indirect
+	github.com/go-openapi/swag v0.23.0 // indirect
+	github.com/go-sql-driver/mysql v1.8.1 // indirect
+	github.com/gofrs/flock v0.12.1 // indirect
+	github.com/gogo/protobuf v1.3.2 // indirect
+	github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
+	github.com/golang/protobuf v1.5.4 // indirect
+	github.com/google/gnostic-models v0.6.9 // indirect
+	github.com/google/go-cmp v0.7.0 // indirect
+	github.com/google/go-github/v69 v69.2.0 // indirect
+	github.com/google/go-github/v70 v70.0.0 // indirect
+	github.com/google/go-querystring v1.1.0 // indirect
+	github.com/google/gofuzz v1.2.0 // indirect
+	github.com/google/uuid v1.6.0 // indirect
+	github.com/gruntwork-io/go-commons v0.17.2 // indirect
+	github.com/hashicorp/errwrap v1.1.0 // indirect
+	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
+	github.com/hashicorp/go-getter/v2 v2.2.3 // indirect
+	github.com/hashicorp/go-multierror v1.1.1 // indirect
+	github.com/hashicorp/go-safetemp v1.0.0 // indirect
+	github.com/hashicorp/go-version v1.7.0 // indirect
+	github.com/hashicorp/hcl v1.0.0 // indirect
+	github.com/hashicorp/hcl/v2 v2.22.0 // indirect
+	github.com/hashicorp/terraform-json v0.23.0 // indirect
+	github.com/jackc/pgpassfile v1.0.0 // indirect
+	github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
+	github.com/jackc/pgx/v5 v5.7.2 // indirect
+	github.com/jackc/puddle/v2 v2.2.2 // indirect
+	github.com/jferrl/go-githubauth v1.2.0 // indirect
+	github.com/jinzhu/copier v0.4.0 // indirect
+	github.com/jmespath/go-jmespath v0.4.0 // indirect
+	github.com/josharian/intern v1.0.0 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/klauspost/compress v1.17.11 // indirect
+	github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
+	github.com/magiconair/properties v1.8.9 // indirect
+	github.com/mailru/easyjson v0.9.0 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/mattn/go-runewidth v0.0.15 // indirect
+	github.com/mitchellh/go-homedir v1.1.0 // indirect
+	github.com/mitchellh/go-testing-interface v1.14.1 // indirect
+	github.com/mitchellh/go-wordwrap v1.0.1 // indirect
+	github.com/mitchellh/mapstructure v1.5.0 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/muesli/reflow v0.3.0 // indirect
+	github.com/muesli/termenv v0.15.2 // indirect
+	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+	github.com/pelletier/go-toml/v2 v2.2.3 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/pquerna/otp v1.4.0 // indirect
+	github.com/prometheus/client_golang v1.20.5 // indirect
+	github.com/prometheus/client_model v0.6.1 // indirect
+	github.com/prometheus/common v0.61.0 // indirect
+	github.com/prometheus/procfs v0.15.1 // indirect
+	github.com/rivo/uniseg v0.4.7 // indirect
+	github.com/russross/blackfriday/v2 v2.1.0 // indirect
+	github.com/sagikazarmark/locafero v0.7.0 // indirect
+	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+	github.com/sirupsen/logrus v1.9.3 // indirect
+	github.com/sourcegraph/conc v0.3.0 // indirect
+	github.com/spf13/afero v1.12.0 // indirect
+	github.com/spf13/cast v1.7.1 // indirect
+	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/viper v1.19.0 // indirect
+	github.com/subosito/gotenv v1.6.0 // indirect
+	github.com/tmccombs/hcl2json v0.6.4 // indirect
+	github.com/ulikunitz/xz v0.5.11 // indirect
+	github.com/urfave/cli/v2 v2.27.5 // indirect
+	github.com/x448/float16 v0.8.4 // indirect
+	github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
+	github.com/zclconf/go-cty v1.15.0 // indirect
+	go.uber.org/multierr v1.11.0 // indirect
+	golang.org/x/crypto v0.33.0 // indirect
+	golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect
+	golang.org/x/mod v0.22.0 // indirect
+	golang.org/x/net v0.35.0 // indirect
+	golang.org/x/oauth2 v0.28.0 // indirect
+	golang.org/x/sync v0.11.0 // indirect
+	golang.org/x/sys v0.30.0 // indirect
+	golang.org/x/term v0.29.0 // indirect
+	golang.org/x/text v0.22.0 // indirect
+	golang.org/x/time v0.9.0 // indirect
+	golang.org/x/tools v0.29.0 // indirect
+	google.golang.org/protobuf v1.36.1 // indirect
+	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
+	gopkg.in/inf.v0 v0.9.1 // indirect
+	gopkg.in/ini.v1 v1.67.0 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
+	k8s.io/api v0.32.0 // indirect
+	k8s.io/client-go v0.32.0 // indirect
+	k8s.io/klog/v2 v2.130.1 // indirect
+	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
+	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
+	sigs.k8s.io/aws-iam-authenticator v0.6.30 // indirect
+	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
+	sigs.k8s.io/yaml v1.4.0 // indirect
+)
diff --git a/test/go.sum b/test/go.sum
new file mode 100644
index 0000000..dbb773c
--- /dev/null
+++ b/test/go.sum
@@ -0,0 +1,422 @@
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
+github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
+github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
+github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
+github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
+github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
+github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
+github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 h1:zAxi9p3wsZMIaVCdoiQp2uZ9k1LsZvmAnoTBeZPXom0=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8/go.mod h1:3XkePX5dSaxveLAYY7nsbsZZrKxCyEuE5pM4ziFxyGg=
+github.com/aws/aws-sdk-go-v2/config v1.29.6 h1:fqgqEKK5HaZVWLQoLiC9Q+xDlSp+1LYidp6ybGE2OGg=
+github.com/aws/aws-sdk-go-v2/config v1.29.6/go.mod h1:Ft+WLODzDQmCTHDvqAH1JfC2xxbZ0MxpZAcJqmE1LTQ=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.59 h1:9btwmrt//Q6JcSdgJOLI98sdr5p7tssS9yAsGe8aKP4=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.59/go.mod h1:NM8fM6ovI3zak23UISdWidyZuI1ghNe2xjzUZAyT+08=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 h1:KwsodFKVQTlI5EyhRSugALzsV6mG/SGrdjlMXSZSdso=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28/go.mod h1:EY3APf9MzygVhKuPXAc5H+MkGb8k/DOSQjWS0LgkKqI=
+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.61 h1:BBIPjlEWLxX1huGTkBu/eeqyaXC0pVwDCYbQuE/JPfU=
+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.61/go.mod h1:6dkLZQM1D/wKKFJEvyB1OCXJ0f68wcIPDOiXm0KyT8A=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 h1:OIHj/nAhVzIXGzbAE+4XmZ8FPvro3THr6NlqErJc3wY=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32/go.mod h1:LiBEsDo34OJXqdDlRGsilhlIiXR7DL+6Cx2f4p1EgzI=
+github.com/aws/aws-sdk-go-v2/service/acm v1.30.18 h1:/MZpjVk95P+lF9dUcOmyQwp1r0Ld4A8AxfQLdf1w8bU=
+github.com/aws/aws-sdk-go-v2/service/acm v1.30.18/go.mod h1:JaIJpS5R/ADAyK2gGYcQSmpMyty24/nLxvwsPe629BI=
+github.com/aws/aws-sdk-go-v2/service/amplify v1.28.8 h1:wg7HSb3XnRAcom2v3nqxyAhmySVwKkHIkaUiEIbV6vc=
+github.com/aws/aws-sdk-go-v2/service/amplify v1.28.8/go.mod h1:d0nnjwZRjEV9f6I8PEbBv0o3xjzVNLvlOYVxQs+FeEw=
+github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 h1:Bfz5hDqAgm9NByWdA0zfof70CVkjb6SE3RwU75lj66Y=
+github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12/go.mod h1:+yg2Ygx7ParYfxoo1CLHzqD1zcmWuKNDfxuB8CrOx44=
+github.com/aws/aws-sdk-go-v2/service/backup v1.40.10 h1:/qkt3SKl7VUI48CV47dMdJGte/kg6YIs9HGucKRomY4=
+github.com/aws/aws-sdk-go-v2/service/backup v1.40.10/go.mod h1:Vdu4P8UrQhIh69PlgCuJFVicDJgy4Z6i0lAEpJLBw2Q=
+github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.47.4 h1:4hiC8jzPP89L+MTljvKs1LLC12gKJLMJwysjOrbJz1E=
+github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.47.4/go.mod h1:Kj+z0vXRl21DsnPR+lA5DjVWCaRTvAmwQ/shTGHeY84=
+github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.45.12 h1:B7P9U6OmFa+TEnpny4JpWnYBkBfMMU592fomNZxVIc0=
+github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.45.12/go.mod h1:omuyZE5hIJGMRTWvXfRPdEy85w4exm5e65/4ExTibJw=
+github.com/aws/aws-sdk-go-v2/service/docdb v1.40.10 h1:M+Pc9FI5Inm5P7IisViLbw8tnLyTvteTeuwN0mWPX8U=
+github.com/aws/aws-sdk-go-v2/service/docdb v1.40.10/go.mod h1:T0Kj3lj/4DSrtuqAt0yFLbhv5qydUgXEuL8enHpxpcg=
+github.com/aws/aws-sdk-go-v2/service/dynamodb v1.40.1 h1:JUvURAe0mNRzYd+1uTHEiojeyWtNPIQ5EXnDKfgKGUU=
+github.com/aws/aws-sdk-go-v2/service/dynamodb v1.40.1/go.mod h1:FcMiR2AALpkrpik6JzbYu+iEfktzrs3XOq5Shk9nvik=
+github.com/aws/aws-sdk-go-v2/service/ec2 v1.203.0 h1:EDLBXOs5D0KUqDThg8ID63mK5E7lJ8pjHGBtix6O9j0=
+github.com/aws/aws-sdk-go-v2/service/ec2 v1.203.0/go.mod h1:nSbxgPGhyI9j/cMVSHUEEtNQzEYeNOkbHnHNeTuQqt0=
+github.com/aws/aws-sdk-go-v2/service/ecr v1.41.0 h1:PNluoO7Sh1myhX+6MiAUpFk46fG6827K4U+KrtUT3s8=
+github.com/aws/aws-sdk-go-v2/service/ecr v1.41.0/go.mod h1:dtD3a4sjUjVL86e0NUvaqdGvds5ED6itUiZPDaT+Gh8=
+github.com/aws/aws-sdk-go-v2/service/ecs v1.53.13 h1:Q16+YitA+4nt8Iv+37l1Yav2ejlDb9umjJrEmX/3Xj4=
+github.com/aws/aws-sdk-go-v2/service/ecs v1.53.13/go.mod h1:X4pNdZOGNt0sWAErA0rQfrcl8NCoqDwAWtPa94bAafM=
+github.com/aws/aws-sdk-go-v2/service/efs v1.34.11 h1:PgeGNM3l3fg7UlFpIFEogySDrYsAeMVePZcHJJw5eVo=
+github.com/aws/aws-sdk-go-v2/service/efs v1.34.11/go.mod h1:pH1iibM/aigOyMTkB9RFdGDXbofNRaLzh1qoh2fIp6E=
+github.com/aws/aws-sdk-go-v2/service/eks v1.60.1 h1:Q5YEz2N233+N2rKuPF5qO0OR0qp69BnukHRmrnMjV0c=
+github.com/aws/aws-sdk-go-v2/service/eks v1.60.1/go.mod h1:v1xXy6ea0PHtWkjFUvAUh6B/5wv7UF909Nru0dOIJDk=
+github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 h1:PLoBTtHl376mmxe5NSMUx1UD8yiM+BgIi9yJ1SgibHk=
+github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12/go.mod h1:h7JSZfD6QGeaAWpTk0+e1hQw2Venf5gh7UlUTEAiZL8=
+github.com/aws/aws-sdk-go-v2/service/iam v1.39.1 h1:N4OauekXigX0GgsJ+FUm7OO5HkrJR0ByZJ2YS5PIy3U=
+github.com/aws/aws-sdk-go-v2/service/iam v1.39.1/go.mod h1:8rUmP3N5TJXWWEzdQ+2Tc1IELc97pxBt5Zbt4QLq7KI=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.0 h1:kT2WeWcFySdYpPgyqJMSUE7781Qucjtn6wBvrgm9P+M=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.0/go.mod h1:WYH1ABybY7JK9TITPnk6ZlP7gQB8psI4c9qDmMsnLSA=
+github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.13 h1:eWoHfLIzYeUtJEuoUmD5PwTE+fLaIPN9NZ7UXd9CW0s=
+github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.13/go.mod h1:x5t8Ve0J7JK9VHKSPSRAdBrWAgr/5hH3UeCFMLoyUGQ=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 h1:SYVGSFQHlchIcy6e7x12bsrxClCXSP5et8cqVhL8cuw=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13/go.mod h1:kizuDaLX37bG5WZaoxGPQR/LNFXpxp0vsUnqfkWXfNE=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 h1:OBsrtam3rk8NfBEq7OLOMm5HtQ9Yyw32X4UQMya/wjw=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13/go.mod h1:3U4gFA5pmoCOja7aq4nSaIAGbaOHv2Yl2ug018cmC+Q=
+github.com/aws/aws-sdk-go-v2/service/kafka v1.38.16 h1:r1mu+ZsoNt+3AuqYMyG2JoMkt6pYhfrzY34ENMVm6Uc=
+github.com/aws/aws-sdk-go-v2/service/kafka v1.38.16/go.mod h1:HLgqO1+m+EYx7ldJjwYSMwOHV1+RPsIVBtpsv3MM/zI=
+github.com/aws/aws-sdk-go-v2/service/kms v1.37.18 h1:pi9M/9n1PLayBXjia7LfwgXwcpFdFO7Q2cqKOZa1ZmM=
+github.com/aws/aws-sdk-go-v2/service/kms v1.37.18/go.mod h1:vZXvmzfhdsPj/axc8+qk/2fSCP4hGyaZ1MAduWEHAxM=
+github.com/aws/aws-sdk-go-v2/service/lambda v1.69.12 h1:9L6sXmGtRvBFzgf14G4EwlGrFkhltigC3fbGIqZ5g+c=
+github.com/aws/aws-sdk-go-v2/service/lambda v1.69.12/go.mod h1:LUkuzqAgjdxkq+UiBnOs/z5LOGoFyEkeVKxeVXB+Rt8=
+github.com/aws/aws-sdk-go-v2/service/rds v1.93.12 h1:6vjEcP08FsczK2J55oxnbYC4UZ4UBDCBW+rBFtK0H/c=
+github.com/aws/aws-sdk-go-v2/service/rds v1.93.12/go.mod h1:oOqXBxRebL78/MgTi1EoBer+a3Myg0Wr2nO1qG881kM=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.48.7 h1:oPqYaMfI6XYKXD5jlJ4JHipkKcA2Ska3JLLz11ukf0E=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.48.7/go.mod h1:DFFR1FKSHaBJZF2eMW+6PsSg97pldSoHQnRx4tH2Mek=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.76.1 h1:d4ZG8mELlLeUWFBMCqPtRfEP3J6aQgg/KTC9jLSlkMs=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.76.1/go.mod h1:uZoEIR6PzGOZEjgAZE4hfYfsqK2zOHhq68JLKEvvXj4=
+github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 h1:U/gg5eOAPx9vzip9A6cQ2GkIAPBthHMaKDfZ/WWEuj0=
+github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18/go.mod h1:ul2OTb6zT/dpZX/2bxKVwa6eIDBBlPNuau9uZuIoRAI=
+github.com/aws/aws-sdk-go-v2/service/sesv2 v1.41.5 h1:4Axfv4Ytz7gMiAigzbS3NXWcXRFFHBZB8vFcG7oYRsk=
+github.com/aws/aws-sdk-go-v2/service/sesv2 v1.41.5/go.mod h1:taGBqRDPFzem7/4UB0O8Sua9i1gRXg9fEWgUMKXeunA=
+github.com/aws/aws-sdk-go-v2/service/sns v1.33.19 h1:ghgWtf6FnkD6YqDUq65Zg5lzQ92xADHBoJdWUyChiFw=
+github.com/aws/aws-sdk-go-v2/service/sns v1.33.19/go.mod h1:/TQAkYgLlLoH1/2Y9qgaE460iPWhdq67emlW/ue42U8=
+github.com/aws/aws-sdk-go-v2/service/sqs v1.37.14 h1:KSVbQW2umLp7i4Lo6mvBUz5PqV+Ze/IL6LCTasxQWEk=
+github.com/aws/aws-sdk-go-v2/service/sqs v1.37.14/go.mod h1:jiaEkIw2Bb6IsoY9PDAZqVXJjNaKSxQGGj10CiloDWU=
+github.com/aws/aws-sdk-go-v2/service/ssm v1.56.12 h1:EKEY56SQTqEsOuh68B8YVqmsLJ1nuwUGYyKImyo+0ug=
+github.com/aws/aws-sdk-go-v2/service/ssm v1.56.12/go.mod h1:I/j1db6MPxBp7vcVrRAh+u+vERu79MWoyhoSjRaDl9E=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 h1:/eE3DogBjYlvlbhd2ssWyeuovWunHLxfgw3s/OJa4GQ=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.15/go.mod h1:2PCJYpi7EKeA5SkStAmZlF6fi0uUABuhtF8ILHjGc3Y=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 h1:M/zwXiL2iXUrHputuXgmO94TVNmcenPHxgLXLutodKE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14/go.mod h1:RVwIw3y/IqxC2YEXSIkAzRDdEU1iRabDPaYjpGCbCGQ=
+github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 h1:TzeR06UCMUq+KA3bDkujxK1GVGy+G8qQN/QVYzGLkQE=
+github.com/aws/aws-sdk-go-v2/service/sts v1.33.14/go.mod h1:dspXf/oYWGWo6DEvj98wpaTeqt5+DMidZD0A9BYTizc=
+github.com/aws/aws-sdk-go-v2/service/wafv2 v1.58.0 h1:vJfgEyoSRn0E7Z3SwnXgA04xbp6/MiTFOE5Ypw/lbXw=
+github.com/aws/aws-sdk-go-v2/service/wafv2 v1.58.0/go.mod h1:Zai6/lANvFn0uX9OKqPGy4C9a7TIcbnlzzM1EHTd3kE=
+github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ=
+github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
+github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
+github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=
+github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/boombuler/barcode v1.0.2 h1:79yrbttoZrLGkL/oOI8hBrUKucwOL0oOjUgEguGMcJ4=
+github.com/boombuler/barcode v1.0.2/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/charmbracelet/lipgloss v0.10.0 h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s=
+github.com/charmbracelet/lipgloss v0.10.0/go.mod h1:Wig9DSfvANsxqkRsqj6x87irdy123SR4dOXlKa91ciE=
+github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=
+github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM=
+github.com/cloudposse/test-helpers v0.21.1-0.20250317131037-7efa78ac9b05 h1:UqFp98DP9KIeXt+zF9EyGR0n7DIgA2QA1kZAi4HC8LM=
+github.com/cloudposse/test-helpers v0.21.1-0.20250317131037-7efa78ac9b05/go.mod h1:tNTOP4YcKyhs9+xm/FxLQiVyacK3EZ/KkWJLOpCqA18=
+github.com/cloudposse/test-helpers v0.22.0 h1:oxCysvwKpBA8H6IvcWQxId7Cx0D6NRJ2Dw+7vsTJW+Q=
+github.com/cloudposse/test-helpers v0.22.0/go.mod h1:UmmPgiLL44aJe9E98xXFn+y5aybGsU4l6pJ3iQZvmJ0=
+github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=
+github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
+github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
+github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
+github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
+github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
+github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
+github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
+github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
+github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
+github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
+github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
+github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
+github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
+github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
+github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
+github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
+github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
+github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
+github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
+github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
+github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
+github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
+github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
+github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
+github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/go-github/v69 v69.2.0 h1:wR+Wi/fN2zdUx9YxSmYE0ktiX9IAR/BeePzeaUUbEHE=
+github.com/google/go-github/v69 v69.2.0/go.mod h1:xne4jymxLR6Uj9b7J7PyTpkMYstEMMwGZa0Aehh1azM=
+github.com/google/go-github/v70 v70.0.0 h1:/tqCp5KPrcvqCc7vIvYyFYTiCGrYvaWoYMGHSQbo55o=
+github.com/google/go-github/v70 v70.0.0/go.mod h1:xBUZgo8MI3lUL/hwxl3hlceJW1U8MVnXP3zUyI+rhQY=
+github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gruntwork-io/go-commons v0.17.2 h1:14dsCJ7M5Vv2X3BIPKeG9Kdy6vTMGhM8L4WZazxfTuY=
+github.com/gruntwork-io/go-commons v0.17.2/go.mod h1:zs7Q2AbUKuTarBPy19CIxJVUX/rBamfW8IwuWKniWkE=
+github.com/gruntwork-io/terratest v0.48.2 h1:+VwfODchq8jxZZWD+s8gBlhD1z6/C4bFLNrhpm9ONrs=
+github.com/gruntwork-io/terratest v0.48.2/go.mod h1:Y5ETyD4ZQ2MZhasPno272fWuCpKwvTPYDi8Y0tIMqTE=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
+github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
+github.com/hashicorp/go-getter/v2 v2.2.3 h1:6CVzhT0KJQHqd9b0pK3xSP0CM/Cv+bVhk+jcaRJ2pGk=
+github.com/hashicorp/go-getter/v2 v2.2.3/go.mod h1:hp5Yy0GMQvwWVUmwLs3ygivz1JSLI323hdIE9J9m7TY=
+github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
+github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
+github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=
+github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=
+github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
+github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/hcl/v2 v2.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M=
+github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
+github.com/hashicorp/terraform-json v0.23.0 h1:sniCkExU4iKtTADReHzACkk8fnpQXrdD2xoR+lppBkI=
+github.com/hashicorp/terraform-json v0.23.0/go.mod h1:MHdXbBAbSg0GvzuWazEGKAn/cyNfIB7mN6y7KJN6y2c=
+github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
+github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
+github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
+github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
+github.com/jackc/pgx/v5 v5.7.2 h1:mLoDLV6sonKlvjIEsV56SkWNCnuNv531l94GaIzO+XI=
+github.com/jackc/pgx/v5 v5.7.2/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ=
+github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
+github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
+github.com/jferrl/go-githubauth v1.2.0 h1:K138gEpO2e/yBf6OI5Vb7+0xgZZa7N7/su/iAAG0ieU=
+github.com/jferrl/go-githubauth v1.2.0/go.mod h1:mglSJcfvt4HSvuzQKYx4vkvi1PtlMj88m2gz660QuC0=
+github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
+github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
+github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
+github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
+github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
+github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
+github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
+github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
+github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
+github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
+github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-zglob v0.0.6 h1:mP8RnmCgho4oaUYDIDn6GNxYk+qJGUs8fJLn+twYj2A=
+github.com/mattn/go-zglob v0.0.6/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
+github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
+github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
+github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
+github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
+github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
+github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
+github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
+github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
+github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
+github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pquerna/otp v1.4.0 h1:wZvl1TIVxKRThZIBiwOOHOGP/1+nZyWBil9Y2XNEDzg=
+github.com/pquerna/otp v1.4.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
+github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
+github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ=
+github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s=
+github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
+github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
+github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
+github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
+github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
+github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
+github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
+github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
+github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
+github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
+github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
+github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
+github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
+github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
+github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
+github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
+github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
+github.com/tmccombs/hcl2json v0.6.4 h1:/FWnzS9JCuyZ4MNwrG4vMrFrzRgsWEOVi+1AyYUVLGw=
+github.com/tmccombs/hcl2json v0.6.4/go.mod h1:+ppKlIW3H5nsAsZddXPy2iMyvld3SHxyjswOZhavRDk=
+github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
+github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
+github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
+github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
+github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
+github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
+github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
+github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ=
+github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
+github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
+github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
+golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
+golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY=
+golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
+golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
+golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
+golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
+golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
+golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
+golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
+golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
+golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
+golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
+golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
+golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
+golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
+google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
+gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+k8s.io/api v0.32.0 h1:OL9JpbvAU5ny9ga2fb24X8H6xQlVp+aJMFlgtQjR9CE=
+k8s.io/api v0.32.0/go.mod h1:4LEwHZEf6Q/cG96F3dqR965sYOfmPM7rq81BLgsE0p0=
+k8s.io/apimachinery v0.32.0 h1:cFSE7N3rmEEtv4ei5X6DaJPHHX0C+upp+v5lVPiEwpg=
+k8s.io/apimachinery v0.32.0/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
+k8s.io/client-go v0.32.0 h1:DimtMcnN/JIKZcrSrstiwvvZvLjG0aSxy8PxN8IChp8=
+k8s.io/client-go v0.32.0/go.mod h1:boDWvdM1Drk4NJj/VddSLnx59X3OPgwrOo0vGbtq9+8=
+k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
+k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
+k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/aws-iam-authenticator v0.6.30 h1:TtN7AXLH/ugoM8Nfb5ngSu57PDUh5GVpM19eer4mMYg=
+sigs.k8s.io/aws-iam-authenticator v0.6.30/go.mod h1:zcSm4YLd6eXEIjhX9TegLSxoBrbEaAJH/Of49GECjmk=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/test/run.sh b/test/run.sh
deleted file mode 100755
index 15e077f..0000000
--- a/test/run.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-echo "hello tests"


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 3**

<details>
<summary>🧹 Nitpick comments (6)</summary><blockquote>

<details>
<summary>test/go.mod (1)</summary><blockquote>

`17-18`: **Consider uncommenting the replace directive if needed**

The replace directive is commented out. If it's necessary for the tests to function correctly, consider uncommenting it.

```diff
-// replace github.com/rebuy-de/aws-nuke/v2/mocks => github.com/ekristen/aws-nuke/v3/ v3.29.0
+replace github.com/rebuy-de/aws-nuke/v2/mocks => github.com/ekristen/aws-nuke/v3/ v3.29.0
```

</blockquote></details>
<details>
<summary>test/component_test.go (2)</summary><blockquote>

`6-8`: **Remove or use commented imports**

There are commented-out imports that should be removed if they're not needed to keep the code clean.

```diff
import (
	"fmt"
	"os"
-	// "strconv"
	"testing"
	"strings"

	helper "github.com/cloudposse/test-helpers/pkg/atmos/component-helper"
	awsTerratest "github.com/gruntwork-io/terratest/modules/aws"
	"github.com/gruntwork-io/terratest/modules/random"
-	// "github.com/jferrl/go-githubauth"
	"github.com/stretchr/testify/assert"
)
```


Also applies to: 13-14

---

`48-54`: **Remove unused constant**

The `awsRegion` constant is defined but never used in this test method.

```diff
func (s *ComponentSuite) TestEnabledFlag() {
	const component = "argocd-github-repo/disabled"
	const stack = "default-test"
-	const awsRegion = "us-east-2"

	s.VerifyEnabledFlag(component, stack, nil)
}
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

51-51: const `awsRegion` is unused

(unused)

</details>

</details>

</blockquote></details>
<details>
<summary>test/fixtures/atmos.yaml (3)</summary><blockquote>

`11-18`: **Clear Base Path Configuration.**  
The `base_path` setting is well-documented with fallback options via environment variables and command-line arguments. Verify that the default empty string (`""`) behaves as expected across dependent configurations.

---

`34-50`: **Comprehensive Stacks Configuration.**  
The stacks block clearly defines the base path, included/excluded paths, and naming patterns. Consider reviewing whether additional validations or defaults are needed for the path arrays to keep stack selection robust.

---

`56-61`: **Effective Log Settings.**  
Defining the log file as `/dev/stdout` and specifying the log level (Info) are practical defaults. If dynamic log level configuration is later needed, consider exposing an override via environment variables.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 9100bfa63fc4c36d556f224730c8ba7d8bdbb835 and 406c6525d9f6c01afc763b2d84f4e27ed2a8d463.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `test/go.sum` is excluded by `!**/*.sum`

</details>

<details>
<summary>📒 Files selected for processing (13)</summary>

* `src/main.tf` (1 hunks)
* `src/outputs.tf` (1 hunks)
* `test/.gitignore` (1 hunks)
* `test/component_test.go` (1 hunks)
* `test/fixtures/atmos.yaml` (1 hunks)
* `test/fixtures/stacks/catalog/account-map.yaml` (1 hunks)
* `test/fixtures/stacks/catalog/usecase/basic.yaml` (1 hunks)
* `test/fixtures/stacks/catalog/usecase/disabled.yaml` (1 hunks)
* `test/fixtures/stacks/orgs/default/test/_defaults.yaml` (1 hunks)
* `test/fixtures/stacks/orgs/default/test/tests.yaml` (1 hunks)
* `test/fixtures/vendor.yaml` (1 hunks)
* `test/go.mod` (1 hunks)
* `test/run.sh` (0 hunks)

</details>

<details>
<summary>💤 Files with no reviewable changes (1)</summary>

* test/run.sh

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

<details>
<summary>test/component_test.go</summary>

51-51: const `awsRegion` is unused

(unused)

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (2)</summary>

* GitHub Check: Mergify Merge Protections
* GitHub Check: Summary

</details>

<details>
<summary>🔇 Additional comments (22)</summary><blockquote>

<details>
<summary>test/.gitignore (1)</summary>

`1-6`: **.gitignore entries are well-defined.**  
The new `.gitignore` file correctly ignores common temporary and state files (such as the `state/` directory, `.cache`, and test output files) that should not be tracked in version control. Please double-check that these patterns do not conflict with any global or repository-level `.gitignore` settings.

</details>
<details>
<summary>test/fixtures/stacks/orgs/default/test/tests.yaml (1)</summary>

`1-5`: **Import configuration is clear and structured.**  
The YAML file cleanly imports the defaults and test use cases for both the basic and disabled scenarios. Verify that the imported paths (`orgs/default/test/_defaults`, `catalog/usecase/basic`, and `catalog/usecase/disabled`) exist and match the intended structure in your repository.

</details>
<details>
<summary>test/fixtures/stacks/catalog/account-map.yaml (1)</summary>

`1-47`: **Account-map configuration is comprehensive.**  
This new YAML configuration clearly outlines the component definition for the Terraform account-map, including metadata, variables, and a remote state backend setup. The detailed inline comments provide valuable context regarding the purpose and limitations of the static backend. If future enhancements are needed, consider adding a small example or further documentation for end users.

</details>
<details>
<summary>test/fixtures/vendor.yaml (1)</summary>

`1-19`: **Atmos Vendor Configuration is clear and appropriately versioned.**  
The manifest defines the Atmos vendor configuration with a clear source, version, and inclusion patterns for relevant files. Make sure that the component path and version (`1.520.0`) are up-to-date and continue to align with the expectations in your testing framework.

</details>
<details>
<summary>test/fixtures/stacks/catalog/usecase/disabled.yaml (1)</summary>

`1-23`: **LGTM: Configuration for disabled test case is well-structured**

The configuration properly sets `enabled: false` which is crucial for testing that no resources are created when the component is disabled, aligning perfectly with one of the PR objectives.

</details>
<details>
<summary>test/fixtures/stacks/catalog/usecase/basic.yaml (1)</summary>

`1-23`: **LGTM: Basic test configuration looks good**

The configuration correctly sets `enabled: true` and provides all necessary parameters for testing the basic functionality of the component, which aligns with the PR objective to test basic features.

</details>
<details>
<summary>test/fixtures/stacks/orgs/default/test/_defaults.yaml (1)</summary>

`1-66`: **LGTM: Test environment setup looks comprehensive**

The configuration provides all necessary components for a proper test environment, including backend configuration, variables, and account mappings. The use of environment variables for dynamic values is a good practice.

</details>
<details>
<summary>test/component_test.go (2)</summary>

`21-46`: **LGTM: Basic test implementation looks good**

The test properly sets up the environment, handles GitHub token securely, ensures proper cleanup using defer, and performs drift testing. This implementation satisfies the PR objective for basic component testing.

---

`48-54`: **LGTM: Enabled flag test implementation is appropriate**

This test verifies that no resources are created when the component is disabled (`enabled: false`), which satisfies one of the PR objectives.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

51-51: const `awsRegion` is unused

(unused)

</details>

</details>

</details>
<details>
<summary>test/fixtures/atmos.yaml (5)</summary>

`1-10`: **Great File Header & Documentation!**  
The initial comments concisely explain the configuration loading order and support for POSIX-style globs. The documentation here is clear and sets a solid context for users.

---

`20-33`: **Well-Structured Components Block.**  
The Terraform components configuration is detailed and includes settings for auto-approval, initialization, and backend file generation. This block is thorough and follows best practices.

---

`51-55`: **Concise Workflows Configuration.**  
The workflows block is short and consistent with the structure used in other sections. No issues found.

---

`62-65`: **Straightforward Settings Block.**  
The merge strategy for lists is clearly set here. This simplicity aids maintainability.

---

`66-78`: **Robust Templates Configuration.**  
The templates section is comprehensive, enabling both Sprig and Gomplate utilities. Links to documentation embedded in the comments enhance the readability and utility for users updating or auditing these options.

</details>
<details>
<summary>src/outputs.tf (8)</summary>

`1-4`: **Deploy Keys SSM Paths Output.**  
The output for `deploy_keys_ssm_paths` correctly references `module.store_write.names`. The configuration appears sound and maintains consistency with expected outputs.

---

`6-10`: **Deploy Keys SSM Path Format Output.**  
Using the ternary operator to conditionally output `var.ssm_github_deploy_key_format` when enabled (and `null` otherwise) is clear and appropriate for managing the state.

---

`11-15`: **Repository Name Output with Dual Conditionals.**  
The output for `repository` combines `local.enabled` and `var.create_repo` effectively—falling back to `var.name` when necessary. This layered condition ensures that repository naming remains consistent based on the creation flag.

---

`16-19`: **Improved Repository Description Output.**  
The change to conditionally return `local.github_repository.description` only when `local.enabled` is true is a smart move for preventing misconfiguration.

---

`21-25`: **Consistent Repository Default Branch Output.**  
The updated logic for `repository_default_branch` mirrors the pattern seen elsewhere, ensuring consistency. It cleanly prevents exposing branch details when the repository is disabled.

---

`26-30`: **Conditional Repository URL Output.**  
Applying the condition `local.enabled ? local.github_repository.html_url : null` ensures that the repository URL is only output when applicable, which helps avoid leaking stale or irrelevant data.

---

`31-35`: **Refined Git Clone URL Output.**  
The output for `repository_git_clone_url` conditionally outputs the URL based on `local.enabled`, maintaining coherence with other conditional outputs.

---

`36-40`: **Secure SSH Clone URL Output.**  
The conditional assignment for `repository_ssh_clone_url` helps ensure that sensitive SSH details are only provided when the repository is enabled, safeguarding against unintended exposure.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-01T18:09:03Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🧹 Nitpick comments (3)</summary><blockquote>

<details>
<summary>test/component_test.go (3)</summary><blockquote>

`6-7`: **Remove commented-out imports.**

There are unused commented imports that should be removed to improve code cleanliness and maintainability.

```diff
import (
	"fmt"
	"os"
-	// "strconv"
	"testing"
	"strings"

	helper "github.com/cloudposse/test-helpers/pkg/atmos/component-helper"
	awsTerratest "github.com/gruntwork-io/terratest/modules/aws"
	"github.com/gruntwork-io/terratest/modules/random"
-	// "github.com/jferrl/go-githubauth"
	"github.com/stretchr/testify/assert"
)
```


Also applies to: 13-13

---

`26-26`: **Add GitHub token validation.**

The test retrieves the GitHub token from environment variables but doesn't validate if it exists. Without this check, the test might fail in unexpected ways if the token is missing.

```diff
token := os.Getenv("GITHUB_TOKEN")
+if token == "" {
+	s.T().Fatal("GITHUB_TOKEN environment variable must be set")
+}
```

---

`50-54`: **Remove unused awsRegion constant.**

The awsRegion constant is defined but never used in this method, as confirmed by static analysis.

```diff
func (s *ComponentSuite) TestEnabledFlag() {
	const component = "argocd-github-repo/disabled"
	const stack = "default-test"
-	const awsRegion = "us-east-2"

	s.VerifyEnabledFlag(component, stack, nil)
}
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

53-53: const `awsRegion` is unused

(unused)

</details>

</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 406c6525d9f6c01afc763b2d84f4e27ed2a8d463 and d2429e0a63ca9f4be8d319dbb87d2b470c9b67a6.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `test/component_test.go` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

<details>
<summary>test/component_test.go</summary>

53-53: const `awsRegion` is unused

(unused)

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (3)</summary>

* GitHub Check: Mergify Merge Protections
* GitHub Check: Mergify Merge Protections
* GitHub Check: Summary

</details>

<details>
<summary>🔇 Additional comments (3)</summary><blockquote>

<details>
<summary>test/component_test.go (3)</summary>

`21-48`: **Well-implemented basic component test.**

The TestBasic method properly tests the core functionality with appropriate setup and cleanup:
1. Creates a randomized resource name for isolation
2. Sets up and tears down AWS SSM parameters
3. Deploys the component with the required inputs
4. Performs a drift test to verify idempotency

This successfully implements the "basic component test" and "drift test" requirements from the PR objectives.

---

`50-56`: **Properly implemented disabled component test.**

The TestEnabledFlag method correctly uses the helper's VerifyEnabledFlag method to test that no resources are created when the component is disabled, satisfying the "disabled component test" requirement from the PR objectives.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

53-53: const `awsRegion` is unused

(unused)

</details>

</details>

---

`58-61`: **Correct test suite setup.**

The TestRunSuite function properly initializes and runs the test suite using the helper library's Run function, following Go testing best practices.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-02T08:27:32Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (7)</summary><blockquote>

<details>
<summary>test/component_test.go (7)</summary><blockquote>

`7-7`: **Remove the commented-out import.**

The import for "strconv" is commented out but not used anywhere in the code. Clean up by removing this unused import.

```diff
-	// "strconv"
```

---

`28-29`: **Add validation for required environment variables.**

The code retrieves the GitHub token from environment variables but doesn't check if it exists. This could lead to cryptic errors later if the token is missing.

```diff
 	token := os.Getenv("GITHUB_TOKEN")
+	if token == "" {
+		s.T().Fatal("GITHUB_TOKEN environment variable is required but not set")
+	}
```

---

`52-53`: **Use a custom HTTP client with timeout for GitHub API calls.**

The default HTTP client used by the GitHub client doesn't have a timeout set, which could lead to hanging tests if the GitHub API is unresponsive.

```diff
-	client := github.NewClient(nil).WithAuthToken(token)
+	import "net/http"
+	import "time"
+
+	httpClient := &http.Client{
+		Timeout: time.Second * 30,
+	}
+	client := github.NewClient(httpClient).WithAuthToken(token)
```

---

`69-69`: **Remove unused constant.**

The `awsRegion` constant is declared but never used in the TestEnabledFlag method.

```diff
-	const awsRegion = "us-east-2"
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

69-69: const `awsRegion` is unused

(unused)

</details>

</details>

---

`62-64`: **Move drift test before GitHub API calls for better test organization.**

The drift test is performed after the GitHub API tests, which doesn't follow a logical test progression. Consider moving the drift test to be executed immediately after the deployment to maintain a clearer test workflow.

```diff
-	assert.Nil(s.T(), err)
-	s.DriftTest(component, stack, &inputs)
+	assert.Nil(s.T(), err)
+
+	// Verify that there's no drift after deployment
+	s.DriftTest(component, stack, &inputs)
```

---

`22-64`: **Add test for the repository visibility setting.**

The test creates a GitHub repository but doesn't verify if it's created with the correct visibility setting (public/private). Consider adding an assertion to verify this important property.

```diff
 	assert.NotNil(s.T(), repo)
+	
+	// Verify repository visibility (assuming the default is private)
+	assert.Equal(s.T(), "private", *repo.Visibility, "Repository should be private by default")
```

---

`41-47`: **Consider parameterizing test inputs for better testability.**

Current test inputs are hardcoded in the test function. Consider extracting these into a separate function or struct that can be reused or modified for different test scenarios.

This would make it easier to create variations of the test with different inputs, such as testing with different repository settings or organizations. Consider creating a helper function that returns the test inputs with optional overrides.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between d2429e0a63ca9f4be8d319dbb87d2b470c9b67a6 and 6f129406d72c555025b18919b2dc957c983059da.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `test/go.sum` is excluded by `!**/*.sum`

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `test/component_test.go` (1 hunks)
* `test/go.mod` (1 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* test/go.mod

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🪛 golangci-lint (1.64.8)</summary>

<details>
<summary>test/component_test.go</summary>

69-69: const `awsRegion` is unused

(unused)

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (3)</summary>

* GitHub Check: Mergify Merge Protections
* GitHub Check: Mergify Merge Protections
* GitHub Check: Summary

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>test/component_test.go (1)</summary>

`49-50`: **Check for deployment errors.**

The DeployAtmosComponent call ignores the error return value. This could mask deployment failures and make debugging difficult.

```diff
-options, _ := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
+options, err := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
+if err != nil {
+	s.T().Fatalf("Failed to deploy component: %v", err)
+}
assert.NotNil(s.T(), options)
```

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-02T09:07:59Z

Review comments:
diff_hunk: @@ -14,9 +14,9 @@ locals {
 
   manifest_kubernetes_namespace = var.manifest_kubernetes_namespace
 
-  team_slugs = toset(compact([
+  team_slugs = local.enabled ? toset(compact([
     for permission in var.permissions : lookup(permission, "team_slug", null)
-  ]))
+  ])) : []
path: src/main.tf
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Ensure consistent types in conditional expression.**  
The `team_slugs` local is assigned using a conditional: when `local.enabled` is true, it evaluates to a set via `toset(compact([...]))`, while when false it returns an empty list (`[]`). To avoid potential type inconsistencies downstream, consider returning an empty set instead:
  
```diff
-  team_slugs = local.enabled ? toset(compact([
-    for permission in var.permissions : lookup(permission, "team_slug", null)
-  ])) : []
+  team_slugs = local.enabled ? toset(compact([
+    for permission in var.permissions : lookup(permission, "team_slug", null)
+  ])) : toset([])
```

This change ensures that `team_slugs` always has a consistent type regardless of the condition.  



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
  team_slugs = local.enabled ? toset(compact([
    for permission in var.permissions : lookup(permission, "team_slug", null)
  ])) : toset([])
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-01T18:09:02Z
author_association: NONE
diff_hunk: @@ -0,0 +1,23 @@
+components:
+  terraform:
+    argocd-github-repo/basic:
+      metadata:
+        component: target
+      vars:
+        enabled: true
+        github_user: goruha
+        github_user_email: ci@acme.com
+        github_organization: cloudposse-tests
+        github_codeowner_teams:
+          - "@cloudposse-tests/admin"
+        permissions:
+          - team_slug: admin
+            permission: admin
path: test/fixtures/stacks/catalog/usecase/basic.yaml
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Check team_slug naming inconsistency**

There's a potential inconsistency between this file and `disabled.yaml`. Here the team_slug is "admin" (singular), while in the disabled configuration it's "admins" (plural). Verify if this difference is intentional.

---

🏁 Script executed:

```shell
#!/bin/bash
# Check how team_slug is used in other files for consistency
grep -r "team_slug" --include="*.tf" --include="*.yaml" .
```

Length of output: 1350

---



</details>

**Team Slug Naming Inconsistency – Action Required**

- **File:** `test/fixtures/stacks/catalog/usecase/basic.yaml` (Lines 14-15)  
  Currently uses `team_slug: admin`.

- **Reference:**  
  - In `test/fixtures/stacks/catalog/usecase/disabled.yaml`, the team slug is set to `admins`.  
  - In `README.yaml`, the convention reflects `team_slug: admins`.

Please verify whether the use of `"admin"` in `basic.yaml` is intentional. If not, update it to `"admins"` to maintain consistency across the configuration files.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-01T18:09:02Z
author_association: NONE
diff_hunk: @@ -0,0 +1,185 @@
+module test
+
+go 1.23.4
+
+toolchain go1.23.7
path: test/go.mod
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Verify Go version compatibility**

The specified Go version (1.23.4) and toolchain (1.23.7) appear to be unusually high version numbers.

---

🌐 Web query:

```web
What is the latest Go version available as of April 2024?
```

💡 Result:

The latest Go version available as of April 2024 was **Go 1.22.2**, released on April 3, 2024[1]. This minor revision included:
- A security fix for the `net/http` package
- Bug fixes across multiple components including the compiler, linker, and `encoding/gob`/`go/types` packages[1]

Key details about Go releases around this period:
1. **Major version support**:  
   Go 1.22.x remained the latest supported major version series until February 2025 when Go 1.24 was released[5][6]. The release policy maintains support for each major version until two newer ones exist[5].

2. **Platform adoption**:
   - AWS Elastic Beanstalk used Go 1.22.2 in April 2024 deployments[4]
   - Google Cloud's App Engine made Go 1.22 generally available in March 2024[3]

3. **Key 1.22 series features** introduced earlier in February 2024:
   - Range-over-function iterators[11]
   - Improved loop variable semantics[11]
   - New `math/rand/v2` package[11]

Subsequent minor versions in 2024 continued adding security patches and improvements, with Go 1.22.12 being the final update in February 2025 before the series reached end-of-life[1][5].

Citations:

- 1: https://go.dev/doc/devel/release
- 2: http://xahlee.info/golang/golang_version_dates.html
- 3: https://cloud.google.com/appengine/docs/standard/go/release-notes
- 4: https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-go.html
- 5: https://endoflife.date/go
- 6: https://tip.golang.org/doc/go1.24
- 7: https://en.wikipedia.org/wiki/Go_(programming_language)
- 8: https://github.com/golang/tools/releases
- 9: https://www.gitclear.com/open_repos/golang/go/releases
- 10: http://forum.exercism.org/t/update-go-version-to-the-latest-one/9326
- 11: https://antonz.org/which-go/
- 12: https://community.chocolatey.org/packages/golang
- 13: https://tip.golang.org/doc/go1.23
- 14: https://benhoyt.com/writings/go-version-performance-2024/
- 15: https://go.dev/dl/

---



</details>

**Action: Adjust Go version numbers to align with officially released versions.**

- The `go.mod` file currently specifies `go 1.23.4` and `toolchain go1.23.7`, which are higher than the latest Go version available as of April 2024 (Go 1.22.2).
- Please verify whether these versions were intentionally set (e.g., for internal testing or forward-looking compatibility) or if they were mistakenly updated.
- If unintentional, update the Go version and toolchain to a supported release version (e.g., Go 1.22.2) to ensure compatibility with production environments.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-01T18:09:03Z
author_association: NONE
diff_hunk: @@ -0,0 +1,61 @@
+package test
+
+import (
+	"fmt"
+	"os"
+	// "strconv"
+	"testing"
+	"strings"
+
+	helper "github.com/cloudposse/test-helpers/pkg/atmos/component-helper"
+	awsTerratest "github.com/gruntwork-io/terratest/modules/aws"
+	"github.com/gruntwork-io/terratest/modules/random"
+	// "github.com/jferrl/go-githubauth"
+	"github.com/stretchr/testify/assert"
+)
+
+type ComponentSuite struct {
+	helper.TestSuite
+}
+
+func (s *ComponentSuite) TestBasic() {
+	const component = "argocd-github-repo/basic"
+	const stack = "default-test"
+	const awsRegion = "us-east-2"
+
+	token := os.Getenv("GITHUB_TOKEN")
+
+	randomID := strings.ToLower(random.UniqueId())
+
+	secretPath := fmt.Sprintf("/argocd/%s/github/api_key", randomID)
+	repoName := fmt.Sprintf("argocd-github-repo-%s", randomID)
+
+	defer func() {
+		awsTerratest.DeleteParameter(s.T(), awsRegion, secretPath)
+	}()
+	awsTerratest.PutParameter(s.T(), awsRegion, secretPath, "Github API Key", token)
+
+	inputs := map[string]interface{}{
+		"ssm_github_api_key": secretPath,
+		"name":                repoName,
+	}
+
+	defer s.DestroyAtmosComponent(s.T(), component, stack, &inputs)
+	options, _ := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
+	assert.NotNil(s.T(), options)
path: test/component_test.go
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Check for deployment errors.**

The DeployAtmosComponent call ignores the error return value. This could mask deployment failures and make debugging difficult.

```diff
-options, _ := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
+options, err := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
+if err != nil {
+	s.T().Fatalf("Failed to deploy component: %v", err)
+}
assert.NotNil(s.T(), options)
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
	options, err := s.DeployAtmosComponent(s.T(), component, stack, &inputs)
	if err != nil {
		s.T().Fatalf("Failed to deploy component: %v", err)
	}
	assert.NotNil(s.T(), options)
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-02T08:27:31Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-04-01T17:56:26Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough
This pull request introduces conditional logic into Terraform configurations, affecting how values are assigned in both resource definitions and outputs based on the `local.enabled` flag. In addition to these logic changes, new test files, configuration fixtures, and a Go module have been added while a legacy test script has been removed. The new configurations cover Atmos settings, Terraform backends, and component definitions, with corresponding tests to verify functionality.

## Changes

| File(s)                                 | Summary of Changes |
|-----------------------------------------|--------------------|
| `src/main.tf`, `src/outputs.tf`        | Modified Terraform logic to use conditional expressions based on `local.enabled`. In `main.tf`, `team_slugs` is assigned either the computed value or an empty list. In `outputs.tf`, repository outputs now return either their respective values from `local.github_repository` or `null`. |
| `test/.gitignore`                       | New .gitignore file added to exclude directories and files such as `state/`, `.cache`, `test/test-suite.json`, `.atmos`, and `test_suite.yaml`. |
| `test/component_test.go`                | Introduced a new test suite for the "argocd-github-repo" component, including tests for basic functionality and verification of the enabled flag. |
| `test/fixtures/**`                      | Added several YAML configuration files (e.g., `atmos.yaml`, files under `stacks/catalog/`, `stacks/orgs/default/test/`, and `vendor.yaml`) to define settings for components, stacks, workflows, and Atmos vendoring. |
| `test/go.mod`                           | New Go module file created for tests, specifying the Go version, required dependencies, and a replace directive for the `aws-nuke` module. |
| `test/run.sh`                           | Removed the legacy Bash test script that previously printed a simple message. |

## Sequence Diagram(s)
```mermaid
sequenceDiagram
    participant TF as "Terraform Engine"
    participant Main as "main.tf"
    participant Outputs as "outputs.tf"

    TF->>Main: Evaluate local.enabled
    alt local.enabled == true
        Main->>Main: Process var.permissions via toset(compact([...]))
        Main->>Outputs: Output repository details from local.github_repository
    else local.enabled == false
        Main->>Main: Set team_slugs to empty list
        Main->>Outputs: Output null values in repository outputs
    end
```

## Poem
> I'm a hopping coder, a rabbit in flight,  
> With conditional logic, my code feels just right.  
> Team slugs and outputs now dance in the sun,  
> Each YAML and test proving our work is fun.  
> In fields of config, I nibble with delight 🐰!  
> Cheers to changes that keep our code light.

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---



<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=cloudposse-terraform-components/aws-argocd-github-repo&utm_content=16):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: mergify[bot]
created_at: 2025-04-01T17:56:55Z
body: # Merge Protections

Your pull request matches the following merge protections and will not be merged until they are valid.

## 🟢 Require terratest

<details><summary>Wonderful, this rule succeeded.</summary>

This rule require terratest status
- [X] `check-success = test/terratest`

</details>
author_association: NONE
user: login: goruha
created_at: 2025-04-01T18:00:14Z
body: /terratest 
author_association: CONTRIBUTOR
user: login: goruha
created_at: 2025-04-02T08:14:33Z
body: /terratest 
author_association: CONTRIBUTOR
user: login: goruha
created_at: 2025-04-02T08:25:54Z
body: /terratest 
author_association: CONTRIBUTOR
user: login: goruha
created_at: 2025-04-02T09:16:17Z
body: /terratest 
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-02T09:31:00Z
body: 
  <!-- release-pr-comment:190596689 -->
  These changes were released in [v1.536.0](https://github.com/cloudposse-terraform-components/aws-argocd-github-repo/releases/tag/v1.536.0).
  
author_association: NONE