@aws/nx-plugin 1.0.2 → 1.0.4
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/LICENSE-THIRD-PARTY +30 -14
- package/migrations.json +22 -17
- package/package.json +7 -7
- package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/license/dependency-check/collectors/npm-collector.d.ts +14 -0
- package/src/license/dependency-check/collectors/npm-collector.js +35 -1
- package/src/license/dependency-check/collectors/npm-collector.js.map +1 -1
- package/src/migrations/v1.0.0-rc.98/0001-sandbox-pattern-nested-stacks/migration.js.map +1 -0
- package/src/migrations/v1.0.0-rc.98/0002-shadcn-cn-package/migration.js.map +1 -0
- package/src/migrations/v1.0.2/0001-terraform-harness-environment-variables/migration.js.map +1 -0
- package/src/migrations/v1.0.3/0001-terraform-init-target/metadata.json +3 -0
- package/src/migrations/v1.0.3/0001-terraform-init-target/migration.d.ts +6 -0
- package/src/migrations/v1.0.3/0001-terraform-init-target/migration.js +153 -0
- package/src/migrations/v1.0.3/0001-terraform-init-target/migration.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +7 -7
- package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +9 -9
- package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +8 -8
- package/src/py/dynamodb/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/py/fast-api/__snapshots__/generator.terraform.spec.ts.snap +27 -27
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +8 -8
- package/src/py/rdb/__snapshots__/generator.spec.ts.snap +10 -10
- package/src/sdk/open-api.d.ts +2 -2
- package/src/sdk/open-api.js +1 -1
- package/src/sdk/open-api.js.map +1 -1
- package/src/smithy/project/__snapshots__/generator.spec.ts.snap +16 -16
- package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +19 -19
- package/src/terraform/project/generator.js +52 -44
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +27 -27
- package/src/ts/agent/__snapshots__/generator.spec.ts.snap +8 -8
- package/src/ts/dcr-proxy/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/dynamodb/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/ts/lambda-function/__snapshots__/generator.spec.ts.snap +6 -6
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +4 -4
- package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +18 -18
- package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +28 -28
- package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +3 -3
- package/src/utils/docker.d.ts +1 -1
- package/src/utils/test-migration.d.ts +20 -0
- package/src/utils/test-migration.js +32 -0
- package/src/utils/test-migration.js.map +1 -0
- package/src/utils/versions.d.ts +99 -99
- package/src/utils/versions.js +92 -92
- package/src/utils/versions.js.map +1 -1
- package/src/migrations/latest/sandbox-pattern-nested-stacks/migration.js.map +0 -1
- package/src/migrations/latest/shadcn-cn-package/migration.js.map +0 -1
- package/src/migrations/latest/terraform-harness-environment-variables/migration.js.map +0 -1
- /package/src/migrations/{latest/sandbox-pattern-nested-stacks → v1.0.0-rc.98/0001-sandbox-pattern-nested-stacks}/metadata.json +0 -0
- /package/src/migrations/{latest/sandbox-pattern-nested-stacks → v1.0.0-rc.98/0001-sandbox-pattern-nested-stacks}/migration.d.ts +0 -0
- /package/src/migrations/{latest/sandbox-pattern-nested-stacks → v1.0.0-rc.98/0001-sandbox-pattern-nested-stacks}/migration.js +0 -0
- /package/src/migrations/{latest/shadcn-cn-package → v1.0.0-rc.98/0002-shadcn-cn-package}/metadata.json +0 -0
- /package/src/migrations/{latest/shadcn-cn-package → v1.0.0-rc.98/0002-shadcn-cn-package}/migration.d.ts +0 -0
- /package/src/migrations/{latest/shadcn-cn-package → v1.0.0-rc.98/0002-shadcn-cn-package}/migration.js +0 -0
- /package/src/migrations/{latest/terraform-harness-environment-variables → v1.0.2/0001-terraform-harness-environment-variables}/metadata.json +0 -0
- /package/src/migrations/{latest/terraform-harness-environment-variables → v1.0.2/0001-terraform-harness-environment-variables}/migration.d.ts +0 -0
- /package/src/migrations/{latest/terraform-harness-environment-variables → v1.0.2/0001-terraform-harness-environment-variables}/migration.js +0 -0
|
@@ -416,11 +416,11 @@ terraform {
|
|
|
416
416
|
required_providers {
|
|
417
417
|
aws = {
|
|
418
418
|
source = "hashicorp/aws"
|
|
419
|
-
version = "6.
|
|
419
|
+
version = "6.66.0"
|
|
420
420
|
}
|
|
421
421
|
random = {
|
|
422
422
|
source = "hashicorp/random"
|
|
423
|
-
version = "3.9.
|
|
423
|
+
version = "3.9.1"
|
|
424
424
|
}
|
|
425
425
|
}
|
|
426
426
|
}
|
|
@@ -728,15 +728,15 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with Terraform pro
|
|
|
728
728
|
required_providers {
|
|
729
729
|
archive = {
|
|
730
730
|
source = "hashicorp/archive"
|
|
731
|
-
version = "2.8.
|
|
731
|
+
version = "2.8.1"
|
|
732
732
|
}
|
|
733
733
|
aws = {
|
|
734
734
|
source = "hashicorp/aws"
|
|
735
|
-
version = "6.
|
|
735
|
+
version = "6.66.0"
|
|
736
736
|
}
|
|
737
737
|
random = {
|
|
738
738
|
source = "hashicorp/random"
|
|
739
|
-
version = "3.9.
|
|
739
|
+
version = "3.9.1"
|
|
740
740
|
}
|
|
741
741
|
}
|
|
742
742
|
}
|
|
@@ -2113,7 +2113,7 @@ exports[`tsSmithyApiGenerator > should generate smithy ts api with default optio
|
|
|
2113
2113
|
"shx rm -rf dist/{projectRoot}/build",
|
|
2114
2114
|
"shx rm -rf dist/{projectRoot}/smithy",
|
|
2115
2115
|
"shx mkdir -p dist/{projectRoot}/build",
|
|
2116
|
-
"npx -y mise@2026.9.
|
|
2116
|
+
"npx -y mise@2026.9.14 exec smithy@1.74.0 -- smithy build -c {projectRoot}/smithy-build.json --output dist/{projectRoot}/smithy",
|
|
2117
2117
|
"shx mkdir -p dist/{projectRoot}/build/openapi",
|
|
2118
2118
|
"shx cp \\"dist/{projectRoot}/smithy/source/openapi/*.openapi.json\\" dist/{projectRoot}/build/openapi/openapi.json"
|
|
2119
2119
|
],
|
|
@@ -2253,11 +2253,11 @@ terraform {
|
|
|
2253
2253
|
required_providers {
|
|
2254
2254
|
aws = {
|
|
2255
2255
|
source = "hashicorp/aws"
|
|
2256
|
-
version = "6.
|
|
2256
|
+
version = "6.66.0"
|
|
2257
2257
|
}
|
|
2258
2258
|
random = {
|
|
2259
2259
|
source = "hashicorp/random"
|
|
2260
|
-
version = "3.9.
|
|
2260
|
+
version = "3.9.1"
|
|
2261
2261
|
}
|
|
2262
2262
|
}
|
|
2263
2263
|
}
|
|
@@ -2562,15 +2562,15 @@ output "waf_web_acl_arn" {
|
|
|
2562
2562
|
required_providers {
|
|
2563
2563
|
archive = {
|
|
2564
2564
|
source = "hashicorp/archive"
|
|
2565
|
-
version = "2.8.
|
|
2565
|
+
version = "2.8.1"
|
|
2566
2566
|
}
|
|
2567
2567
|
aws = {
|
|
2568
2568
|
source = "hashicorp/aws"
|
|
2569
|
-
version = "6.
|
|
2569
|
+
version = "6.66.0"
|
|
2570
2570
|
}
|
|
2571
2571
|
random = {
|
|
2572
2572
|
source = "hashicorp/random"
|
|
2573
|
-
version = "3.9.
|
|
2573
|
+
version = "3.9.1"
|
|
2574
2574
|
}
|
|
2575
2575
|
}
|
|
2576
2576
|
}
|
|
@@ -3566,11 +3566,11 @@ terraform {
|
|
|
3566
3566
|
required_providers {
|
|
3567
3567
|
aws = {
|
|
3568
3568
|
source = "hashicorp/aws"
|
|
3569
|
-
version = "6.
|
|
3569
|
+
version = "6.66.0"
|
|
3570
3570
|
}
|
|
3571
3571
|
random = {
|
|
3572
3572
|
source = "hashicorp/random"
|
|
3573
|
-
version = "3.9.
|
|
3573
|
+
version = "3.9.1"
|
|
3574
3574
|
}
|
|
3575
3575
|
}
|
|
3576
3576
|
}
|
|
@@ -3875,15 +3875,15 @@ output "waf_web_acl_arn" {
|
|
|
3875
3875
|
required_providers {
|
|
3876
3876
|
archive = {
|
|
3877
3877
|
source = "hashicorp/archive"
|
|
3878
|
-
version = "2.8.
|
|
3878
|
+
version = "2.8.1"
|
|
3879
3879
|
}
|
|
3880
3880
|
aws = {
|
|
3881
3881
|
source = "hashicorp/aws"
|
|
3882
|
-
version = "6.
|
|
3882
|
+
version = "6.66.0"
|
|
3883
3883
|
}
|
|
3884
3884
|
random = {
|
|
3885
3885
|
source = "hashicorp/random"
|
|
3886
|
-
version = "3.9.
|
|
3886
|
+
version = "3.9.1"
|
|
3887
3887
|
}
|
|
3888
3888
|
}
|
|
3889
3889
|
}
|
|
@@ -4864,15 +4864,15 @@ exports[`tsSmithyApiGenerator > terraform iac > should generate terraform with c
|
|
|
4864
4864
|
required_providers {
|
|
4865
4865
|
archive = {
|
|
4866
4866
|
source = "hashicorp/archive"
|
|
4867
|
-
version = "2.8.
|
|
4867
|
+
version = "2.8.1"
|
|
4868
4868
|
}
|
|
4869
4869
|
aws = {
|
|
4870
4870
|
source = "hashicorp/aws"
|
|
4871
|
-
version = "6.
|
|
4871
|
+
version = "6.66.0"
|
|
4872
4872
|
}
|
|
4873
4873
|
random = {
|
|
4874
4874
|
source = "hashicorp/random"
|
|
4875
|
-
version = "3.9.
|
|
4875
|
+
version = "3.9.1"
|
|
4876
4876
|
}
|
|
4877
4877
|
}
|
|
4878
4878
|
}
|
|
@@ -112,11 +112,10 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
112
112
|
const distDir = joinPathFragments(outDirToRootRelativePath, 'dist', '{projectRoot}');
|
|
113
113
|
const tfDistDir = joinPathFragments(distDir, 'terraform');
|
|
114
114
|
const checkovReportJsonPath = joinPathFragments(distDir, 'checkov', 'checkov_report.json');
|
|
115
|
-
// `
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
const
|
|
119
|
-
const validateDataDir = joinPathFragments(distDir, 'terraform-validate');
|
|
115
|
+
// `terraform-init` keeps its `.terraform` here rather than in `src`, so it
|
|
116
|
+
// never races the backend-configured targets over the shared one. `test` and
|
|
117
|
+
// `validate` read this same directory rather than initialising their own.
|
|
118
|
+
const initDataDir = joinPathFragments(distDir, 'terraform-init');
|
|
120
119
|
// Provider downloads persist here, so a target whose `.terraform` was cleaned
|
|
121
120
|
// links the providers it already has rather than re-downloading them. Nx does
|
|
122
121
|
// not interpolate `{workspaceRoot}` inside `env`, so this is relative to the
|
|
@@ -128,7 +127,8 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
128
127
|
// init` runs filling a shared cache concurrently each compute a different hash
|
|
129
128
|
// for the same provider, because the hash covers a directory the other is
|
|
130
129
|
// still writing, and terraform then rejects the mismatch against the lock
|
|
131
|
-
// file.
|
|
130
|
+
// file. `terraform-init` is the only target that fills it, and the targets that
|
|
131
|
+
// need the providers depend on that one, so no two writers ever meet.
|
|
132
132
|
const pluginCacheDir = joinPathFragments(outDirToRootRelativePath, '.terraform', 'plugin-cache', '{projectRoot}');
|
|
133
133
|
// Calculate relative path from current project to common/terraform/metrics
|
|
134
134
|
// Use forward slashes for terraform module source paths (even on Windows)
|
|
@@ -227,6 +227,7 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
227
227
|
cwd: '{workspaceRoot}'
|
|
228
228
|
},
|
|
229
229
|
dependsOn: [
|
|
230
|
+
'terraform-init',
|
|
230
231
|
'^init'
|
|
231
232
|
]
|
|
232
233
|
},
|
|
@@ -310,6 +311,32 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
310
311
|
env: {
|
|
311
312
|
TF_PLUGIN_CACHE_DIR: pluginCacheDir
|
|
312
313
|
}
|
|
314
|
+
},
|
|
315
|
+
dependsOn: [
|
|
316
|
+
'terraform-init'
|
|
317
|
+
]
|
|
318
|
+
},
|
|
319
|
+
// `-backend=false` installs the modules and providers without configuring
|
|
320
|
+
// the S3 backend, so this needs no credentials and runs on a fresh
|
|
321
|
+
// workspace before `bootstrap`. Uncached: a cache hit on another machine
|
|
322
|
+
// would report success over an empty `TF_DATA_DIR` and plugin cache.
|
|
323
|
+
'terraform-init': {
|
|
324
|
+
executor: 'nx:run-commands',
|
|
325
|
+
options: {
|
|
326
|
+
commands: [
|
|
327
|
+
{
|
|
328
|
+
command: `shx mkdir -p ${pluginCacheDir}`,
|
|
329
|
+
forwardAllArgs: false
|
|
330
|
+
},
|
|
331
|
+
'terraform init -backend=false'
|
|
332
|
+
],
|
|
333
|
+
forwardAllArgs: true,
|
|
334
|
+
cwd: '{projectRoot}/src',
|
|
335
|
+
parallel: false,
|
|
336
|
+
env: {
|
|
337
|
+
TF_DATA_DIR: initDataDir,
|
|
338
|
+
TF_PLUGIN_CACHE_DIR: pluginCacheDir
|
|
339
|
+
}
|
|
313
340
|
}
|
|
314
341
|
},
|
|
315
342
|
// `^production` mirrors `test`: checkov resolves the relative modules a
|
|
@@ -331,14 +358,11 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
331
358
|
}
|
|
332
359
|
},
|
|
333
360
|
// Terraform's native test framework, which runs any `.tftest.hcl` files.
|
|
334
|
-
// A project with none is a no-op success.
|
|
335
|
-
//
|
|
336
|
-
//
|
|
337
|
-
//
|
|
338
|
-
//
|
|
339
|
-
// so it never races the backend-configured targets over the shared one.
|
|
340
|
-
// `^production` is what invalidates the cache when a consumed module
|
|
341
|
-
// changes; `{projectRoot}/**/*` alone would serve a stale pass.
|
|
361
|
+
// A project with none is a no-op success. Runs against the `TF_DATA_DIR`
|
|
362
|
+
// `terraform-init` prepared, so it needs no credentials and works on a fresh
|
|
363
|
+
// workspace before `bootstrap`. `^production` is what invalidates the cache
|
|
364
|
+
// when a consumed module changes; `{projectRoot}/**/*` alone would serve a
|
|
365
|
+
// stale pass.
|
|
342
366
|
//
|
|
343
367
|
// `TF_DATA_DIR` is terraform's working directory, not an artifact: its
|
|
344
368
|
// provider entries are symlinks into the shared plugin cache, so restoring
|
|
@@ -354,29 +378,19 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
354
378
|
],
|
|
355
379
|
outputs: [],
|
|
356
380
|
options: {
|
|
357
|
-
|
|
358
|
-
{
|
|
359
|
-
command: `shx mkdir -p ${pluginCacheDir}`,
|
|
360
|
-
forwardAllArgs: false
|
|
361
|
-
},
|
|
362
|
-
'terraform init -backend=false',
|
|
363
|
-
'terraform test'
|
|
364
|
-
],
|
|
381
|
+
command: 'terraform test',
|
|
365
382
|
forwardAllArgs: true,
|
|
366
383
|
cwd: '{projectRoot}/src',
|
|
367
|
-
parallel: false,
|
|
368
384
|
env: {
|
|
369
|
-
TF_DATA_DIR:
|
|
370
|
-
TF_PLUGIN_CACHE_DIR: pluginCacheDir
|
|
385
|
+
TF_DATA_DIR: initDataDir
|
|
371
386
|
}
|
|
372
|
-
}
|
|
387
|
+
},
|
|
388
|
+
dependsOn: [
|
|
389
|
+
'terraform-init'
|
|
390
|
+
]
|
|
373
391
|
},
|
|
374
|
-
// Mirrors `test`:
|
|
375
|
-
//
|
|
376
|
-
// fresh workspace before `bootstrap` and needs no credentials. `TF_DATA_DIR`
|
|
377
|
-
// keeps that `.terraform` out of `src`, so it never races the
|
|
378
|
-
// backend-configured targets over the shared one, and declaring no outputs
|
|
379
|
-
// keeps a cache hit to what it asserts (see `test` above).
|
|
392
|
+
// Mirrors `test`: validates against the `TF_DATA_DIR` `terraform-init`
|
|
393
|
+
// prepared, and declares no outputs for the same reason (see `test` above).
|
|
380
394
|
validate: {
|
|
381
395
|
executor: 'nx:run-commands',
|
|
382
396
|
cache: true,
|
|
@@ -386,22 +400,16 @@ export async function terraformProjectGenerator(tree, schema) {
|
|
|
386
400
|
],
|
|
387
401
|
outputs: [],
|
|
388
402
|
options: {
|
|
389
|
-
|
|
390
|
-
{
|
|
391
|
-
command: `shx mkdir -p ${pluginCacheDir}`,
|
|
392
|
-
forwardAllArgs: false
|
|
393
|
-
},
|
|
394
|
-
'terraform init -backend=false',
|
|
395
|
-
'terraform validate'
|
|
396
|
-
],
|
|
403
|
+
command: 'terraform validate',
|
|
397
404
|
forwardAllArgs: true,
|
|
398
405
|
cwd: '{projectRoot}/src',
|
|
399
|
-
parallel: false,
|
|
400
406
|
env: {
|
|
401
|
-
TF_DATA_DIR:
|
|
402
|
-
TF_PLUGIN_CACHE_DIR: pluginCacheDir
|
|
407
|
+
TF_DATA_DIR: initDataDir
|
|
403
408
|
}
|
|
404
|
-
}
|
|
409
|
+
},
|
|
410
|
+
dependsOn: [
|
|
411
|
+
'terraform-init'
|
|
412
|
+
]
|
|
405
413
|
}
|
|
406
414
|
};
|
|
407
415
|
const projectConfiguration = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addProjectConfiguration,\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readNxJson,\n type TargetConfiguration,\n type Tree,\n updateJson,\n updateNxJson,\n} from '@nx/devkit';\nimport { join, relative } from 'path';\nimport { addLicenseCheckToLintTarget } from '../../license/config.js';\nimport { getTsLibDetails } from '../../ts/lib/generator.js';\nimport { addTsDependencies } from '../../utils/add-dependencies.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../utils/format.js';\nimport { updateGitIgnore } from '../../utils/git.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics.js';\nimport { kebabCase } from '../../utils/names.js';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx.js';\nimport { sortObjectKeys } from '../../utils/object.js';\nimport { uvxCommand } from '../../utils/py.js';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from '../../utils/shared-constructs-constants.js';\nimport {\n terraformProviderVersions,\n withVersions,\n} from '../../utils/versions.js';\nimport type { TerraformProjectGeneratorSchema } from './schema';\n\n// Terraform projects carry no package.json, so their build tooling and the AWS\n// SDK the vended deploy scripts import are declared at the workspace root. This\n// generator records no metadata, so nothing a predicate could read.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@nx-extend/terraform', dev: true, root: true },\n { name: 'shx', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n { name: '@aws-sdk/client-s3', dev: true, root: true },\n { name: '@aws-sdk/client-sts', dev: true, root: true },\n { name: '@aws-sdk/credential-providers', dev: true, root: true },\n { name: '@smithy/config-resolver', dev: true, root: true },\n { name: '@smithy/node-config-provider', dev: true, root: true },\n // Declared for its pinned version, which goes into npm's `overrides` below.\n { name: '@nx/devkit', versionOnly: true },\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\n\nconst NX_EXTEND_PLUGIN = '@nx-extend/terraform';\nexport const TERRAFORM_PROJECT_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Checks formatting, mirroring the TypeScript and Python `format` targets: the\n * base target fails on an unformatted file and the `fix` configuration rewrites\n * it. Writing from the base target would rewrite the `default` input the hash is\n * computed over, so the target could never cache-hit.\n *\n * Scoped to the project's own `src` rather than `-recursive`, so it checks the\n * files the vended templates cover. `-diff` names what to fix when it fails.\n */\nexport const TERRAFORM_FORMAT_TARGET: TargetConfiguration = {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform fmt -check -diff',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n configurations: {\n fix: {\n command: 'terraform fmt',\n },\n 'skip-lint': {\n // Cross-platform no-op (`true` is not available on Windows cmd).\n command: 'node -e \"\"',\n },\n },\n};\n\nexport async function terraformProjectGenerator(\n tree: Tree,\n schema: TerraformProjectGeneratorSchema,\n): Promise<GeneratorCallback> {\n // Just use getTsLibDetails as it isn't specific to TS\n const lib = getTsLibDetails(tree, schema);\n const { fullyQualifiedName: sharedTfProjectName } = getTsLibDetails(tree, {\n name: SHARED_TERRAFORM_NAME,\n });\n\n const outDirToRootRelativePath = relative(\n join(tree.root, lib.dir, 'src'),\n tree.root,\n ).replace(/\\\\/g, '/');\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n '{projectRoot}',\n );\n const tfDistDir = joinPathFragments(distDir, 'terraform');\n const checkovReportJsonPath = joinPathFragments(\n distDir,\n 'checkov',\n 'checkov_report.json',\n );\n // `test` and `validate` each keep their `.terraform` here rather than in\n // `src`, so initialising one never races the backend-configured targets, or\n // the other, over the shared one.\n const testDataDir = joinPathFragments(distDir, 'terraform-test');\n const validateDataDir = joinPathFragments(distDir, 'terraform-validate');\n\n // Provider downloads persist here, so a target whose `.terraform` was cleaned\n // links the providers it already has rather than re-downloading them. Nx does\n // not interpolate `{workspaceRoot}` inside `env`, so this is relative to the\n // target's `cwd`. It sits under `.terraform`, which this generator gitignores\n // — that is also what keeps the providers out of Nx's file walk — and unlike\n // `.nx/cache` it survives `nx reset`.\n //\n // One cache per project rather than one for the workspace: two `terraform\n // init` runs filling a shared cache concurrently each compute a different hash\n // for the same provider, because the hash covers a directory the other is\n // still writing, and terraform then rejects the mismatch against the lock\n // file. Per project, no two writers ever meet, so the targets stay parallel.\n const pluginCacheDir = joinPathFragments(\n outDirToRootRelativePath,\n '.terraform',\n 'plugin-cache',\n '{projectRoot}',\n );\n\n // Calculate relative path from current project to common/terraform/metrics\n // Use forward slashes for terraform module source paths (even on Windows)\n const metricsModulePath = relative(\n join(tree.root, lib.dir, 'src'),\n join(tree.root, 'packages', SHARED_TERRAFORM_DIR, 'src', 'metrics'),\n ).replace(/\\\\/g, '/');\n\n updateGitIgnore(tree, '.', (patterns) => [...patterns, '.terraform']);\n\n const applicationTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n apply: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: `terraform apply ${tfDistDir}/dev.tfplan`,\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['plan'],\n },\n bootstrap: {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/bootstrap.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n },\n 'bootstrap-destroy': {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n commands: [\n 'tsx {projectRoot}/scripts/bootstrap-destroy.ts {projectRoot}',\n ],\n cwd: '{workspaceRoot}',\n },\n },\n build: {\n dependsOn: ['format', 'checkov', 'test', `${sharedTfProjectName}:build`],\n },\n deploy: {\n dependsOn: ['apply'],\n },\n // The artifact-only sibling of build, which `plan` depends on.\n assemble: {\n dependsOn: [`${sharedTfProjectName}:assemble`],\n },\n destroy: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: 'terraform destroy -var-file=env/dev.tfvars',\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['init'],\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n env: { TF_ENV: 'dev' },\n },\n },\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/init.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n dependsOn: ['^init'],\n },\n output: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform output -json',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n plan: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n commands: [\n `shx mkdir -p ${tfDistDir}`,\n `terraform plan -var-file=env/dev.tfvars -out=${tfDistDir}/dev.tfplan`,\n ],\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n },\n dependsOn: ['init', 'validate', '^validate', 'assemble'],\n },\n };\n\n const libTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n build: {\n dependsOn: ['format', 'checkov', 'test'],\n },\n // A Terraform library vends modules rather than a deployable artifact, so\n // its `assemble` carries only whatever the consuming projects register on it.\n assemble: {\n executor: 'nx:noop',\n },\n format: TERRAFORM_FORMAT_TARGET,\n // Terraform has no linter of its own, so `lint` orchestrates the format\n // check. It exists so `nx run-many --target lint` reaches terraform\n // projects, and so `--configuration=fix` and `--configuration=skip-lint`\n // propagate to `format` the way they do for TypeScript and Python projects.\n lint: {\n dependsOn: ['format'],\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n commands: [\n {\n command: `shx mkdir -p ${pluginCacheDir}`,\n forwardAllArgs: false,\n },\n 'terraform init',\n ],\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n env: { TF_PLUGIN_CACHE_DIR: pluginCacheDir },\n },\n },\n // `^production` mirrors `test`: checkov resolves the relative modules a\n // project consumes, so a change in one must invalidate the scan.\n checkov: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default', '^production'],\n outputs: ['{workspaceRoot}/dist/{projectRoot}/checkov'],\n options: {\n command: uvxCommand(\n 'checkov',\n `--config-file ../checkov.yml --directory . -o cli -o json --output-file-path console,${checkovReportJsonPath}`,\n ),\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n // Terraform's native test framework, which runs any `.tftest.hcl` files.\n // A project with none is a no-op success.\n //\n // `-backend=false` installs the modules and providers the tests need\n // without configuring the S3 backend, so this runs before `bootstrap` and\n // needs no credentials. `TF_DATA_DIR` keeps that `.terraform` out of `src`,\n // so it never races the backend-configured targets over the shared one.\n // `^production` is what invalidates the cache when a consumed module\n // changes; `{projectRoot}/**/*` alone would serve a stale pass.\n //\n // `TF_DATA_DIR` is terraform's working directory, not an artifact: its\n // provider entries are symlinks into the shared plugin cache, so restoring\n // it on another machine would yield dangling links while the commands that\n // repopulate them are skipped. Declaring no outputs keeps a cache hit to\n // what it actually asserts — that the tests passed for these inputs.\n test: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default', '^production'],\n outputs: [],\n options: {\n commands: [\n { command: `shx mkdir -p ${pluginCacheDir}`, forwardAllArgs: false },\n 'terraform init -backend=false',\n 'terraform test',\n ],\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n env: { TF_DATA_DIR: testDataDir, TF_PLUGIN_CACHE_DIR: pluginCacheDir },\n },\n },\n // Mirrors `test`: `-backend=false` installs the modules and providers\n // validation needs without configuring the S3 backend, so this runs on a\n // fresh workspace before `bootstrap` and needs no credentials. `TF_DATA_DIR`\n // keeps that `.terraform` out of `src`, so it never races the\n // backend-configured targets over the shared one, and declaring no outputs\n // keeps a cache hit to what it asserts (see `test` above).\n validate: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default', '^production'],\n outputs: [],\n options: {\n commands: [\n { command: `shx mkdir -p ${pluginCacheDir}`, forwardAllArgs: false },\n 'terraform init -backend=false',\n 'terraform validate',\n ],\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n env: {\n TF_DATA_DIR: validateDataDir,\n TF_PLUGIN_CACHE_DIR: pluginCacheDir,\n },\n },\n },\n };\n\n const projectConfiguration = {\n root: lib.dir,\n projectType: schema.type,\n sourceRoot: joinPathFragments(lib.dir, 'src'),\n targets: sortObjectKeys({\n ...libTargets,\n ...(schema.type === 'application' ? applicationTargets : {}),\n }),\n };\n\n // Only create the project configuration on first run; skip it on re-run so\n // existing project.json customisations are preserved.\n if (!projectExists(tree, lib.fullyQualifiedName)) {\n addProjectConfiguration(tree, lib.fullyQualifiedName, projectConfiguration);\n }\n\n // The `lint` target checks licenses alongside formatting, as it does for\n // TypeScript and Python projects.\n addLicenseCheckToLintTarget(tree, lib.fullyQualifiedName);\n\n // This generator IS the Terraform project, so the provider is fixed.\n addGeneratorMetadata(\n tree,\n lib.fullyQualifiedName,\n TERRAFORM_PROJECT_GENERATOR_INFO,\n { iac: 'terraform' },\n );\n\n // The guides tell the reader to declare resources in `main.tf`, add variables\n // and outputs, and configure environments in `env/*.tfvars`, so everything\n // here is scaffolded once and then left alone. Provider version bumps reach\n // `providers.tf` through the vended version sync, which rewrites the pin in\n // place rather than the whole file.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, `./files/${schema.type}`),\n lib.dir,\n {\n metricsModulePath,\n stateKeyPrefix: kebabCase(lib.fullyQualifiedName),\n ...terraformProviderVersions(),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Checkov skips are the user's to curate, so preserve any they have added.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, './files/checkov'),\n lib.dir,\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n const nxJson = readNxJson(tree);\n\n if (\n !nxJson.plugins?.find((p) =>\n typeof p === 'string'\n ? p === NX_EXTEND_PLUGIN\n : p.plugin === NX_EXTEND_PLUGIN,\n )\n ) {\n nxJson.plugins = [...(nxJson.plugins ?? []), NX_EXTEND_PLUGIN];\n updateNxJson(tree, nxJson);\n }\n\n // Ensure shared constructs for Terraform are created\n await sharedConstructsGenerator(tree, { iac: 'terraform' }, DEPENDENCIES);\n\n // Add Terraform metrics\n await addGeneratorMetricsIfApplicable(tree, [\n TERRAFORM_PROJECT_GENERATOR_INFO,\n ]);\n\n addTsDependencies(tree, DEPENDENCIES);\n\n // @nx-extend/terraform has a peer dependency on @nx/devkit ^21.0.0 which causes\n // npm install to fail, so for NPM we add a resolution\n // Can remove when https://github.com/TriPSs/nx-extend/issues/407 is addressed\n if (detectPackageManager() === 'npm') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.overrides = {\n ...packageJson.overrides,\n ...withVersions(DEPENDENCIES, ['@nx/devkit']),\n };\n return packageJson;\n });\n }\n\n // `updateProjectConfiguration` re-serialises project.json with every inline\n // array expanded, which the vended `format` target rejects.\n await formatFilesInSubtree(tree);\n\n // `@nx-extend/terraform` is registered as an Nx plugin in nx.json, so Nx\n // loads it when computing the project graph — it must resolve even if the\n // caller would otherwise prefer to defer installing.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: [NX_EXTEND_PLUGIN],\n });\n}\nexport default terraformProjectGenerator;\n"],"names":["addProjectConfiguration","detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readNxJson","updateJson","updateNxJson","join","relative","addLicenseCheckToLintTarget","getTsLibDetails","addTsDependencies","declareDependencies","ownedElsewhere","formatFilesInSubtree","updateGitIgnore","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","uvxCommand","sharedConstructsGenerator","SHARED_CONSTRUCTS_DEPENDENCIES","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","DEPENDENCIES","ts","name","dev","root","versionOnly","NX_EXTEND_PLUGIN","TERRAFORM_PROJECT_GENERATOR_INFO","filename","TERRAFORM_FORMAT_TARGET","executor","cache","inputs","options","command","forwardAllArgs","cwd","configurations","fix","terraformProjectGenerator","tree","schema","lib","fullyQualifiedName","sharedTfProjectName","outDirToRootRelativePath","dir","replace","distDir","tfDistDir","checkovReportJsonPath","testDataDir","validateDataDir","pluginCacheDir","metricsModulePath","patterns","applicationTargets","apply","defaultConfiguration","dependsOn","bootstrap","commands","build","deploy","assemble","destroy","init","env","TF_ENV","output","plan","parallel","libTargets","format","lint","TF_PLUGIN_CACHE_DIR","checkov","outputs","test","TF_DATA_DIR","validate","projectConfiguration","projectType","type","sourceRoot","targets","iac","dirname","stateKeyPrefix","overwriteStrategy","KeepExisting","nxJson","plugins","find","p","plugin","packageJson","overrides","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"sourcesContent":["/**\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport {\n addProjectConfiguration,\n detectPackageManager,\n type GeneratorCallback,\n generateFiles,\n joinPathFragments,\n OverwriteStrategy,\n readNxJson,\n type TargetConfiguration,\n type Tree,\n updateJson,\n updateNxJson,\n} from '@nx/devkit';\nimport { join, relative } from 'path';\nimport { addLicenseCheckToLintTarget } from '../../license/config.js';\nimport { getTsLibDetails } from '../../ts/lib/generator.js';\nimport { addTsDependencies } from '../../utils/add-dependencies.js';\nimport {\n declareDependencies,\n ownedElsewhere,\n} from '../../utils/declared-dependencies.js';\nimport { formatFilesInSubtree } from '../../utils/format.js';\nimport { updateGitIgnore } from '../../utils/git.js';\nimport { installDependencies } from '../../utils/install.js';\nimport { addGeneratorMetricsIfApplicable } from '../../utils/metrics.js';\nimport { kebabCase } from '../../utils/names.js';\nimport {\n addGeneratorMetadata,\n getGeneratorInfo,\n type NxGeneratorInfo,\n projectExists,\n} from '../../utils/nx.js';\nimport { sortObjectKeys } from '../../utils/object.js';\nimport { uvxCommand } from '../../utils/py.js';\nimport { sharedConstructsGenerator } from '../../utils/shared-constructs.js';\nimport {\n SHARED_CONSTRUCTS_DEPENDENCIES,\n SHARED_TERRAFORM_DIR,\n SHARED_TERRAFORM_NAME,\n} from '../../utils/shared-constructs-constants.js';\nimport {\n terraformProviderVersions,\n withVersions,\n} from '../../utils/versions.js';\nimport type { TerraformProjectGeneratorSchema } from './schema';\n\n// Terraform projects carry no package.json, so their build tooling and the AWS\n// SDK the vended deploy scripts import are declared at the workspace root. This\n// generator records no metadata, so nothing a predicate could read.\nexport const DEPENDENCIES = declareDependencies()({\n ts: [\n { name: '@nx-extend/terraform', dev: true, root: true },\n { name: 'shx', dev: true, root: true },\n { name: 'tsx', dev: true, root: true },\n { name: '@aws-sdk/client-s3', dev: true, root: true },\n { name: '@aws-sdk/client-sts', dev: true, root: true },\n { name: '@aws-sdk/credential-providers', dev: true, root: true },\n { name: '@smithy/config-resolver', dev: true, root: true },\n { name: '@smithy/node-config-provider', dev: true, root: true },\n // Declared for its pinned version, which goes into npm's `overrides` below.\n { name: '@nx/devkit', versionOnly: true },\n ...ownedElsewhere(SHARED_CONSTRUCTS_DEPENDENCIES),\n ],\n});\n\nconst NX_EXTEND_PLUGIN = '@nx-extend/terraform';\nexport const TERRAFORM_PROJECT_GENERATOR_INFO: NxGeneratorInfo =\n getGeneratorInfo(import.meta.filename);\n\n/**\n * Checks formatting, mirroring the TypeScript and Python `format` targets: the\n * base target fails on an unformatted file and the `fix` configuration rewrites\n * it. Writing from the base target would rewrite the `default` input the hash is\n * computed over, so the target could never cache-hit.\n *\n * Scoped to the project's own `src` rather than `-recursive`, so it checks the\n * files the vended templates cover. `-diff` names what to fix when it fails.\n */\nexport const TERRAFORM_FORMAT_TARGET: TargetConfiguration = {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform fmt -check -diff',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n configurations: {\n fix: {\n command: 'terraform fmt',\n },\n 'skip-lint': {\n // Cross-platform no-op (`true` is not available on Windows cmd).\n command: 'node -e \"\"',\n },\n },\n};\n\nexport async function terraformProjectGenerator(\n tree: Tree,\n schema: TerraformProjectGeneratorSchema,\n): Promise<GeneratorCallback> {\n // Just use getTsLibDetails as it isn't specific to TS\n const lib = getTsLibDetails(tree, schema);\n const { fullyQualifiedName: sharedTfProjectName } = getTsLibDetails(tree, {\n name: SHARED_TERRAFORM_NAME,\n });\n\n const outDirToRootRelativePath = relative(\n join(tree.root, lib.dir, 'src'),\n tree.root,\n ).replace(/\\\\/g, '/');\n const distDir = joinPathFragments(\n outDirToRootRelativePath,\n 'dist',\n '{projectRoot}',\n );\n const tfDistDir = joinPathFragments(distDir, 'terraform');\n const checkovReportJsonPath = joinPathFragments(\n distDir,\n 'checkov',\n 'checkov_report.json',\n );\n // `terraform-init` keeps its `.terraform` here rather than in `src`, so it\n // never races the backend-configured targets over the shared one. `test` and\n // `validate` read this same directory rather than initialising their own.\n const initDataDir = joinPathFragments(distDir, 'terraform-init');\n\n // Provider downloads persist here, so a target whose `.terraform` was cleaned\n // links the providers it already has rather than re-downloading them. Nx does\n // not interpolate `{workspaceRoot}` inside `env`, so this is relative to the\n // target's `cwd`. It sits under `.terraform`, which this generator gitignores\n // — that is also what keeps the providers out of Nx's file walk — and unlike\n // `.nx/cache` it survives `nx reset`.\n //\n // One cache per project rather than one for the workspace: two `terraform\n // init` runs filling a shared cache concurrently each compute a different hash\n // for the same provider, because the hash covers a directory the other is\n // still writing, and terraform then rejects the mismatch against the lock\n // file. `terraform-init` is the only target that fills it, and the targets that\n // need the providers depend on that one, so no two writers ever meet.\n const pluginCacheDir = joinPathFragments(\n outDirToRootRelativePath,\n '.terraform',\n 'plugin-cache',\n '{projectRoot}',\n );\n\n // Calculate relative path from current project to common/terraform/metrics\n // Use forward slashes for terraform module source paths (even on Windows)\n const metricsModulePath = relative(\n join(tree.root, lib.dir, 'src'),\n join(tree.root, 'packages', SHARED_TERRAFORM_DIR, 'src', 'metrics'),\n ).replace(/\\\\/g, '/');\n\n updateGitIgnore(tree, '.', (patterns) => [...patterns, '.terraform']);\n\n const applicationTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n apply: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: `terraform apply ${tfDistDir}/dev.tfplan`,\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['plan'],\n },\n bootstrap: {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/bootstrap.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n },\n 'bootstrap-destroy': {\n executor: 'nx:run-commands',\n options: {\n forwardAllArgs: true,\n commands: [\n 'tsx {projectRoot}/scripts/bootstrap-destroy.ts {projectRoot}',\n ],\n cwd: '{workspaceRoot}',\n },\n },\n build: {\n dependsOn: ['format', 'checkov', 'test', `${sharedTfProjectName}:build`],\n },\n deploy: {\n dependsOn: ['apply'],\n },\n // The artifact-only sibling of build, which `plan` depends on.\n assemble: {\n dependsOn: [`${sharedTfProjectName}:assemble`],\n },\n destroy: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n command: 'terraform destroy -var-file=env/dev.tfvars',\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n dependsOn: ['init'],\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n env: { TF_ENV: 'dev' },\n },\n },\n options: {\n forwardAllArgs: true,\n commands: ['tsx {projectRoot}/scripts/init.ts {projectRoot}'],\n cwd: '{workspaceRoot}',\n },\n dependsOn: ['terraform-init', '^init'],\n },\n output: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default'],\n options: {\n command: 'terraform output -json',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n plan: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n commands: [\n `shx mkdir -p ${tfDistDir}`,\n `terraform plan -var-file=env/dev.tfvars -out=${tfDistDir}/dev.tfplan`,\n ],\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n },\n dependsOn: ['init', 'validate', '^validate', 'assemble'],\n },\n };\n\n const libTargets: {\n [targetName: string]: TargetConfiguration;\n } = {\n build: {\n dependsOn: ['format', 'checkov', 'test'],\n },\n // A Terraform library vends modules rather than a deployable artifact, so\n // its `assemble` carries only whatever the consuming projects register on it.\n assemble: {\n executor: 'nx:noop',\n },\n format: TERRAFORM_FORMAT_TARGET,\n // Terraform has no linter of its own, so `lint` orchestrates the format\n // check. It exists so `nx run-many --target lint` reaches terraform\n // projects, and so `--configuration=fix` and `--configuration=skip-lint`\n // propagate to `format` the way they do for TypeScript and Python projects.\n lint: {\n dependsOn: ['format'],\n },\n init: {\n executor: 'nx:run-commands',\n defaultConfiguration: 'dev',\n configurations: {\n dev: {\n commands: [\n {\n command: `shx mkdir -p ${pluginCacheDir}`,\n forwardAllArgs: false,\n },\n 'terraform init',\n ],\n },\n },\n options: {\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n env: { TF_PLUGIN_CACHE_DIR: pluginCacheDir },\n },\n dependsOn: ['terraform-init'],\n },\n // `-backend=false` installs the modules and providers without configuring\n // the S3 backend, so this needs no credentials and runs on a fresh\n // workspace before `bootstrap`. Uncached: a cache hit on another machine\n // would report success over an empty `TF_DATA_DIR` and plugin cache.\n 'terraform-init': {\n executor: 'nx:run-commands',\n options: {\n commands: [\n { command: `shx mkdir -p ${pluginCacheDir}`, forwardAllArgs: false },\n 'terraform init -backend=false',\n ],\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n parallel: false,\n env: {\n TF_DATA_DIR: initDataDir,\n TF_PLUGIN_CACHE_DIR: pluginCacheDir,\n },\n },\n },\n // `^production` mirrors `test`: checkov resolves the relative modules a\n // project consumes, so a change in one must invalidate the scan.\n checkov: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default', '^production'],\n outputs: ['{workspaceRoot}/dist/{projectRoot}/checkov'],\n options: {\n command: uvxCommand(\n 'checkov',\n `--config-file ../checkov.yml --directory . -o cli -o json --output-file-path console,${checkovReportJsonPath}`,\n ),\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n },\n },\n // Terraform's native test framework, which runs any `.tftest.hcl` files.\n // A project with none is a no-op success. Runs against the `TF_DATA_DIR`\n // `terraform-init` prepared, so it needs no credentials and works on a fresh\n // workspace before `bootstrap`. `^production` is what invalidates the cache\n // when a consumed module changes; `{projectRoot}/**/*` alone would serve a\n // stale pass.\n //\n // `TF_DATA_DIR` is terraform's working directory, not an artifact: its\n // provider entries are symlinks into the shared plugin cache, so restoring\n // it on another machine would yield dangling links while the commands that\n // repopulate them are skipped. Declaring no outputs keeps a cache hit to\n // what it actually asserts — that the tests passed for these inputs.\n test: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default', '^production'],\n outputs: [],\n options: {\n command: 'terraform test',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n env: { TF_DATA_DIR: initDataDir },\n },\n dependsOn: ['terraform-init'],\n },\n // Mirrors `test`: validates against the `TF_DATA_DIR` `terraform-init`\n // prepared, and declares no outputs for the same reason (see `test` above).\n validate: {\n executor: 'nx:run-commands',\n cache: true,\n inputs: ['default', '^production'],\n outputs: [],\n options: {\n command: 'terraform validate',\n forwardAllArgs: true,\n cwd: '{projectRoot}/src',\n env: { TF_DATA_DIR: initDataDir },\n },\n dependsOn: ['terraform-init'],\n },\n };\n\n const projectConfiguration = {\n root: lib.dir,\n projectType: schema.type,\n sourceRoot: joinPathFragments(lib.dir, 'src'),\n targets: sortObjectKeys({\n ...libTargets,\n ...(schema.type === 'application' ? applicationTargets : {}),\n }),\n };\n\n // Only create the project configuration on first run; skip it on re-run so\n // existing project.json customisations are preserved.\n if (!projectExists(tree, lib.fullyQualifiedName)) {\n addProjectConfiguration(tree, lib.fullyQualifiedName, projectConfiguration);\n }\n\n // The `lint` target checks licenses alongside formatting, as it does for\n // TypeScript and Python projects.\n addLicenseCheckToLintTarget(tree, lib.fullyQualifiedName);\n\n // This generator IS the Terraform project, so the provider is fixed.\n addGeneratorMetadata(\n tree,\n lib.fullyQualifiedName,\n TERRAFORM_PROJECT_GENERATOR_INFO,\n { iac: 'terraform' },\n );\n\n // The guides tell the reader to declare resources in `main.tf`, add variables\n // and outputs, and configure environments in `env/*.tfvars`, so everything\n // here is scaffolded once and then left alone. Provider version bumps reach\n // `providers.tf` through the vended version sync, which rewrites the pin in\n // place rather than the whole file.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, `./files/${schema.type}`),\n lib.dir,\n {\n metricsModulePath,\n stateKeyPrefix: kebabCase(lib.fullyQualifiedName),\n ...terraformProviderVersions(),\n },\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n // Checkov skips are the user's to curate, so preserve any they have added.\n generateFiles(\n tree,\n joinPathFragments(import.meta.dirname, './files/checkov'),\n lib.dir,\n {},\n {\n overwriteStrategy: OverwriteStrategy.KeepExisting,\n },\n );\n\n const nxJson = readNxJson(tree);\n\n if (\n !nxJson.plugins?.find((p) =>\n typeof p === 'string'\n ? p === NX_EXTEND_PLUGIN\n : p.plugin === NX_EXTEND_PLUGIN,\n )\n ) {\n nxJson.plugins = [...(nxJson.plugins ?? []), NX_EXTEND_PLUGIN];\n updateNxJson(tree, nxJson);\n }\n\n // Ensure shared constructs for Terraform are created\n await sharedConstructsGenerator(tree, { iac: 'terraform' }, DEPENDENCIES);\n\n // Add Terraform metrics\n await addGeneratorMetricsIfApplicable(tree, [\n TERRAFORM_PROJECT_GENERATOR_INFO,\n ]);\n\n addTsDependencies(tree, DEPENDENCIES);\n\n // @nx-extend/terraform has a peer dependency on @nx/devkit ^21.0.0 which causes\n // npm install to fail, so for NPM we add a resolution\n // Can remove when https://github.com/TriPSs/nx-extend/issues/407 is addressed\n if (detectPackageManager() === 'npm') {\n updateJson(tree, 'package.json', (packageJson) => {\n packageJson.overrides = {\n ...packageJson.overrides,\n ...withVersions(DEPENDENCIES, ['@nx/devkit']),\n };\n return packageJson;\n });\n }\n\n // `updateProjectConfiguration` re-serialises project.json with every inline\n // array expanded, which the vended `format` target rejects.\n await formatFilesInSubtree(tree);\n\n // `@nx-extend/terraform` is registered as an Nx plugin in nx.json, so Nx\n // loads it when computing the project graph — it must resolve even if the\n // caller would otherwise prefer to defer installing.\n return () =>\n installDependencies(tree, schema.preferInstallDependencies, {\n languages: ['typescript'],\n ensureResolvable: [NX_EXTEND_PLUGIN],\n });\n}\nexport default terraformProjectGenerator;\n"],"names":["addProjectConfiguration","detectPackageManager","generateFiles","joinPathFragments","OverwriteStrategy","readNxJson","updateJson","updateNxJson","join","relative","addLicenseCheckToLintTarget","getTsLibDetails","addTsDependencies","declareDependencies","ownedElsewhere","formatFilesInSubtree","updateGitIgnore","installDependencies","addGeneratorMetricsIfApplicable","kebabCase","addGeneratorMetadata","getGeneratorInfo","projectExists","sortObjectKeys","uvxCommand","sharedConstructsGenerator","SHARED_CONSTRUCTS_DEPENDENCIES","SHARED_TERRAFORM_DIR","SHARED_TERRAFORM_NAME","terraformProviderVersions","withVersions","DEPENDENCIES","ts","name","dev","root","versionOnly","NX_EXTEND_PLUGIN","TERRAFORM_PROJECT_GENERATOR_INFO","filename","TERRAFORM_FORMAT_TARGET","executor","cache","inputs","options","command","forwardAllArgs","cwd","configurations","fix","terraformProjectGenerator","tree","schema","lib","fullyQualifiedName","sharedTfProjectName","outDirToRootRelativePath","dir","replace","distDir","tfDistDir","checkovReportJsonPath","initDataDir","pluginCacheDir","metricsModulePath","patterns","applicationTargets","apply","defaultConfiguration","dependsOn","bootstrap","commands","build","deploy","assemble","destroy","init","env","TF_ENV","output","plan","parallel","libTargets","format","lint","TF_PLUGIN_CACHE_DIR","TF_DATA_DIR","checkov","outputs","test","validate","projectConfiguration","projectType","type","sourceRoot","targets","iac","dirname","stateKeyPrefix","overwriteStrategy","KeepExisting","nxJson","plugins","find","p","plugin","packageJson","overrides","preferInstallDependencies","languages","ensureResolvable"],"mappings":"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"}
|
|
@@ -3175,7 +3175,7 @@ terraform {
|
|
|
3175
3175
|
required_providers {
|
|
3176
3176
|
aws = {
|
|
3177
3177
|
source = "hashicorp/aws"
|
|
3178
|
-
version = "6.
|
|
3178
|
+
version = "6.66.0"
|
|
3179
3179
|
}
|
|
3180
3180
|
}
|
|
3181
3181
|
}
|
|
@@ -3422,15 +3422,15 @@ output "api_log_group_arn" {
|
|
|
3422
3422
|
required_providers {
|
|
3423
3423
|
archive = {
|
|
3424
3424
|
source = "hashicorp/archive"
|
|
3425
|
-
version = "2.8.
|
|
3425
|
+
version = "2.8.1"
|
|
3426
3426
|
}
|
|
3427
3427
|
aws = {
|
|
3428
3428
|
source = "hashicorp/aws"
|
|
3429
|
-
version = "6.
|
|
3429
|
+
version = "6.66.0"
|
|
3430
3430
|
}
|
|
3431
3431
|
random = {
|
|
3432
3432
|
source = "hashicorp/random"
|
|
3433
|
-
version = "3.9.
|
|
3433
|
+
version = "3.9.1"
|
|
3434
3434
|
}
|
|
3435
3435
|
}
|
|
3436
3436
|
}
|
|
@@ -3990,7 +3990,7 @@ terraform {
|
|
|
3990
3990
|
required_providers {
|
|
3991
3991
|
aws = {
|
|
3992
3992
|
source = "hashicorp/aws"
|
|
3993
|
-
version = "6.
|
|
3993
|
+
version = "6.66.0"
|
|
3994
3994
|
}
|
|
3995
3995
|
}
|
|
3996
3996
|
}
|
|
@@ -4237,15 +4237,15 @@ output "api_log_group_arn" {
|
|
|
4237
4237
|
required_providers {
|
|
4238
4238
|
archive = {
|
|
4239
4239
|
source = "hashicorp/archive"
|
|
4240
|
-
version = "2.8.
|
|
4240
|
+
version = "2.8.1"
|
|
4241
4241
|
}
|
|
4242
4242
|
aws = {
|
|
4243
4243
|
source = "hashicorp/aws"
|
|
4244
|
-
version = "6.
|
|
4244
|
+
version = "6.66.0"
|
|
4245
4245
|
}
|
|
4246
4246
|
random = {
|
|
4247
4247
|
source = "hashicorp/random"
|
|
4248
|
-
version = "3.9.
|
|
4248
|
+
version = "3.9.1"
|
|
4249
4249
|
}
|
|
4250
4250
|
}
|
|
4251
4251
|
}
|
|
@@ -4878,7 +4878,7 @@ terraform {
|
|
|
4878
4878
|
required_providers {
|
|
4879
4879
|
aws = {
|
|
4880
4880
|
source = "hashicorp/aws"
|
|
4881
|
-
version = "6.
|
|
4881
|
+
version = "6.66.0"
|
|
4882
4882
|
}
|
|
4883
4883
|
}
|
|
4884
4884
|
}
|
|
@@ -5125,15 +5125,15 @@ output "api_log_group_arn" {
|
|
|
5125
5125
|
required_providers {
|
|
5126
5126
|
archive = {
|
|
5127
5127
|
source = "hashicorp/archive"
|
|
5128
|
-
version = "2.8.
|
|
5128
|
+
version = "2.8.1"
|
|
5129
5129
|
}
|
|
5130
5130
|
aws = {
|
|
5131
5131
|
source = "hashicorp/aws"
|
|
5132
|
-
version = "6.
|
|
5132
|
+
version = "6.66.0"
|
|
5133
5133
|
}
|
|
5134
5134
|
random = {
|
|
5135
5135
|
source = "hashicorp/random"
|
|
5136
|
-
version = "3.9.
|
|
5136
|
+
version = "3.9.1"
|
|
5137
5137
|
}
|
|
5138
5138
|
}
|
|
5139
5139
|
}
|
|
@@ -5670,11 +5670,11 @@ terraform {
|
|
|
5670
5670
|
required_providers {
|
|
5671
5671
|
aws = {
|
|
5672
5672
|
source = "hashicorp/aws"
|
|
5673
|
-
version = "6.
|
|
5673
|
+
version = "6.66.0"
|
|
5674
5674
|
}
|
|
5675
5675
|
random = {
|
|
5676
5676
|
source = "hashicorp/random"
|
|
5677
|
-
version = "3.9.
|
|
5677
|
+
version = "3.9.1"
|
|
5678
5678
|
}
|
|
5679
5679
|
}
|
|
5680
5680
|
}
|
|
@@ -5979,15 +5979,15 @@ output "waf_web_acl_arn" {
|
|
|
5979
5979
|
required_providers {
|
|
5980
5980
|
archive = {
|
|
5981
5981
|
source = "hashicorp/archive"
|
|
5982
|
-
version = "2.8.
|
|
5982
|
+
version = "2.8.1"
|
|
5983
5983
|
}
|
|
5984
5984
|
aws = {
|
|
5985
5985
|
source = "hashicorp/aws"
|
|
5986
|
-
version = "6.
|
|
5986
|
+
version = "6.66.0"
|
|
5987
5987
|
}
|
|
5988
5988
|
random = {
|
|
5989
5989
|
source = "hashicorp/random"
|
|
5990
|
-
version = "3.9.
|
|
5990
|
+
version = "3.9.1"
|
|
5991
5991
|
}
|
|
5992
5992
|
}
|
|
5993
5993
|
}
|
|
@@ -6984,11 +6984,11 @@ terraform {
|
|
|
6984
6984
|
required_providers {
|
|
6985
6985
|
aws = {
|
|
6986
6986
|
source = "hashicorp/aws"
|
|
6987
|
-
version = "6.
|
|
6987
|
+
version = "6.66.0"
|
|
6988
6988
|
}
|
|
6989
6989
|
random = {
|
|
6990
6990
|
source = "hashicorp/random"
|
|
6991
|
-
version = "3.9.
|
|
6991
|
+
version = "3.9.1"
|
|
6992
6992
|
}
|
|
6993
6993
|
}
|
|
6994
6994
|
}
|
|
@@ -7293,15 +7293,15 @@ output "waf_web_acl_arn" {
|
|
|
7293
7293
|
required_providers {
|
|
7294
7294
|
archive = {
|
|
7295
7295
|
source = "hashicorp/archive"
|
|
7296
|
-
version = "2.8.
|
|
7296
|
+
version = "2.8.1"
|
|
7297
7297
|
}
|
|
7298
7298
|
aws = {
|
|
7299
7299
|
source = "hashicorp/aws"
|
|
7300
|
-
version = "6.
|
|
7300
|
+
version = "6.66.0"
|
|
7301
7301
|
}
|
|
7302
7302
|
random = {
|
|
7303
7303
|
source = "hashicorp/random"
|
|
7304
|
-
version = "3.9.
|
|
7304
|
+
version = "3.9.1"
|
|
7305
7305
|
}
|
|
7306
7306
|
}
|
|
7307
7307
|
}
|
|
@@ -8287,11 +8287,11 @@ terraform {
|
|
|
8287
8287
|
required_providers {
|
|
8288
8288
|
aws = {
|
|
8289
8289
|
source = "hashicorp/aws"
|
|
8290
|
-
version = "6.
|
|
8290
|
+
version = "6.66.0"
|
|
8291
8291
|
}
|
|
8292
8292
|
random = {
|
|
8293
8293
|
source = "hashicorp/random"
|
|
8294
|
-
version = "3.9.
|
|
8294
|
+
version = "3.9.1"
|
|
8295
8295
|
}
|
|
8296
8296
|
}
|
|
8297
8297
|
}
|
|
@@ -8596,15 +8596,15 @@ output "waf_web_acl_arn" {
|
|
|
8596
8596
|
required_providers {
|
|
8597
8597
|
archive = {
|
|
8598
8598
|
source = "hashicorp/archive"
|
|
8599
|
-
version = "2.8.
|
|
8599
|
+
version = "2.8.1"
|
|
8600
8600
|
}
|
|
8601
8601
|
aws = {
|
|
8602
8602
|
source = "hashicorp/aws"
|
|
8603
|
-
version = "6.
|
|
8603
|
+
version = "6.66.0"
|
|
8604
8604
|
}
|
|
8605
8605
|
random = {
|
|
8606
8606
|
source = "hashicorp/random"
|
|
8607
|
-
version = "3.9.
|
|
8607
|
+
version = "3.9.1"
|
|
8608
8608
|
}
|
|
8609
8609
|
}
|
|
8610
8610
|
}
|
|
@@ -650,7 +650,7 @@ RUN apt-get update && \\
|
|
|
650
650
|
rm -rf /var/lib/apt/lists/*
|
|
651
651
|
|
|
652
652
|
# Upgrade npm to a version free of known HIGH/CRITICAL vulnerabilities
|
|
653
|
-
RUN npm install -g npm@12.0
|
|
653
|
+
RUN npm install -g npm@12.1.0
|
|
654
654
|
|
|
655
655
|
WORKDIR /app
|
|
656
656
|
|
|
@@ -663,7 +663,7 @@ WORKDIR /app
|
|
|
663
663
|
RUN npm init -y \\
|
|
664
664
|
&& npm pkg set "overrides.@opentelemetry/propagator-jaeger=2.11.0" \\
|
|
665
665
|
&& npm pkg set "overrides.minimatch=10.2.6" \\
|
|
666
|
-
&& npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation@0.
|
|
666
|
+
&& npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation@0.13.0 \\
|
|
667
667
|
&& npm uninstall -g npm
|
|
668
668
|
|
|
669
669
|
# Copy bundled agent
|
|
@@ -984,11 +984,11 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
|
|
|
984
984
|
required_providers {
|
|
985
985
|
aws = {
|
|
986
986
|
source = "hashicorp/aws"
|
|
987
|
-
version = "6.
|
|
987
|
+
version = "6.66.0"
|
|
988
988
|
}
|
|
989
989
|
random = {
|
|
990
990
|
source = "hashicorp/random"
|
|
991
|
-
version = "3.9.
|
|
991
|
+
version = "3.9.1"
|
|
992
992
|
}
|
|
993
993
|
}
|
|
994
994
|
}
|
|
@@ -1307,15 +1307,15 @@ exports[`ts#agent generator > should match snapshot for Terraform generated file
|
|
|
1307
1307
|
required_providers {
|
|
1308
1308
|
aws = {
|
|
1309
1309
|
source = "hashicorp/aws"
|
|
1310
|
-
version = "6.
|
|
1310
|
+
version = "6.66.0"
|
|
1311
1311
|
}
|
|
1312
1312
|
null = {
|
|
1313
1313
|
source = "hashicorp/null"
|
|
1314
|
-
version = "3.3.
|
|
1314
|
+
version = "3.3.2"
|
|
1315
1315
|
}
|
|
1316
1316
|
random = {
|
|
1317
1317
|
source = "hashicorp/random"
|
|
1318
|
-
version = "3.9.
|
|
1318
|
+
version = "3.9.1"
|
|
1319
1319
|
}
|
|
1320
1320
|
}
|
|
1321
1321
|
}
|
|
@@ -1666,7 +1666,7 @@ resource "null_resource" "runtime_ready" {
|
|
|
1666
1666
|
|
|
1667
1667
|
provisioner "local-exec" {
|
|
1668
1668
|
command = <<-EOT
|
|
1669
|
-
uv run --with boto3==1.43.
|
|
1669
|
+
uv run --with boto3==1.43.103 python -c "
|
|
1670
1670
|
import boto3
|
|
1671
1671
|
import json
|
|
1672
1672
|
import os
|