@intentius/chant-lexicon-terraform 0.101.0 → 0.104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__fixtures__/terragrunt/affected-cases.d.ts +23 -0
- package/dist/__fixtures__/terragrunt/affected-cases.d.ts.map +1 -0
- package/dist/__fixtures__/terragrunt/record.d.ts +17 -0
- package/dist/__fixtures__/terragrunt/record.d.ts.map +1 -0
- package/dist/change-set.d.ts +67 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/changed-roots.d.ts +30 -0
- package/dist/changed-roots.d.ts.map +1 -0
- package/dist/codegen/package.d.ts +1 -1
- package/dist/commands.d.ts +26 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/components/capability-plugin.d.ts +54 -0
- package/dist/components/capability-plugin.d.ts.map +1 -0
- package/dist/composites/terraform-pin-rollout-op.d.ts +44 -0
- package/dist/composites/terraform-pin-rollout-op.d.ts.map +1 -0
- package/dist/config.d.ts +3 -3
- package/dist/hcl/descend.d.ts +1 -1
- package/dist/hcl/descend.d.ts.map +1 -1
- package/dist/hcl/edges.d.ts +2 -2
- package/dist/hcl/edges.d.ts.map +1 -1
- package/dist/hcl/jsonencode.d.ts +106 -0
- package/dist/hcl/jsonencode.d.ts.map +1 -0
- package/dist/hcl/marker.d.ts.map +1 -1
- package/dist/hcl/parse.d.ts +29 -1
- package/dist/hcl/parse.d.ts.map +1 -1
- package/dist/hcl/roots.d.ts +1 -1
- package/dist/hcl/roots.d.ts.map +1 -1
- package/dist/hcl/suppressions.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +22 -4
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/audit-lineage.d.ts +1 -1
- package/dist/lint/audit-lineage.d.ts.map +1 -1
- package/dist/lint/post-synth/flat-attributes.d.ts +69 -0
- package/dist/lint/post-synth/flat-attributes.d.ts.map +1 -0
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/post-synth/module-source.d.ts +27 -1
- package/dist/lint/post-synth/module-source.d.ts.map +1 -1
- package/dist/lint/post-synth/terragrunt.d.ts +37 -0
- package/dist/lint/post-synth/terragrunt.d.ts.map +1 -0
- package/dist/lint/post-synth/tf002.d.ts +3 -1
- package/dist/lint/post-synth/tf002.d.ts.map +1 -1
- package/dist/lint/post-synth/tf030.d.ts +51 -0
- package/dist/lint/post-synth/tf030.d.ts.map +1 -0
- package/dist/lint/post-synth/tf031.d.ts +55 -0
- package/dist/lint/post-synth/tf031.d.ts.map +1 -0
- package/dist/lint/post-synth/tf032.d.ts +71 -0
- package/dist/lint/post-synth/tf032.d.ts.map +1 -0
- package/dist/lint/post-synth/tf033.d.ts +50 -0
- package/dist/lint/post-synth/tf033.d.ts.map +1 -0
- package/dist/lint/post-synth/tf034.d.ts +25 -0
- package/dist/lint/post-synth/tf034.d.ts.map +1 -0
- package/dist/lint/post-synth/tf035.d.ts +33 -0
- package/dist/lint/post-synth/tf035.d.ts.map +1 -0
- package/dist/lint/post-synth/tf036.d.ts +33 -0
- package/dist/lint/post-synth/tf036.d.ts.map +1 -0
- package/dist/lint/post-synth/tf037.d.ts +31 -0
- package/dist/lint/post-synth/tf037.d.ts.map +1 -0
- package/dist/lint/post-synth/tf038.d.ts +22 -0
- package/dist/lint/post-synth/tf038.d.ts.map +1 -0
- package/dist/lint/post-synth/tf039.d.ts +23 -0
- package/dist/lint/post-synth/tf039.d.ts.map +1 -0
- package/dist/lint/post-synth/tf040.d.ts +30 -0
- package/dist/lint/post-synth/tf040.d.ts.map +1 -0
- package/dist/lint/post-synth/tf041.d.ts +20 -0
- package/dist/lint/post-synth/tf041.d.ts.map +1 -0
- package/dist/lint/post-synth/tf042.d.ts +18 -0
- package/dist/lint/post-synth/tf042.d.ts.map +1 -0
- package/dist/lint/post-synth/tf043.d.ts +17 -0
- package/dist/lint/post-synth/tf043.d.ts.map +1 -0
- package/dist/lint/post-synth/tf044.d.ts +17 -0
- package/dist/lint/post-synth/tf044.d.ts.map +1 -0
- package/dist/lint/post-synth/tf045.d.ts +22 -0
- package/dist/lint/post-synth/tf045.d.ts.map +1 -0
- package/dist/manifest.json +1 -1
- package/dist/okf/index.md +16 -0
- package/dist/okf/rules/TF030.md +11 -0
- package/dist/okf/rules/TF031.md +11 -0
- package/dist/okf/rules/TF032.md +11 -0
- package/dist/okf/rules/TF033.md +11 -0
- package/dist/okf/rules/TF034.md +11 -0
- package/dist/okf/rules/TF035.md +11 -0
- package/dist/okf/rules/TF036.md +11 -0
- package/dist/okf/rules/TF037.md +11 -0
- package/dist/okf/rules/TF038.md +11 -0
- package/dist/okf/rules/TF039.md +11 -0
- package/dist/okf/rules/TF040.md +11 -0
- package/dist/okf/rules/TF041.md +11 -0
- package/dist/okf/rules/TF042.md +11 -0
- package/dist/okf/rules/TF043.md +11 -0
- package/dist/okf/rules/TF044.md +11 -0
- package/dist/okf/rules/TF045.md +11 -0
- package/dist/op/activities/index.d.ts +4 -0
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/pin-rollout.d.ts +46 -0
- package/dist/op/activities/pin-rollout.d.ts.map +1 -0
- package/dist/op/activities/terraform.d.ts +24 -50
- package/dist/op/activities/terraform.d.ts.map +1 -1
- package/dist/op/activity-contracts.d.ts +66 -18
- package/dist/op/activity-contracts.d.ts.map +1 -1
- package/dist/op/builders.d.ts +9 -0
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/pin/edit-ts.d.ts +21 -0
- package/dist/pin/edit-ts.d.ts.map +1 -0
- package/dist/pin/edit.d.ts +52 -0
- package/dist/pin/edit.d.ts.map +1 -0
- package/dist/pin/forge.d.ts +39 -0
- package/dist/pin/forge.d.ts.map +1 -0
- package/dist/pin/index.d.ts +22 -0
- package/dist/pin/index.d.ts.map +1 -0
- package/dist/pin/rollout.d.ts +116 -0
- package/dist/pin/rollout.d.ts.map +1 -0
- package/dist/pin/scan.d.ts +54 -0
- package/dist/pin/scan.d.ts.map +1 -0
- package/dist/pin/source.d.ts +93 -0
- package/dist/pin/source.d.ts.map +1 -0
- package/dist/pin/waves.d.ts +66 -0
- package/dist/pin/waves.d.ts.map +1 -0
- package/dist/plan-digest.d.ts +59 -0
- package/dist/plan-digest.d.ts.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/rules/flat-attributes.ts +146 -0
- package/dist/rules/module-source.ts +56 -1
- package/dist/rules/terragrunt.ts +76 -0
- package/dist/rules/tf002.ts +1 -1
- package/dist/rules/tf030.ts +290 -0
- package/dist/rules/tf031.ts +370 -0
- package/dist/rules/tf032.ts +226 -0
- package/dist/rules/tf033.ts +160 -0
- package/dist/rules/tf034.ts +63 -0
- package/dist/rules/tf035.ts +74 -0
- package/dist/rules/tf036.ts +119 -0
- package/dist/rules/tf037.ts +101 -0
- package/dist/rules/tf038.ts +71 -0
- package/dist/rules/tf039.ts +64 -0
- package/dist/rules/tf040.ts +76 -0
- package/dist/rules/tf041.ts +56 -0
- package/dist/rules/tf042.ts +42 -0
- package/dist/rules/tf043.ts +49 -0
- package/dist/rules/tf044.ts +51 -0
- package/dist/rules/tf045.ts +47 -0
- package/dist/terragrunt/affected.d.ts +119 -0
- package/dist/terragrunt/affected.d.ts.map +1 -0
- package/dist/terragrunt/index.d.ts +11 -0
- package/dist/terragrunt/index.d.ts.map +1 -0
- package/dist/terragrunt/mocks.d.ts +147 -0
- package/dist/terragrunt/mocks.d.ts.map +1 -0
- package/dist/terragrunt/run.d.ts +130 -0
- package/dist/terragrunt/run.d.ts.map +1 -0
- package/dist/terragrunt/units.d.ts +103 -0
- package/dist/terragrunt/units.d.ts.map +1 -0
- package/dist/terragrunt/wave.d.ts +89 -0
- package/dist/terragrunt/wave.d.ts.map +1 -0
- package/package.json +13 -3
- package/src/__fixtures__/change-set/choudoufu-set-plan.change-set.golden.json +95 -0
- package/src/__fixtures__/change-set/choudoufu-set-plan.json +76 -0
- package/src/__fixtures__/change-set/choudoufu.part.golden.json +173 -0
- package/src/__fixtures__/change-set/choudoufu.plan.json +610 -0
- package/src/__fixtures__/change-set/terraform.import-forget.plan.json +81 -0
- package/src/__fixtures__/change-set/terraform.part.golden.json +173 -0
- package/src/__fixtures__/change-set/terraform.plan.json +589 -0
- package/src/__fixtures__/change-set/tofu.part.golden.json +173 -0
- package/src/__fixtures__/change-set/tofu.plan.json +588 -0
- package/src/__fixtures__/change-set/v1.tf.txt +21 -0
- package/src/__fixtures__/change-set/v2-module-app.tf.txt +4 -0
- package/src/__fixtures__/change-set/v2.tf.txt +21 -0
- package/src/__fixtures__/pin/choudoufu-live-waves-n5.json +83 -0
- package/src/__fixtures__/pin/largeset-oci-n5/apply-order.txt +5 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e01/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e01/main.tf +33 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e02/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e02/main.tf +45 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e03/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e03/main.tf +47 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e04/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e04/main.tf +31 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e05/estate.chdf.hcl +6 -0
- package/src/__fixtures__/pin/largeset-oci-n5/estates/e05/main.tf +27 -0
- package/src/__fixtures__/pin/largeset-oci-n5/fixture.json +77 -0
- package/src/__fixtures__/plan-summary/largeset-n5-bump.json +2071 -0
- package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.json +95 -0
- package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.md +22 -0
- package/src/__fixtures__/plan-summary/largeset-n5.summary.golden.txt +12 -0
- package/src/__fixtures__/terragrunt/affected/catalog/units/web/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/gitignore +3 -0
- package/src/__fixtures__/terragrunt/affected/live/dev/app/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/live/dev/vpc/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/live/prod/app/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/affected/live/stg/terragrunt.stack.hcl +5 -0
- package/src/__fixtures__/terragrunt/affected/modules/app/main.tf +6 -0
- package/src/__fixtures__/terragrunt/affected/modules/app/policy.json +1 -0
- package/src/__fixtures__/terragrunt/affected/modules/net/main.tf +2 -0
- package/src/__fixtures__/terragrunt/affected/modules/thing/main.tf +3 -0
- package/src/__fixtures__/terragrunt/affected/root.hcl +5 -0
- package/src/__fixtures__/terragrunt/affected-cases.ts +126 -0
- package/src/__fixtures__/terragrunt/five-units/catalog/units/thing/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/five-units/live/dev/app/terragrunt.hcl +13 -0
- package/src/__fixtures__/terragrunt/five-units/live/dev/db/terragrunt.hcl +8 -0
- package/src/__fixtures__/terragrunt/five-units/live/dev/vpc/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/five-units/live/prod/app/terragrunt.hcl +8 -0
- package/src/__fixtures__/terragrunt/five-units/live/prod/vpc/terragrunt.hcl +3 -0
- package/src/__fixtures__/terragrunt/five-units/modules/thing/main.tf +7 -0
- package/src/__fixtures__/terragrunt/five-units/root.hcl +5 -0
- package/src/__fixtures__/terragrunt/record.ts +56 -0
- package/src/__fixtures__/terragrunt/recorded/affected-find.json +50 -0
- package/src/__fixtures__/terragrunt/recorded/failed-plan-report.json +36 -0
- package/src/__fixtures__/terragrunt/recorded/find.json +67 -0
- package/src/__fixtures__/terragrunt/recorded/version.txt +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/apply-report.json +22 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/json/live/dev/vpc/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/json/live/prod/vpc/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-1/plan-report.json +22 -0
- package/src/__fixtures__/terragrunt/recorded/wave-2/json/live/dev/db/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-2/json/live/prod/app/tfplan.json +1 -0
- package/src/__fixtures__/terragrunt/recorded/wave-2/plan-report.json +22 -0
- package/src/change-set-combined-run.test.ts +156 -0
- package/src/change-set.test.ts +151 -0
- package/src/change-set.ts +273 -0
- package/src/changed-roots.test.ts +58 -0
- package/src/changed-roots.ts +102 -0
- package/src/commands.ts +112 -0
- package/src/components/capability-plugin.test.ts +91 -0
- package/src/components/capability-plugin.ts +131 -0
- package/src/components/pr-loop.tofu.test.ts +244 -0
- package/src/composites/terraform-pin-rollout-op.test.ts +69 -0
- package/src/composites/terraform-pin-rollout-op.ts +60 -0
- package/src/hcl/descend.ts +1 -1
- package/src/hcl/edges.ts +2 -2
- package/src/hcl/jsonencode.test.ts +226 -0
- package/src/hcl/jsonencode.ts +454 -0
- package/src/hcl/parse.test.ts +25 -0
- package/src/hcl/parse.ts +91 -6
- package/src/hcl/roots.ts +1 -1
- package/src/hcl/suppressions.ts +8 -2
- package/src/index.ts +18 -0
- package/src/lint/audit-catalog.ts +230 -0
- package/src/lint/audit-lineage.ts +155 -1
- package/src/lint/audit.test.ts +3 -1
- package/src/lint/post-synth/estate-2284.test.ts +68 -0
- package/src/lint/post-synth/fixtures/TF030/negative-rules.tf +45 -0
- package/src/lint/post-synth/fixtures/TF030/negative.tf +55 -0
- package/src/lint/post-synth/fixtures/TF030/not-determined-port.tf +28 -0
- package/src/lint/post-synth/fixtures/TF030/not-determined-standalone.tf +32 -0
- package/src/lint/post-synth/fixtures/TF030/not-determined-vpc-rule.tf +21 -0
- package/src/lint/post-synth/fixtures/TF030/not-determined.tf +39 -0
- package/src/lint/post-synth/fixtures/TF030/positive-ipv6.tf +44 -0
- package/src/lint/post-synth/fixtures/TF030/positive-mixed.tf +36 -0
- package/src/lint/post-synth/fixtures/TF030/positive-standalone.tf +25 -0
- package/src/lint/post-synth/fixtures/TF030/positive.tf +43 -0
- package/src/lint/post-synth/fixtures/TF031/negative.tf +89 -0
- package/src/lint/post-synth/fixtures/TF031/not-determined.tf +139 -0
- package/src/lint/post-synth/fixtures/TF031/positive-data-source.tf +57 -0
- package/src/lint/post-synth/fixtures/TF031/positive-heredoc.tf +149 -0
- package/src/lint/post-synth/fixtures/TF031/positive-jsonencode.tf +115 -0
- package/src/lint/post-synth/fixtures/TF032/negative-heredoc.tf +20 -0
- package/src/lint/post-synth/fixtures/TF032/negative-references.tf +214 -0
- package/src/lint/post-synth/fixtures/TF032/negative.tf +99 -0
- package/src/lint/post-synth/fixtures/TF032/positive-heredoc.tf +22 -0
- package/src/lint/post-synth/fixtures/TF032/positive-sidecar.tf +197 -0
- package/src/lint/post-synth/fixtures/TF032/positive.tf +54 -0
- package/src/lint/post-synth/fixtures/TF033/negative.tf +39 -0
- package/src/lint/post-synth/fixtures/TF033/not-determined-aurora.tf +25 -0
- package/src/lint/post-synth/fixtures/TF033/positive-absent.tf +93 -0
- package/src/lint/post-synth/fixtures/TF033/positive.tf +50 -0
- package/src/lint/post-synth/fixtures/TF034/negative.tf +24 -0
- package/src/lint/post-synth/fixtures/TF034/positive-absent.tf +36 -0
- package/src/lint/post-synth/fixtures/TF034/positive.tf +14 -0
- package/src/lint/post-synth/fixtures/TF035/negative-absent.tf +43 -0
- package/src/lint/post-synth/fixtures/TF035/negative.tf +54 -0
- package/src/lint/post-synth/fixtures/TF035/positive.tf +37 -0
- package/src/lint/post-synth/fixtures/TF036/negative.tf +61 -0
- package/src/lint/post-synth/fixtures/TF036/not-determined.tf +28 -0
- package/src/lint/post-synth/fixtures/TF036/positive.tf +38 -0
- package/src/lint/post-synth/fixtures/TF037/negative-exclusion.tf +63 -0
- package/src/lint/post-synth/fixtures/TF037/negative.tf +27 -0
- package/src/lint/post-synth/fixtures/TF037/not-determined.tf +27 -0
- package/src/lint/post-synth/fixtures/TF037/positive-absent.tf +15 -0
- package/src/lint/post-synth/fixtures/TF037/positive.tf +26 -0
- package/src/lint/post-synth/fixtures/TF038/positive.tf +3 -0
- package/src/lint/post-synth/fixtures/TF039/positive.tf +4 -0
- package/src/lint/post-synth/fixtures/TF041/negative/terragrunt.hcl +12 -0
- package/src/lint/post-synth/fixtures/TF041/positive/terragrunt.hcl +7 -0
- package/src/lint/post-synth/fixtures/TF041/positive-apply/terragrunt.hcl +8 -0
- package/src/lint/post-synth/fixtures/TF042/negative/terragrunt.hcl +13 -0
- package/src/lint/post-synth/fixtures/TF042/positive/terragrunt.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF043/negative/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/negative-other/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/positive-git/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/positive-oci/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF043/positive-tfr/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF044/negative/terragrunt.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF044/positive/terragrunt.hcl +7 -0
- package/src/lint/post-synth/fixtures/TF044/positive-generate/terragrunt.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF045/negative/root.hcl +1 -0
- package/src/lint/post-synth/fixtures/TF045/negative/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF045/positive/root.hcl +9 -0
- package/src/lint/post-synth/fixtures/TF045/positive/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/TF045/unit-only/terragrunt.hcl +3 -0
- package/src/lint/post-synth/fixtures/estate-2284/clean/main.tf +132 -0
- package/src/lint/post-synth/fixtures/estate-2284/violating/main.tf +112 -0
- package/src/lint/post-synth/flat-attributes.ts +146 -0
- package/src/lint/post-synth/index.ts +32 -0
- package/src/lint/post-synth/module-source.test.ts +42 -1
- package/src/lint/post-synth/module-source.ts +56 -1
- package/src/lint/post-synth/terragrunt.ts +76 -0
- package/src/lint/post-synth/tf002.ts +1 -1
- package/src/lint/post-synth/tf030.test.ts +219 -0
- package/src/lint/post-synth/tf030.ts +290 -0
- package/src/lint/post-synth/tf031.test.ts +229 -0
- package/src/lint/post-synth/tf031.ts +370 -0
- package/src/lint/post-synth/tf032.test.ts +127 -0
- package/src/lint/post-synth/tf032.ts +226 -0
- package/src/lint/post-synth/tf033.test.ts +126 -0
- package/src/lint/post-synth/tf033.ts +160 -0
- package/src/lint/post-synth/tf034.test.ts +71 -0
- package/src/lint/post-synth/tf034.ts +63 -0
- package/src/lint/post-synth/tf035.test.ts +68 -0
- package/src/lint/post-synth/tf035.ts +74 -0
- package/src/lint/post-synth/tf036.test.ts +87 -0
- package/src/lint/post-synth/tf036.ts +119 -0
- package/src/lint/post-synth/tf037.test.ts +88 -0
- package/src/lint/post-synth/tf037.ts +101 -0
- package/src/lint/post-synth/tf038.test.ts +51 -0
- package/src/lint/post-synth/tf038.ts +71 -0
- package/src/lint/post-synth/tf039.test.ts +40 -0
- package/src/lint/post-synth/tf039.ts +64 -0
- package/src/lint/post-synth/tf040.test.ts +55 -0
- package/src/lint/post-synth/tf040.ts +76 -0
- package/src/lint/post-synth/tf041.test.ts +50 -0
- package/src/lint/post-synth/tf041.ts +56 -0
- package/src/lint/post-synth/tf042.test.ts +19 -0
- package/src/lint/post-synth/tf042.ts +42 -0
- package/src/lint/post-synth/tf043.test.ts +65 -0
- package/src/lint/post-synth/tf043.ts +49 -0
- package/src/lint/post-synth/tf044.test.ts +27 -0
- package/src/lint/post-synth/tf044.ts +51 -0
- package/src/lint/post-synth/tf045.test.ts +30 -0
- package/src/lint/post-synth/tf045.ts +47 -0
- package/src/op/activities/index.ts +4 -0
- package/src/op/activities/pin-rollout.ts +77 -0
- package/src/op/activities/terraform.test.ts +13 -0
- package/src/op/activities/terraform.ts +46 -86
- package/src/op/activity-contracts.test.ts +4 -1
- package/src/op/activity-contracts.ts +42 -0
- package/src/op/builders.ts +13 -0
- package/src/pin/bundle.test.ts +53 -0
- package/src/pin/edit-ts.test.ts +39 -0
- package/src/pin/edit-ts.ts +77 -0
- package/src/pin/edit.test.ts +199 -0
- package/src/pin/edit.ts +157 -0
- package/src/pin/forge.ts +85 -0
- package/src/pin/index.ts +22 -0
- package/src/pin/rollout.test.ts +232 -0
- package/src/pin/rollout.ts +451 -0
- package/src/pin/scan.ts +309 -0
- package/src/pin/source.ts +206 -0
- package/src/pin/waves.test.ts +101 -0
- package/src/pin/waves.ts +125 -0
- package/src/plan-digest.ts +99 -0
- package/src/plan-summary.test.ts +154 -0
- package/src/plugin.ts +25 -2
- package/src/terragrunt/affected.acceptance.test.ts +83 -0
- package/src/terragrunt/affected.test.ts +177 -0
- package/src/terragrunt/affected.ts +348 -0
- package/src/terragrunt/index.ts +11 -0
- package/src/terragrunt/mocks.acceptance.test.ts +105 -0
- package/src/terragrunt/mocks.test.ts +309 -0
- package/src/terragrunt/mocks.ts +324 -0
- package/src/terragrunt/run.ts +369 -0
- package/src/terragrunt/terragrunt.acceptance.test.ts +122 -0
- package/src/terragrunt/terragrunt.test.ts +332 -0
- package/src/terragrunt/units.ts +235 -0
- package/src/terragrunt/wave.ts +181 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Changes to the `affected/` fixture and what each selects (#3415). Shared by
|
|
3
|
+
* `terragrunt/affected.test.ts`, which feeds the recorded `terragrunt` column
|
|
4
|
+
* to the selection, and `terragrunt/affected.acceptance.test.ts`, which makes
|
|
5
|
+
* each change as a commit and checks the column against a real Terragrunt.
|
|
6
|
+
*
|
|
7
|
+
* `terragrunt` is what Terragrunt's own `[base...HEAD]` filter selected
|
|
8
|
+
* (observed on 1.1.6 and 1.2.0-rc1). The supplement cases select nothing
|
|
9
|
+
* there: that column is the red half of each supplement.
|
|
10
|
+
*/
|
|
11
|
+
import type { TerragruntAffectedUnit } from "../../terragrunt/affected.js";
|
|
12
|
+
export interface AffectedCase {
|
|
13
|
+
name: string;
|
|
14
|
+
/** Make the change in a copy of the fixture. */
|
|
15
|
+
change: (dir: string) => void;
|
|
16
|
+
/** What `git diff --name-only` lists for the change. */
|
|
17
|
+
changed: string[];
|
|
18
|
+
/** What Terragrunt's own git filter selects, catalog excluded. */
|
|
19
|
+
terragrunt: string[];
|
|
20
|
+
expected: TerragruntAffectedUnit[];
|
|
21
|
+
}
|
|
22
|
+
export declare const AFFECTED_CASES: AffectedCase[];
|
|
23
|
+
//# sourceMappingURL=affected-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"affected-cases.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/terragrunt/affected-cases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,wDAAwD;IACxD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAID,eAAO,MAAM,cAAc,EAAE,YAAY,EAiGxC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-record `recorded/` from a real Terragrunt run over `five-units/`:
|
|
3
|
+
*
|
|
4
|
+
* PATH=<dir with terragrunt 1.1+ and tofu>:$PATH npx tsx lexicons/terraform/src/__fixtures__/terragrunt/record.ts
|
|
5
|
+
*
|
|
6
|
+
* It copies the fixture to a temporary directory, discovers the units, plans
|
|
7
|
+
* and applies wave 1, then plans wave 2, and writes what Terragrunt printed
|
|
8
|
+
* and wrote with the temporary directory's path taken out.
|
|
9
|
+
*
|
|
10
|
+
* `recorded/failed-plan-report.json` is not written here. It was recorded by
|
|
11
|
+
* hand with Terragrunt 1.1.6 and OpenTofu 1.12.5, planning `live/dev/db`,
|
|
12
|
+
* `live/dev/app` and `live/prod/app` in one run after giving `live/dev/db` a
|
|
13
|
+
* `before_hook` that runs `false` on plan: db fails, app exits early because
|
|
14
|
+
* db failed, and prod/app plans.
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/terragrunt/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Change-set adapters for the terraform family (#3181): a `terraform show
|
|
3
|
+
* -json` plan from terraform, tofu or choudoufu, and a choudoufu set plan
|
|
4
|
+
* document (`live-plan-set -json`, choudoufu#1752), each into
|
|
5
|
+
* `@intentius/chant/change-set` parts.
|
|
6
|
+
*
|
|
7
|
+
* A member's plan digest is {@link terraformPlanDigest}, the value a
|
|
8
|
+
* `TerraformApplyOp` gate on that root binds (#2300), so a change set over
|
|
9
|
+
* one root and a gate over the same root agree on what changed.
|
|
10
|
+
*
|
|
11
|
+
* This module imports `./plan-digest` and chant's `change-set` and
|
|
12
|
+
* `lifecycle/plan-digest` subpaths, never the lexicon's entry point, so it
|
|
13
|
+
* bundles without TypeScript or the lint rules (#3421).
|
|
14
|
+
*/
|
|
15
|
+
import type { ChangeSetAction, ChangeSetPart, ChangeSetPlanner } from "@intentius/chant/change-set";
|
|
16
|
+
/**
|
|
17
|
+
* The planner a root's binary names: `choudoufu` and `tofu` by name, and
|
|
18
|
+
* `terraform` for anything else, a path to terraform included.
|
|
19
|
+
*/
|
|
20
|
+
export declare function plannerForBinary(binary: string | undefined): ChangeSetPlanner;
|
|
21
|
+
/**
|
|
22
|
+
* The action a `resource_changes` entry's `actions` array means. Delete then
|
|
23
|
+
* create and create then delete are both a replace; the order is the
|
|
24
|
+
* disruption ({@link disruptionFor}).
|
|
25
|
+
*/
|
|
26
|
+
export declare function actionFor(actions: unknown): ChangeSetAction;
|
|
27
|
+
/** A resource address's module path, name and index, read off the address when the entry does not carry them. */
|
|
28
|
+
export declare function parseTerraformAddress(address: string): {
|
|
29
|
+
module?: string;
|
|
30
|
+
type: string;
|
|
31
|
+
name: string;
|
|
32
|
+
index?: string | number;
|
|
33
|
+
};
|
|
34
|
+
export interface TerraformChangeSetPartInput {
|
|
35
|
+
/** The member's name: the root's name in `terraform.roots`, which a workspace member of kind terraform or choudoufu shares. */
|
|
36
|
+
member: string;
|
|
37
|
+
/** `terraform show -json <planfile>`, parsed. */
|
|
38
|
+
plan: unknown;
|
|
39
|
+
/** The binary that planned it, or the planner by name. Default `terraform`. */
|
|
40
|
+
planner?: ChangeSetPlanner;
|
|
41
|
+
/** The estate or workspace the root plans into. */
|
|
42
|
+
scope?: string;
|
|
43
|
+
/** The planner's own digest of this plan, when it printed one. */
|
|
44
|
+
nativeDigest?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* One terraform-family root's part, from its `show -json` plan.
|
|
48
|
+
*
|
|
49
|
+
* Every `resource_changes` entry becomes an entry, no-op and read included.
|
|
50
|
+
* A plan stock marked `errored` is a failed member: its entries are kept,
|
|
51
|
+
* but nothing should apply it.
|
|
52
|
+
*/
|
|
53
|
+
export declare function terraformChangeSetPart(input: TerraformChangeSetPartInput): ChangeSetPart;
|
|
54
|
+
export interface ChoudoufuSetPlanInput {
|
|
55
|
+
/** `choudoufu live-plan-set -json`, parsed. */
|
|
56
|
+
document: unknown;
|
|
57
|
+
/** The member a root belongs to. Default: the root's directory as the set names it. */
|
|
58
|
+
memberFor?: (root: string, estate: string | undefined) => string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* One part per root of a choudoufu set plan (choudoufu#1752). A planned
|
|
62
|
+
* root is {@link terraformChangeSetPart} over its embedded plan, with the
|
|
63
|
+
* estate as scope and choudoufu's own root digest as `nativeDigest`. A
|
|
64
|
+
* failed root is a failed member with its error and no plan digest.
|
|
65
|
+
*/
|
|
66
|
+
export declare function choudoufuSetPlanParts(input: ChoudoufuSetPlanInput): ChangeSetPart[];
|
|
67
|
+
//# sourceMappingURL=change-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,eAAe,EAIf,aAAa,EACb,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AAyBrC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAK7E;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAU3D;AAWD,iHAAiH;AACjH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAQ/H;AA2CD,MAAM,WAAW,2BAA2B;IAC1C,+HAA+H;IAC/H,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,+EAA+E;IAC/E,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,aAAa,CAiDxF;AA6BD,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;CAClE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,aAAa,EAAE,CAwBnF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which `terraform.roots` a change touched (#3183), from the changed files
|
|
3
|
+
* alone.
|
|
4
|
+
*
|
|
5
|
+
* A root is hand-written HCL, not chant source, so `chant lifecycle affected`
|
|
6
|
+
* never sees it move: its artifact diff covers what chant builds. A pull
|
|
7
|
+
* request's plan needs the roots a change reaches, and this answers that
|
|
8
|
+
* from paths: a root is touched when a changed file sits in its directory,
|
|
9
|
+
* in a local module it calls (followed through modules that call modules),
|
|
10
|
+
* or is one of its var files.
|
|
11
|
+
*
|
|
12
|
+
* The module calls are read with a regex over the root's `.tf` and `.tofu`
|
|
13
|
+
* files, the way `./op/activities/live-detect.ts` reads a live block, so
|
|
14
|
+
* this stays out of the HCL parser's dependency graph. Only a `source` that
|
|
15
|
+
* starts with `./` or `../` is followed; a registry or git source is a
|
|
16
|
+
* version pin in the root's own files, which a change to it already touches.
|
|
17
|
+
*/
|
|
18
|
+
import type { TerraformRootConfig } from "./config.js";
|
|
19
|
+
/**
|
|
20
|
+
* Every path, relative to `projectRoot`, whose change touches `root`: its
|
|
21
|
+
* directory, each local module it reaches, and its var files.
|
|
22
|
+
*/
|
|
23
|
+
export declare function rootWatchPaths(projectRoot: string, root: Pick<TerraformRootConfig, "dir" | "varFiles">): string[];
|
|
24
|
+
/**
|
|
25
|
+
* The names of the roots in `roots` that a change to `changedFiles` touches,
|
|
26
|
+
* sorted. `changedFiles` are relative to `projectRoot` with `/` separators,
|
|
27
|
+
* as `git diff --name-only --relative` prints them.
|
|
28
|
+
*/
|
|
29
|
+
export declare function changedRoots(projectRoot: string, roots: Record<string, Pick<TerraformRootConfig, "dir" | "varFiles">>, changedFiles: readonly string[]): string[];
|
|
30
|
+
//# sourceMappingURL=changed-roots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changed-roots.d.ts","sourceRoot":"","sources":["../src/changed-roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAuCpD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG,MAAM,EAAE,CAajH;AAQD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC,EACpE,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,MAAM,EAAE,CAQV"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant terraform pin-rollout`: one run of a pin-bump rollout (#3189), from
|
|
3
|
+
* the command line. The `TerraformPinRolloutOp` composite runs the same code
|
|
4
|
+
* as an Op step.
|
|
5
|
+
*
|
|
6
|
+
* chant terraform pin-rollout --module <source> --from <pin> --to <pin>
|
|
7
|
+
* [--root <dir>]... [--depends-on <dir>=<dir>]... [--ts-source <dir>=<file>]...
|
|
8
|
+
* [--canary <dir>]... [--waves-from <live-waves.json> [--waves-prefix <dir>]]
|
|
9
|
+
* [--pull-request] [--base <branch>] [--remote <name>] [--applied-check <name>] [--json]
|
|
10
|
+
*
|
|
11
|
+
* Without `--pull-request` it reports the next wave and opens nothing. Exit
|
|
12
|
+
* 0 when the rollout is complete or a wave's PR was opened (or would be), 3
|
|
13
|
+
* when it is waiting on a merge or an apply (a gate is a fact, #2119), and 1
|
|
14
|
+
* when it stopped on a failed root or a closed PR.
|
|
15
|
+
*/
|
|
16
|
+
import type { CommandGroup } from "@intentius/chant/cli/command-group";
|
|
17
|
+
import type { TerraformPinRolloutArgs } from "./op/activities/pin-rollout.js";
|
|
18
|
+
/** Parse the verb's flags into the activity's args. Throws on an unknown flag or a missing value. */
|
|
19
|
+
export declare function parsePinRolloutArgs(rawArgs: string[]): {
|
|
20
|
+
args: TerraformPinRolloutArgs;
|
|
21
|
+
json: boolean;
|
|
22
|
+
};
|
|
23
|
+
/** Exit status for a rollout's status. */
|
|
24
|
+
export declare function pinRolloutExitCode(status: string): number;
|
|
25
|
+
export declare const terraformCommands: CommandGroup;
|
|
26
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,oCAAoC,CAAC;AAE5F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAW3E,qGAAqG;AACrG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAiDvG;AAED,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIzD;AAqBD,eAAO,MAAM,iBAAiB,EAAE,YAI/B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `terraformCapabilityPlugin` — the terraform lexicon's capability plugin
|
|
3
|
+
* (#3049). It contributes `terraform-apply`, which lets a component deploy a
|
|
4
|
+
* root named in `terraform.roots`, so a change across many roots runs as a
|
|
5
|
+
* `chant components fan-out`: in an order derived from each component's
|
|
6
|
+
* `dependsOn`, and, with `--wave-gate`, a gate per wave bound to the wave's
|
|
7
|
+
* set digest.
|
|
8
|
+
*
|
|
9
|
+
* The step is `{ kind: "terraform-apply", root: "<name>" }`, with optional
|
|
10
|
+
* `vars` (passed as `-var`, so `stackOutput()` can hand one root's output to
|
|
11
|
+
* another) and `cwd`. It works the same for `terraform`, `tofu` and
|
|
12
|
+
* `choudoufu`, since all three go through the lexicon's activities.
|
|
13
|
+
*
|
|
14
|
+
* ## Plan, then apply exactly that plan
|
|
15
|
+
*
|
|
16
|
+
* `plan` runs `init` and `plan -out`, and answers with the root as the member
|
|
17
|
+
* and `terraformPlanDigest` as its digest: the value a `TerraformApplyOp`
|
|
18
|
+
* gate on this root alone binds (#2300). A gated-wave fan-out folds those into
|
|
19
|
+
* the wave's set digest and hands the plan file back to `run`, which applies
|
|
20
|
+
* that file and nothing else. terraform and tofu refuse a saved plan whose
|
|
21
|
+
* state moved since it was written; choudoufu re-plans against the live
|
|
22
|
+
* system and refuses with exit 3 when its fresh plan differs (choudoufu
|
|
23
|
+
* #878). Either refusal fails the step.
|
|
24
|
+
*
|
|
25
|
+
* Run without a wave plan (`chant run --components`, or a fan-out with no
|
|
26
|
+
* wave gate), `run` plans and applies in one go, which is what `terraform
|
|
27
|
+
* apply` with no plan file does too.
|
|
28
|
+
*/
|
|
29
|
+
import type { Capability } from "@intentius/chant/components/capability";
|
|
30
|
+
import { type CapabilityPlugin } from "@intentius/chant/components/capability-plugin";
|
|
31
|
+
/** The `terraform-apply` step's input. */
|
|
32
|
+
export interface TerraformApplyStepInput {
|
|
33
|
+
/** Key into `terraform.roots`. Also the member's name in a wave's set digest. */
|
|
34
|
+
root: string;
|
|
35
|
+
/** Input variables, after the root's var files. See `TerraformPlanArgs.vars`. */
|
|
36
|
+
vars?: Record<string, unknown>;
|
|
37
|
+
/** Where the `chant.config.*` search starts. Default: the current directory. */
|
|
38
|
+
cwd?: string;
|
|
39
|
+
}
|
|
40
|
+
/** What `terraform-apply` returns. `outputs` is what a dependent's `stackOutput()` reads. */
|
|
41
|
+
export interface TerraformApplyStepOutput {
|
|
42
|
+
root: string;
|
|
43
|
+
planDigest: string;
|
|
44
|
+
/** Whether the plan applied came from the wave's plan rather than one made here. */
|
|
45
|
+
fromWavePlan: boolean;
|
|
46
|
+
/** `terraform output -json`, as `{ name: value }`. */
|
|
47
|
+
outputs: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
export declare const terraformApplyCapability: Capability<TerraformApplyStepInput, TerraformApplyStepOutput>;
|
|
50
|
+
export declare const TERRAFORM_VERB_FAMILIES: {
|
|
51
|
+
readonly apply: readonly ["terraform-apply"];
|
|
52
|
+
};
|
|
53
|
+
export declare const terraformCapabilityPlugin: CapabilityPlugin;
|
|
54
|
+
//# sourceMappingURL=capability-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-plugin.d.ts","sourceRoot":"","sources":["../../src/components/capability-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,wCAAwC,CAAC;AAExG,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAGzG,0CAA0C;AAC1C,MAAM,WAAW,uBAAuB;IACtC,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,6FAA6F;AAC7F,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,YAAY,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAgCD,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,uBAAuB,EAAE,wBAAwB,CA6BlG,CAAC;AAEF,eAAO,MAAM,uBAAuB;aAClC,KAAK,YAAG,iBAAiB;CACjB,CAAC;AAEX,eAAO,MAAM,yBAAyB,EAAE,gBAWvC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TerraformPinRolloutOp composite (#3189): roll a module version out as
|
|
3
|
+
* pin-bump pull requests, one wave at a time.
|
|
4
|
+
*
|
|
5
|
+
* One phase, one `terraformPinRollout` step. Each run reads the rollout's
|
|
6
|
+
* state from the forge and opens at most the next wave's PR, so the Op is
|
|
7
|
+
* meant to run again: on a `schedule`, or from the pipeline that applies a
|
|
8
|
+
* merged wave. Wave N+1 opens only on a run after wave N's PR merged and each
|
|
9
|
+
* of its roots reported its apply check as passed on the merge commit. Until
|
|
10
|
+
* then a run reports where the rollout stands and opens nothing. A failed
|
|
11
|
+
* root fails the run, naming it.
|
|
12
|
+
*
|
|
13
|
+
* The run's `Rollout` outcome is the rollout's status: `opened`, `waiting`,
|
|
14
|
+
* `complete`, or `would-open` in report mode.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { TerraformPinRolloutOp } from "@intentius/chant-lexicon-terraform";
|
|
19
|
+
*
|
|
20
|
+
* export const { op } = TerraformPinRolloutOp({
|
|
21
|
+
* name: "vpc-1-4",
|
|
22
|
+
* module: "oci://registry.example.com/modules/vpc",
|
|
23
|
+
* from: "1.3.0",
|
|
24
|
+
* to: "1.4.0",
|
|
25
|
+
* canaries: ["live/dev/vpc"],
|
|
26
|
+
* mode: "pull-request",
|
|
27
|
+
* schedule: "*\/30 * * * *",
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { OpResource } from "@intentius/chant/op";
|
|
32
|
+
import type { TerraformPinRolloutArgs } from "../op/activities/pin-rollout.js";
|
|
33
|
+
export interface TerraformPinRolloutOpConfig extends TerraformPinRolloutArgs {
|
|
34
|
+
/** Op name (kebab-case). */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Cron expression, so the rollout re-reads the forge and moves on without anyone running it. */
|
|
37
|
+
schedule?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface TerraformPinRolloutOpResources {
|
|
40
|
+
/** Op resource. One Rollout phase. */
|
|
41
|
+
op: InstanceType<typeof OpResource>;
|
|
42
|
+
}
|
|
43
|
+
export declare function TerraformPinRolloutOp(config: TerraformPinRolloutOpConfig): TerraformPinRolloutOpResources;
|
|
44
|
+
//# sourceMappingURL=terraform-pin-rollout-op.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform-pin-rollout-op.d.ts","sourceRoot":"","sources":["../../src/composites/terraform-pin-rollout-op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,8BAA8B;IAC7C,sCAAsC;IACtC,EAAE,EAAE,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,8BAA8B,CAYzG"}
|
package/dist/config.d.ts
CHANGED
|
@@ -101,9 +101,9 @@ export declare const terraformConfigSchema: z.ZodObject<{
|
|
|
101
101
|
* binary alone runs the root stock, exactly as `terraform`/`tofu` do.
|
|
102
102
|
*/
|
|
103
103
|
binary: z.ZodOptional<z.ZodEnum<{
|
|
104
|
+
choudoufu: "choudoufu";
|
|
104
105
|
terraform: "terraform";
|
|
105
106
|
tofu: "tofu";
|
|
106
|
-
choudoufu: "choudoufu";
|
|
107
107
|
}>>;
|
|
108
108
|
/**
|
|
109
109
|
* How far a root's parse follows its `module` calls (#2112), spelled the
|
|
@@ -114,9 +114,9 @@ export declare const terraformConfigSchema: z.ZodObject<{
|
|
|
114
114
|
* nothing. See `hcl/descend.ts`.
|
|
115
115
|
*/
|
|
116
116
|
callModuleType: z.ZodOptional<z.ZodEnum<{
|
|
117
|
-
none: "none";
|
|
118
|
-
local: "local";
|
|
119
117
|
all: "all";
|
|
118
|
+
local: "local";
|
|
119
|
+
none: "none";
|
|
120
120
|
}>>;
|
|
121
121
|
/**
|
|
122
122
|
* The directory a root's local module sources may resolve within (#2874),
|
package/dist/hcl/descend.d.ts
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
* half a root parsed is more useful than none of it.
|
|
47
47
|
*/
|
|
48
48
|
import type { Declarable } from "@intentius/chant/declarable";
|
|
49
|
-
import type { Hcl2Json } from "@intentius/chant/terraform/
|
|
49
|
+
import type { Hcl2Json } from "@intentius/chant/terraform/hcl2json";
|
|
50
50
|
import { type TerraformRootModeOptions } from "./parse.js";
|
|
51
51
|
/** tflint's `--call-module-type`, with the same three states and the same default. */
|
|
52
52
|
export type CallModuleType = "local" | "none" | "all";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descend.d.ts","sourceRoot":"","sources":["../../src/hcl/descend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"descend.d.ts","sourceRoot":"","sources":["../../src/hcl/descend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAGpE,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,SAAS,CAAC;AAEjB,sFAAsF;AACtF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtD,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAYpF;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuDD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,CAAC,CAiGxB"}
|
package/dist/hcl/edges.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* The `${...}` body is tokenized by hcl2json's own expression AST
|
|
16
16
|
* (`getReferencesInExpression`), never by a regex over the string. That is the
|
|
17
|
-
* same instrument `packages/core/src/terraform/
|
|
17
|
+
* same instrument `packages/core/src/terraform/hcl2json.ts` uses for the carve-out
|
|
18
18
|
* advisor, and for the same reason: a quoted address used as a map key
|
|
19
19
|
* (`var.m["aws_s3_bucket.assets.arn"]`) and an escaped `$${...}` literal are
|
|
20
20
|
* not references, and no regex over the raw string can tell. `./references.ts`
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
*/
|
|
86
86
|
import { type Declarable } from "@intentius/chant/declarable";
|
|
87
87
|
import type { EntityReference } from "@intentius/chant/graph-ir";
|
|
88
|
-
import { type Hcl2Json } from "@intentius/chant/terraform/
|
|
88
|
+
import { type Hcl2Json } from "@intentius/chant/terraform/hcl2json";
|
|
89
89
|
import { type TerraformEntity } from "./parse.js";
|
|
90
90
|
/**
|
|
91
91
|
* Classify one AST traversal accessor. `var`/`local` are handled here because
|
package/dist/hcl/edges.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/hcl/edges.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/hcl/edges.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAElF,OAAO,EAA2C,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAkBxF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAItG;AAiED,kGAAkG;AAClG,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AA6CD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAChD,eAAe,EAAE,CA4BnB;AAOD;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the argument of a `jsonencode(...)` call as structure, when it is
|
|
3
|
+
* literal (chant #2286, shared with #2287).
|
|
4
|
+
*
|
|
5
|
+
* hcl2json does not evaluate expressions. `policy = jsonencode({...})` and
|
|
6
|
+
* `container_definitions = jsonencode([...])` both reach a block body as ONE
|
|
7
|
+
* string holding the expression's source text, wrapped as an interpolation:
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* "${jsonencode({\n Version = \"2012-10-17\"\n Statement = [{ Action = \"*\" }]\n })}"
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* The text inside is HCL object syntax, not JSON (`=` or `:` separators, bare
|
|
14
|
+
* keys, newline-separated items, `#` comments). A rule that wants the policy
|
|
15
|
+
* or the container definitions has to read that text itself. This file does
|
|
16
|
+
* so, narrowly: it accepts literal objects, tuples, quoted strings, numbers,
|
|
17
|
+
* `true`, `false` and `null`, and nothing else. Any expression in the
|
|
18
|
+
* argument (a reference, a function call, a for-expression, a splat, a
|
|
19
|
+
* conditional, an operator, a template interpolation inside a string, a
|
|
20
|
+
* heredoc, a parenthesised key) makes the whole read `not-determined`, with a
|
|
21
|
+
* reason naming what was found. It never evaluates anything, so it can never
|
|
22
|
+
* return a value Terraform would not also produce from the same text.
|
|
23
|
+
*
|
|
24
|
+
* Three answers:
|
|
25
|
+
* - `literal`: the value is a single whole-string `${jsonencode(...)}` and
|
|
26
|
+
* its argument is fully literal. `value` is the plain JS value
|
|
27
|
+
* `jsonencode` would encode.
|
|
28
|
+
* - `not-determined`: the value is a `${jsonencode(...)}` call, but the
|
|
29
|
+
* argument holds something this reader does not evaluate.
|
|
30
|
+
* - `not-jsonencode`: the value is not a `${jsonencode(...)}` call at all
|
|
31
|
+
* (a plain string, a reference, `file(...)`, a number, absent). Callers
|
|
32
|
+
* decide what that means for their attribute; a plain string, for example,
|
|
33
|
+
* may itself be JSON from a heredoc.
|
|
34
|
+
*
|
|
35
|
+
* The whole-string test is shape-based: the string starts `${jsonencode(` and
|
|
36
|
+
* ends `)}`. A string that matches that shape but is really a template with
|
|
37
|
+
* two interpolations (`${jsonencode(a)}-${jsonencode(b)}`) fails the literal
|
|
38
|
+
* parse at the point where the first call closes early, and reads as
|
|
39
|
+
* `not-determined`, never as `literal`.
|
|
40
|
+
*/
|
|
41
|
+
export type JsonencodeRead =
|
|
42
|
+
/** The argument is a fully literal HCL object/tuple/string/number/bool/null tree. */
|
|
43
|
+
{
|
|
44
|
+
kind: "literal";
|
|
45
|
+
value: unknown;
|
|
46
|
+
}
|
|
47
|
+
/** `jsonencode(...)` whose argument contains a reference, function call, for-expression, splat, conditional, etc. */
|
|
48
|
+
| {
|
|
49
|
+
kind: "not-determined";
|
|
50
|
+
reason: string;
|
|
51
|
+
}
|
|
52
|
+
/** The value is not a single whole-string `${jsonencode(...)}` at all. */
|
|
53
|
+
| {
|
|
54
|
+
kind: "not-jsonencode";
|
|
55
|
+
};
|
|
56
|
+
export interface ReadJsonencodeOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Read past a non-literal VALUE instead of giving up on the whole argument.
|
|
59
|
+
* Each such value (a reference, a function call, a conditional, an
|
|
60
|
+
* interpolated string, a heredoc, any other expression) becomes an
|
|
61
|
+
* {@link UnknownLeaf} in the returned tree, so a rule can still read the
|
|
62
|
+
* literal fields beside it: `Action = "*"` next to
|
|
63
|
+
* `Resource = aws_s3_bucket.x.arn`, or a container's literal `environment`
|
|
64
|
+
* next to `image = var.image`.
|
|
65
|
+
*
|
|
66
|
+
* The skip is narrow. It consumes one value expression, balancing `()[]{}`
|
|
67
|
+
* and quoted strings, up to the next `,`, newline or closing bracket at its
|
|
68
|
+
* own depth. A member whose KEY is an expression (an interpolated quoted
|
|
69
|
+
* key or a parenthesised computed key) is dropped from its object and listed
|
|
70
|
+
* under {@link UNKNOWN_KEYS} on that object. Damage to the STRUCTURE is
|
|
71
|
+
* still `not-determined`: an expression as the whole argument, including
|
|
72
|
+
* a for-expression or a splat (`jsonencode(local.policy)`,
|
|
73
|
+
* `jsonencode(var.x[*])`), since then no key or element is known.
|
|
74
|
+
*/
|
|
75
|
+
unknownLeaves?: boolean;
|
|
76
|
+
}
|
|
77
|
+
/** Marks a value position `readJsonencode(raw, { unknownLeaves: true })` could not read. */
|
|
78
|
+
export declare const UNKNOWN: unique symbol;
|
|
79
|
+
/** A value position holding an expression; `reason` names what was found there. */
|
|
80
|
+
export interface UnknownLeaf {
|
|
81
|
+
readonly [UNKNOWN]: true;
|
|
82
|
+
readonly reason: string;
|
|
83
|
+
/**
|
|
84
|
+
* The skipped expression's own source text, trimmed (`aws_s3_bucket.x.arn`,
|
|
85
|
+
* `"arn:aws:s3:::${var.bucket}/*"` with its quotes). A rule may read it to
|
|
86
|
+
* rule a value OUT (a quoted template whose literal text already differs
|
|
87
|
+
* from the value it looks for), never to evaluate it.
|
|
88
|
+
*/
|
|
89
|
+
readonly source: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Marks an object, read with `unknownLeaves`, that had members whose KEY is an
|
|
93
|
+
* expression (`"router-${var.n}.rule" = ...`, `(var.k) = ...`). Those members
|
|
94
|
+
* are dropped from the object and their reasons listed here, so a reader can
|
|
95
|
+
* tell "this key is absent" from "some key here could not be read".
|
|
96
|
+
*/
|
|
97
|
+
export declare const UNKNOWN_KEYS: unique symbol;
|
|
98
|
+
/** Whether `obj` is an object that dropped one or more members with an expression key. */
|
|
99
|
+
export declare function hasUnknownKeys(obj: unknown): obj is Record<string, unknown> & {
|
|
100
|
+
[UNKNOWN_KEYS]: string[];
|
|
101
|
+
};
|
|
102
|
+
/** Whether `v` is a value position the reader skipped. */
|
|
103
|
+
export declare function isUnknown(v: unknown): v is UnknownLeaf;
|
|
104
|
+
/** Read `raw` (an hcl2json attribute value) as a `jsonencode(...)` call. */
|
|
105
|
+
export declare function readJsonencode(raw: unknown, options?: ReadJsonencodeOptions): JsonencodeRead;
|
|
106
|
+
//# sourceMappingURL=jsonencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonencode.d.ts","sourceRoot":"","sources":["../../src/hcl/jsonencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,MAAM,MAAM,cAAc;AACxB,qFAAqF;AACnF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AACrC,qHAAqH;GACnH;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC5C,0EAA0E;GACxE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,4FAA4F;AAC5F,eAAO,MAAM,OAAO,EAAE,OAAO,MAAqC,CAAC;AAEnE,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAAyC,CAAC;AAE5E,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAO1G;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAEtD;AAKD,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAmBhG"}
|
package/dist/hcl/marker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../src/hcl/marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,kGAAkG;AAClG,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,mFAAmF;AACnF,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../src/hcl/marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,kGAAkG;AAClG,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,mFAAmF;AACnF,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,YAC3C,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,CACR,CAAC;AA4CX;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAkBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAO/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED,iEAAiE;AACjE,MAAM,MAAM,aAAa;AACvB,sFAAsF;AACpF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AACnE,8FAA8F;GAC5F;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB;;;;GAIG;GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAgB9F;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,GAAG,aAAa,CAe9F"}
|
package/dist/hcl/parse.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* core's exports map already carries (`"./*"` to `./src/*.ts`), so nothing
|
|
18
18
|
* changed in `packages/core/package.json` for this.
|
|
19
19
|
*/
|
|
20
|
-
import { type Hcl2Json } from "@intentius/chant/terraform/
|
|
20
|
+
import { type Hcl2Json } from "@intentius/chant/terraform/hcl2json";
|
|
21
21
|
import { type Declarable } from "@intentius/chant/declarable";
|
|
22
22
|
import type { EntityReference } from "@intentius/chant/graph-ir";
|
|
23
23
|
import type { SuppressionDirective } from "@intentius/chant/lint/suppressions";
|
|
@@ -75,6 +75,13 @@ export interface TerraformEntity extends Declarable {
|
|
|
75
75
|
readonly mode?: TerraformRootMode;
|
|
76
76
|
/** The declared estate name. Present only when `mode` is `"live"`. */
|
|
77
77
|
readonly estate?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Whether `.terraform.lock.hcl` sits beside the root's `.tf` files (#3190,
|
|
80
|
+
* TF040). Stamped on every entity of a root parsed from a directory, and
|
|
81
|
+
* absent when the parse had no directory to look in (a fetched
|
|
82
|
+
* repository, inline source), which reads as "not determined".
|
|
83
|
+
*/
|
|
84
|
+
readonly lockFile?: boolean;
|
|
78
85
|
/** `terraform.roots.<name>.workspace`, recorded so TF025 can flag a non-default one on a live root. */
|
|
79
86
|
readonly workspace?: string;
|
|
80
87
|
/**
|
|
@@ -156,6 +163,21 @@ export declare const OUTPUT_TYPE = "Terraform::Output";
|
|
|
156
163
|
export declare const LOCALS_TYPE = "Terraform::Locals";
|
|
157
164
|
/** A `live { estate = "..." }` block, or an `estate.chdf.hcl` sidecar's content (#2103). */
|
|
158
165
|
export declare const LIVE_TYPE = "Terraform::Live";
|
|
166
|
+
/**
|
|
167
|
+
* Terragrunt config entities (#3417). A `terragrunt.hcl` or `root.hcl` is not
|
|
168
|
+
* a Terraform module, so its blocks are read into these types and never into
|
|
169
|
+
* `TERRAFORM_TYPE`: TF001's `required_version` check and the rest of the
|
|
170
|
+
* module rules keep to the `.tf` files.
|
|
171
|
+
*/
|
|
172
|
+
export declare const TERRAGRUNT_CONFIG_TYPE = "Terraform::TerragruntConfig";
|
|
173
|
+
export declare const TERRAGRUNT_SOURCE_TYPE = "Terraform::TerragruntSource";
|
|
174
|
+
export declare const TERRAGRUNT_DEPENDENCY_TYPE = "Terraform::TerragruntDependency";
|
|
175
|
+
export declare const TERRAGRUNT_REMOTE_STATE_TYPE = "Terraform::TerragruntRemoteState";
|
|
176
|
+
export declare const TERRAGRUNT_GENERATE_TYPE = "Terraform::TerragruntGenerate";
|
|
177
|
+
/** The Terragrunt config files read, by their default names. A `--config` rename is not followed. */
|
|
178
|
+
export declare const TERRAGRUNT_FILENAMES: readonly string[];
|
|
179
|
+
/** Whether `name` (a bare filename) is a Terragrunt config file this lexicon reads. */
|
|
180
|
+
export declare function isTerragruntFileName(name: string): boolean;
|
|
159
181
|
/** The sidecar filename choudoufu reads an estate declaration from when no in-block `live { }` is used. */
|
|
160
182
|
export declare const LIVE_SIDECAR_FILENAME = "estate.chdf.hcl";
|
|
161
183
|
/**
|
|
@@ -186,6 +208,8 @@ export interface TerraformFile {
|
|
|
186
208
|
export declare function splitBundleContent(content: string, fallbackName?: string): TerraformFile[];
|
|
187
209
|
/** Every `.tf` directly under `dir`, in filename order. Non-recursive. */
|
|
188
210
|
export declare function listTerraformFiles(dir: string): string[];
|
|
211
|
+
/** The Terragrunt config files directly under `dir` (`root.hcl`, `terragrunt.hcl`), in filename order like the audit's bundle. */
|
|
212
|
+
export declare function listTerragruntFiles(dir: string): string[];
|
|
189
213
|
/**
|
|
190
214
|
* Read the `estate.chdf.hcl` sidecar beside `dir`'s `.tf` files, if present.
|
|
191
215
|
* Sibling to {@link listTerraformFiles}: the sidecar is plain HCL (a bare
|
|
@@ -214,7 +238,11 @@ export interface TerraformRootModeOptions {
|
|
|
214
238
|
* declaration silently overrides.
|
|
215
239
|
*/
|
|
216
240
|
configEstate?: string;
|
|
241
|
+
/** Stamp `props.lockFile` on every entity (#3190). Set by the two directory-backed parses only. */
|
|
242
|
+
lockFile?: boolean;
|
|
217
243
|
}
|
|
244
|
+
/** The lock file `terraform init` writes beside a root's `.tf` files. */
|
|
245
|
+
export declare const LOCK_FILENAME = ".terraform.lock.hcl";
|
|
218
246
|
/**
|
|
219
247
|
* Parse a set of files into entities keyed `<root>/<address>`. Two blocks that
|
|
220
248
|
* genuinely share an address (two `locals` blocks, or the same address in two
|
package/dist/hcl/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/hcl/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/hcl/parse.ts"],"names":[],"mappings":"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"}
|
package/dist/hcl/roots.d.ts
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* that has not been read yet.
|
|
27
27
|
*/
|
|
28
28
|
import { type Declarable } from "@intentius/chant/declarable";
|
|
29
|
-
import type { Hcl2Json } from "@intentius/chant/terraform/
|
|
29
|
+
import type { Hcl2Json } from "@intentius/chant/terraform/hcl2json";
|
|
30
30
|
import type { TerraformRootConfig } from "../config.js";
|
|
31
31
|
import { type CallModuleType } from "./descend.js";
|
|
32
32
|
export interface TerraformRootsResult {
|
package/dist/hcl/roots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roots.d.ts","sourceRoot":"","sources":["../../src/hcl/roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"roots.d.ts","sourceRoot":"","sources":["../../src/hcl/roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAGvF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACrD;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAiE/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/hcl/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/hcl/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,oCAAoC,CAAC;AAgF/F,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACvB,mFAAmF;IACnF,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,+GAA+G;IAC/G,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAClD,kHAAkH;IAClH,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CA8D3E;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIhF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAKvH"}
|