@intentius/chant 0.42.1 → 0.44.1
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/build.d.ts +15 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/plugins.d.ts +8 -0
- package/dist/cli/plugins.d.ts.map +1 -1
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/lexicon.d.ts +44 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/terraform/aws-resources.d.ts.map +1 -1
- package/dist/terraform/graph.d.ts.map +1 -1
- package/dist/terraform/tier-map.d.ts +4 -3
- package/dist/terraform/tier-map.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/audit/rules-doc.ts +1 -1
- package/src/build.test.ts +95 -0
- package/src/build.ts +46 -1
- package/src/cli/commands/build.ts +9 -1
- package/src/cli/handlers/lifecycle.ts +7 -2
- package/src/cli/plugins.ts +17 -0
- package/src/components/deploy-units.test.ts +13 -0
- package/src/components/deploy-units.ts +5 -0
- package/src/lexicon.ts +47 -0
- package/src/terraform/aws-resources.test.ts +52 -2
- package/src/terraform/aws-resources.ts +95 -4
- package/src/terraform/graph.test.ts +17 -0
- package/src/terraform/graph.ts +12 -2
- package/src/terraform/tier-map.ts +60 -8
package/dist/build.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { Declarable } from "./declarable.js";
|
|
|
2
2
|
import type { Serializer, SerializerResult } from "./serializer.js";
|
|
3
3
|
import type { OwnershipMarker } from "./ownership.js";
|
|
4
4
|
import type { BuildError } from "./errors.js";
|
|
5
|
-
import type { IntrinsicDef } from "./lexicon.js";
|
|
5
|
+
import type { IntrinsicDef, BuildRootContribution } from "./lexicon.js";
|
|
6
6
|
import type { BuildParamProvenance } from "./provenance.js";
|
|
7
7
|
import { DiscoveryError } from "./errors.js";
|
|
8
8
|
import { LexiconOutput } from "./lexicon-output.js";
|
|
@@ -122,6 +122,20 @@ export interface BuildOptions {
|
|
|
122
122
|
* carries the already-resolved records for provenance.
|
|
123
123
|
*/
|
|
124
124
|
buildParams?: BuildParamProvenance[];
|
|
125
|
+
/**
|
|
126
|
+
* chant #1548 piece 3 — lexicon-contributed build roots: closures the CLI
|
|
127
|
+
* binds from each configured plugin's `buildRoots(ctx)` hook (see
|
|
128
|
+
* `collectBuildRootContributors` in ./cli/plugins.ts), each rendering a
|
|
129
|
+
* non-chant-source root (a kustomize overlay dir) into entities. Run once,
|
|
130
|
+
* at the TOP-LEVEL build only (never repeated for nested child projects),
|
|
131
|
+
* after discovery and before partitioning — so contributed entities are
|
|
132
|
+
* serialized, ownership-stamped, post-synth-checked and observed exactly
|
|
133
|
+
* like discovered ones. A contributor that throws becomes a build error
|
|
134
|
+
* carrying its message (the k8s hook's missing-binary refusal names the
|
|
135
|
+
* binaries); a contributed name colliding with a discovered entity is a
|
|
136
|
+
* build error, never a silent overwrite.
|
|
137
|
+
*/
|
|
138
|
+
buildRoots?: Array<() => Promise<BuildRootContribution>>;
|
|
125
139
|
}
|
|
126
140
|
export interface BuildResult {
|
|
127
141
|
/** Map of lexicon name to serialized output (string or multi-file result) */
|
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAYnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,2CAA2C;IAC3C,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB/C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2JAA2J;IAC3J,WAAW,CAAC,EAAE,OAAO,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;CACjE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAYnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,2CAA2C;IAC3C,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB/C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2JAA2J;IAC3J,WAAW,CAAC,EAAE,OAAO,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;CACjE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA4c9E;AAiDD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAItD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GACxC,MAAM,IAAI,CAmCZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/lifecycle.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqDlD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAyH/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C3E;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B/E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA0K3E;AAijBD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA2J3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAM9E;AAkBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C/E"}
|
package/dist/cli/plugins.d.ts
CHANGED
|
@@ -26,6 +26,14 @@ export declare function loadPlugin(lexiconName: string): Promise<LexiconPlugin>;
|
|
|
26
26
|
* says `unknown` compares unequal to itself across builds.
|
|
27
27
|
*/
|
|
28
28
|
export declare function resolveLexiconVersions(lexiconNames: readonly string[]): Record<string, string>;
|
|
29
|
+
/**
|
|
30
|
+
* Bind each loaded plugin's `buildRoots` hook (#1548 piece 3) to this
|
|
31
|
+
* invocation's config and project root, producing the closures
|
|
32
|
+
* `BuildOptions.buildRoots` takes — the same extract-then-thread shape the
|
|
33
|
+
* CLI uses for `intrinsics`. Plugins without the hook contribute nothing;
|
|
34
|
+
* an empty array is the common case and `build()` treats it as absent.
|
|
35
|
+
*/
|
|
36
|
+
export declare function collectBuildRootContributors(plugins: readonly LexiconPlugin[] | undefined, config: Record<string, unknown>, projectRoot: string): Array<() => Promise<import("../lexicon.js").BuildRootContribution>>;
|
|
29
37
|
/**
|
|
30
38
|
* Load plugins for all detected lexicon names.
|
|
31
39
|
* Calls `init()` on each plugin if present.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/cli/plugins.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAKjE;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B5E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA+B9F;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA6BlF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnF"}
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/cli/plugins.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAKjE;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B5E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA+B9F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,GAClB,KAAK,CAAC,MAAM,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAIlE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA6BlF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUnF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-units.d.ts","sourceRoot":"","sources":["../../src/components/deploy-units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,
|
|
1
|
+
{"version":3,"file":"deploy-units.d.ts","sourceRoot":"","sources":["../../src/components/deploy-units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAYtD,CAAC;AAEF,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CA0BzD"}
|
package/dist/lexicon.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Serializer } from "./serializer.js";
|
|
2
|
+
import type { Declarable } from "./declarable.js";
|
|
2
3
|
import type { LintRule } from "./lint/rule.js";
|
|
3
4
|
import type { RuleSpec } from "./lint/declarative.js";
|
|
4
5
|
import type { PostSynthCheck } from "./lint/post-synth.js";
|
|
@@ -373,6 +374,29 @@ export interface StackStatusObservation {
|
|
|
373
374
|
/** True when `status` is a terminal *success* state (deployed and healthy). */
|
|
374
375
|
healthy?: boolean;
|
|
375
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* Context for a lexicon's {@link LexiconPlugin.buildRoots} hook (#1548).
|
|
379
|
+
*/
|
|
380
|
+
export interface BuildRootContext {
|
|
381
|
+
/**
|
|
382
|
+
* The directory the project configuration was loaded from (where
|
|
383
|
+
* `chant.config.*` lives) — relative root paths resolve against it, NOT
|
|
384
|
+
* against `sourceDir`, because a non-chant-source root (a kustomize
|
|
385
|
+
* overlay tree) usually lives beside the typed source rather than inside
|
|
386
|
+
* it.
|
|
387
|
+
*/
|
|
388
|
+
projectRoot: string;
|
|
389
|
+
/** The resolved project configuration, for the lexicon's own namespace. */
|
|
390
|
+
config: Record<string, unknown>;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* What a build-root render contributes to the build: entities keyed like
|
|
394
|
+
* discovered ones, plus non-fatal diagnostics.
|
|
395
|
+
*/
|
|
396
|
+
export interface BuildRootContribution {
|
|
397
|
+
entities: Map<string, Declarable>;
|
|
398
|
+
warnings?: string[];
|
|
399
|
+
}
|
|
376
400
|
export interface LexiconPlugin {
|
|
377
401
|
/** Human-readable name (e.g. "aws", "gcp") */
|
|
378
402
|
readonly name: string;
|
|
@@ -488,6 +512,26 @@ export interface LexiconPlugin {
|
|
|
488
512
|
* that are not CI providers.
|
|
489
513
|
*/
|
|
490
514
|
generateComponentPipeline?(components: DriverComponent[], options?: ComponentPipelineOptions): ComponentPipelineResult;
|
|
515
|
+
/**
|
|
516
|
+
* Render this lexicon's config-declared build roots into entities (#1548
|
|
517
|
+
* piece 3) — the seam for a build root that is NOT typed chant source. The
|
|
518
|
+
* k8s lexicon implements it for `k8s.kustomize.roots`: each named
|
|
519
|
+
* kustomization dir renders (`kustomize build`) at build time and the
|
|
520
|
+
* documents come back as entities, which the build merges into the
|
|
521
|
+
* discovered set BEFORE partitioning — so they are serialized by this
|
|
522
|
+
* lexicon's serializer (ownership stamping included), seen by post-synth
|
|
523
|
+
* checks, and observed by `describeResources` exactly like discovered
|
|
524
|
+
* entities.
|
|
525
|
+
*
|
|
526
|
+
* Called once per top-level build (never for nested child projects), only
|
|
527
|
+
* when the CLI wires it up (`collectBuildRootContributors` in
|
|
528
|
+
* ./cli/plugins.ts → {@link BuildOptions.buildRoots}). A hook that has
|
|
529
|
+
* nothing configured must return an empty map, not throw; a hook that
|
|
530
|
+
* cannot render (missing binary, missing dir) should throw with a message
|
|
531
|
+
* naming the problem — the build reports it as a build error, not a stack
|
|
532
|
+
* trace. Omit for lexicons with no non-source build-root concept.
|
|
533
|
+
*/
|
|
534
|
+
buildRoots?(ctx: BuildRootContext): Promise<BuildRootContribution>;
|
|
491
535
|
/** Provide completions for LSP */
|
|
492
536
|
completionProvider?(ctx: CompletionContext): CompletionItem[];
|
|
493
537
|
/** Provide hover information for LSP */
|
package/dist/lexicon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon.d.ts","sourceRoot":"","sources":["../src/lexicon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lexicon.d.ts","sourceRoot":"","sources":["../src/lexicon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-resources.d.ts","sourceRoot":"","sources":["../../src/terraform/aws-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+DAA+D;AAC/D,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB,iCAAiC,CAAC;AAajE,eAAO,MAAM,eAAe,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"aws-resources.d.ts","sourceRoot":"","sources":["../../src/terraform/aws-resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+DAA+D;AAC/D,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CAAE,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB,iCAAiC,CAAC;AAajE,eAAO,MAAM,eAAe,EAAE,YAAY,EAqNzC,CAAC;AAIF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAErE;AASD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAoB1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/terraform/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,SAAS,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAKpE,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAc/D;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/terraform/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAU,MAAM,SAAS,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAKpE,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAc/D;AA4DD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAwEhF;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtE;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE"}
|
|
@@ -29,9 +29,10 @@ export declare const TIER_MAP: Record<string, TierInfo>;
|
|
|
29
29
|
*/
|
|
30
30
|
export declare const FOLDS_INTO: Record<string, string>;
|
|
31
31
|
/**
|
|
32
|
-
* The HCL attribute carrying a resource's physical name, per type —
|
|
33
|
-
* from the
|
|
34
|
-
*
|
|
32
|
+
* The HCL attribute carrying a resource's physical name, per type — AWS entries
|
|
33
|
+
* derived from the carve-out table, non-AWS listed directly. A dotted entry is
|
|
34
|
+
* a path into nested blocks (`manifest.metadata.name`). Used for the graph's
|
|
35
|
+
* identity and the live-import hint. Absent → fall back to the TF logical name.
|
|
35
36
|
*/
|
|
36
37
|
export declare const IDENTITY_ATTR: Record<string, string>;
|
|
37
38
|
export declare function resolveTier(tfType: string): TierInfo | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier-map.d.ts","sourceRoot":"","sources":["../../src/terraform/tier-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"tier-map.d.ts","sourceRoot":"","sources":["../../src/terraform/tier-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AA0CD,sEAAsE;AACtE,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAK7C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiB7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGhD,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAE3D"}
|
package/package.json
CHANGED
package/src/audit/rules-doc.ts
CHANGED
|
@@ -14,7 +14,7 @@ const GROUPS: Array<{ heading: string; prefixes: string[]; blurb: string }> = [
|
|
|
14
14
|
{ heading: "GitHub Actions (GHA)", prefixes: ["GHA"], blurb: "Also applied to Forgejo workflows, which are GitHub-dialect." },
|
|
15
15
|
{ heading: "GitLab CI (WGL)", prefixes: ["WGL"], blurb: "" },
|
|
16
16
|
{ heading: "Forgejo (WFJ)", prefixes: ["WFJ"], blurb: "" },
|
|
17
|
-
{ heading: "Kubernetes (WK8 / ARGO)", prefixes: ["WK8", "ARGO"], blurb: "Run against Kubernetes manifests." },
|
|
17
|
+
{ heading: "Kubernetes (WK8 / ARGO / FLUX)", prefixes: ["WK8", "ARGO", "FLUX"], blurb: "Run against Kubernetes manifests." },
|
|
18
18
|
{ heading: "Docker (DKRD)", prefixes: ["DKRD"], blurb: "Run against Dockerfiles and Compose files." },
|
|
19
19
|
{ heading: "AWS CloudFormation (WAW / COR / EXT)", prefixes: ["WAW", "COR", "EXT"], blurb: "Run against CloudFormation templates (JSON or YAML)." },
|
|
20
20
|
{ heading: "Azure ARM (AZR)", prefixes: ["AZR"], blurb: "Run against ARM deployment templates (JSON)." },
|
package/src/build.test.ts
CHANGED
|
@@ -257,6 +257,101 @@ export const testEntity = {
|
|
|
257
257
|
});
|
|
258
258
|
});
|
|
259
259
|
|
|
260
|
+
describe("build-root contributors (#1548 piece 3)", () => {
|
|
261
|
+
let testDir: string;
|
|
262
|
+
|
|
263
|
+
beforeEach(async () => {
|
|
264
|
+
testDir = join(tmpdir(), `chant-buildroots-test-${Date.now()}-${Math.random()}`);
|
|
265
|
+
await mkdir(testDir, { recursive: true });
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
afterEach(async () => {
|
|
269
|
+
await rm(testDir, { recursive: true, force: true });
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
const entity = (entityType: string): Declarable =>
|
|
273
|
+
({
|
|
274
|
+
lexicon: "test",
|
|
275
|
+
entityType,
|
|
276
|
+
kind: "resource",
|
|
277
|
+
props: {},
|
|
278
|
+
[DECLARABLE_MARKER]: true,
|
|
279
|
+
}) as unknown as Declarable;
|
|
280
|
+
|
|
281
|
+
const recordingSerializer = (seen: string[][]): Serializer => ({
|
|
282
|
+
name: "test",
|
|
283
|
+
rulePrefix: "TEST",
|
|
284
|
+
serialize: (entities) => {
|
|
285
|
+
seen.push([...entities.keys()]);
|
|
286
|
+
return "out";
|
|
287
|
+
},
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test("contributed entities join the entity set and reach the serializer", async () => {
|
|
291
|
+
const seen: string[][] = [];
|
|
292
|
+
const result = await build(testDir, [recordingSerializer(seen)], undefined, {
|
|
293
|
+
buildRoots: [
|
|
294
|
+
async () => ({
|
|
295
|
+
entities: new Map([["overlays/prod/deploymentApp", entity("TestEntity")]]),
|
|
296
|
+
warnings: ["rendered a stray doc"],
|
|
297
|
+
}),
|
|
298
|
+
],
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
expect(result.errors).toEqual([]);
|
|
302
|
+
expect(result.entities.has("overlays/prod/deploymentApp")).toBe(true);
|
|
303
|
+
expect(seen).toEqual([["overlays/prod/deploymentApp"]]);
|
|
304
|
+
expect(result.warnings).toContain("rendered a stray doc");
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
test("a contributor that throws becomes a build error carrying its message, not a thrown stack", async () => {
|
|
308
|
+
const result = await build(testDir, [], undefined, {
|
|
309
|
+
buildRoots: [
|
|
310
|
+
async () => {
|
|
311
|
+
throw new Error("neither the `kustomize` binary nor `kubectl` was found on PATH");
|
|
312
|
+
},
|
|
313
|
+
],
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
expect(result.errors).toHaveLength(1);
|
|
317
|
+
expect(result.errors[0].message).toContain("neither the `kustomize` binary nor `kubectl`");
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
test("a contributed name colliding with a discovered entity is a build error, never an overwrite", async () => {
|
|
321
|
+
await writeFile(
|
|
322
|
+
join(testDir, "app.infra.ts"),
|
|
323
|
+
`
|
|
324
|
+
export const discovered = {
|
|
325
|
+
lexicon: "test",
|
|
326
|
+
entityType: "Discovered",
|
|
327
|
+
props: {},
|
|
328
|
+
[Symbol.for("chant.declarable")]: true,
|
|
329
|
+
};
|
|
330
|
+
`,
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
const result = await build(testDir, [recordingSerializer([])], undefined, {
|
|
334
|
+
buildRoots: [async () => ({ entities: new Map([["discovered", entity("Contributed")]]) })],
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
expect(result.errors.some((e) => e.message.includes('"discovered" collides'))).toBe(true);
|
|
338
|
+
expect(result.entities.get("discovered")?.entityType).toBe("Discovered");
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
test("contributors run exactly once per build", async () => {
|
|
342
|
+
let calls = 0;
|
|
343
|
+
await build(testDir, [], undefined, {
|
|
344
|
+
buildRoots: [
|
|
345
|
+
async () => {
|
|
346
|
+
calls++;
|
|
347
|
+
return { entities: new Map() };
|
|
348
|
+
},
|
|
349
|
+
],
|
|
350
|
+
});
|
|
351
|
+
expect(calls).toBe(1);
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
|
|
260
355
|
describe("partitionByLexicon", () => {
|
|
261
356
|
test("partitions entities by lexicon", () => {
|
|
262
357
|
const entities = new Map<string, Declarable>([
|
package/src/build.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { Declarable } from "./declarable";
|
|
|
2
2
|
import type { Serializer, SerializerResult } from "./serializer";
|
|
3
3
|
import type { OwnershipMarker } from "./ownership";
|
|
4
4
|
import type { BuildError, DiscoveryErrorType } from "./errors";
|
|
5
|
-
import type { IntrinsicDef } from "./lexicon";
|
|
5
|
+
import type { IntrinsicDef, BuildRootContribution } from "./lexicon";
|
|
6
6
|
import type { BuildParamProvenance } from "./provenance";
|
|
7
7
|
import { DiscoveryError, BuildError as BuildErrorClass } from "./errors";
|
|
8
8
|
import { LexiconOutput, isLexiconOutput } from "./lexicon-output";
|
|
@@ -215,6 +215,21 @@ export interface BuildOptions {
|
|
|
215
215
|
* carries the already-resolved records for provenance.
|
|
216
216
|
*/
|
|
217
217
|
buildParams?: BuildParamProvenance[];
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* chant #1548 piece 3 — lexicon-contributed build roots: closures the CLI
|
|
221
|
+
* binds from each configured plugin's `buildRoots(ctx)` hook (see
|
|
222
|
+
* `collectBuildRootContributors` in ./cli/plugins.ts), each rendering a
|
|
223
|
+
* non-chant-source root (a kustomize overlay dir) into entities. Run once,
|
|
224
|
+
* at the TOP-LEVEL build only (never repeated for nested child projects),
|
|
225
|
+
* after discovery and before partitioning — so contributed entities are
|
|
226
|
+
* serialized, ownership-stamped, post-synth-checked and observed exactly
|
|
227
|
+
* like discovered ones. A contributor that throws becomes a build error
|
|
228
|
+
* carrying its message (the k8s hook's missing-binary refusal names the
|
|
229
|
+
* binaries); a contributed name colliding with a discovered entity is a
|
|
230
|
+
* build error, never a silent overwrite.
|
|
231
|
+
*/
|
|
232
|
+
buildRoots?: Array<() => Promise<BuildRootContribution>>;
|
|
218
233
|
}
|
|
219
234
|
|
|
220
235
|
export interface BuildResult {
|
|
@@ -657,6 +672,36 @@ async function buildFromDiscoveryResult(
|
|
|
657
672
|
}
|
|
658
673
|
}
|
|
659
674
|
|
|
675
|
+
// Step 4b (#1548 piece 3): lexicon-contributed build roots — rendered
|
|
676
|
+
// non-source roots (kustomize dirs) joining the entity set before
|
|
677
|
+
// partitioning, so everything downstream (serialization with ownership
|
|
678
|
+
// stamping, post-synth checks, observation) treats them as declared.
|
|
679
|
+
// Top-level build only: nested child builds receive the same options
|
|
680
|
+
// object, and re-running the contributors there would duplicate every
|
|
681
|
+
// contributed entity once per child.
|
|
682
|
+
if (!parentBuildStack && options?.buildRoots) {
|
|
683
|
+
for (const contribute of options.buildRoots) {
|
|
684
|
+
try {
|
|
685
|
+
const contribution = await contribute();
|
|
686
|
+
for (const w of contribution.warnings ?? []) warnings.push(w);
|
|
687
|
+
for (const [name, entity] of contribution.entities) {
|
|
688
|
+
if (discoveryResult.entities.has(name)) {
|
|
689
|
+
errors.push(
|
|
690
|
+
new BuildErrorClass(
|
|
691
|
+
"",
|
|
692
|
+
`Build-root entity "${name}" collides with a discovered entity of the same name`,
|
|
693
|
+
),
|
|
694
|
+
);
|
|
695
|
+
continue;
|
|
696
|
+
}
|
|
697
|
+
discoveryResult.entities.set(name, entity);
|
|
698
|
+
}
|
|
699
|
+
} catch (error) {
|
|
700
|
+
errors.push(new BuildErrorClass("", error instanceof Error ? error.message : String(error)));
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
|
|
660
705
|
// Step 5: Partition entities by lexicon
|
|
661
706
|
const partitions = partitionByLexicon(discoveryResult.entities);
|
|
662
707
|
|
|
@@ -3,7 +3,7 @@ import { loadChantConfigUpward, resolveOwnershipMarker, resolveFoldEnabled, reso
|
|
|
3
3
|
import { resolveCliBuildParams } from "../build-params-cli";
|
|
4
4
|
import type { Serializer, SerializerResult } from "../../serializer";
|
|
5
5
|
import type { LexiconPlugin } from "../../lexicon";
|
|
6
|
-
import { resolveLexiconVersions } from "../plugins";
|
|
6
|
+
import { resolveLexiconVersions, collectBuildRootContributors } from "../plugins";
|
|
7
7
|
import { runPostSynthChecks } from "../../lint/post-synth";
|
|
8
8
|
import { applyConfiguredSeverity } from "../../lint/config";
|
|
9
9
|
import { loadPolicyChecks } from "../../lint/policy";
|
|
@@ -261,6 +261,14 @@ export async function buildCommand(options: BuildOptions): Promise<BuildResult>
|
|
|
261
261
|
lexicons,
|
|
262
262
|
lexiconVersions,
|
|
263
263
|
buildParams: paramsResolution.provenance,
|
|
264
|
+
// #1548 piece 3 — config-declared build roots (kustomize dirs), rendered
|
|
265
|
+
// into entities by the owning lexicon's hook. Rooted at the config dir,
|
|
266
|
+
// not the (possibly sourceDir-scoped) infra path.
|
|
267
|
+
buildRoots: collectBuildRootContributors(
|
|
268
|
+
options.plugins,
|
|
269
|
+
config as unknown as Record<string, unknown>,
|
|
270
|
+
configDir,
|
|
271
|
+
),
|
|
264
272
|
});
|
|
265
273
|
|
|
266
274
|
// #1022 — report per-file fold vs run so it's visible what still runs.
|
|
@@ -31,6 +31,7 @@ import { cfnDeployStacks } from "./components";
|
|
|
31
31
|
import { affectedStacks } from "../../lifecycle/affected";
|
|
32
32
|
import { rollbackToRevision } from "../../lifecycle/rollback";
|
|
33
33
|
import { loadChantConfig, environmentNames } from "../../config";
|
|
34
|
+
import { collectBuildRootContributors } from "../plugins";
|
|
34
35
|
import { applyLiveEndpoint } from "../../live-endpoint";
|
|
35
36
|
import { isResourceDeclarable } from "../../declarable";
|
|
36
37
|
import { formatError, formatWarning, formatSuccess, formatBold } from "../format";
|
|
@@ -150,9 +151,10 @@ export async function runLifecycleSnapshot(ctx: CommandContext): Promise<number>
|
|
|
150
151
|
// estate; a region whose stack declares no security group still has a default
|
|
151
152
|
// one, and scoping the bound per stack silently drops it.
|
|
152
153
|
const built: Array<{ target: (typeof targets)[number]; buildResult: Awaited<ReturnType<typeof build>> }> = [];
|
|
154
|
+
const buildRoots = collectBuildRootContributors(targetPlugins, config as unknown as Record<string, unknown>, projectPath);
|
|
153
155
|
for (const target of targets) {
|
|
154
156
|
const label = target.stack ? `stack "${target.stack}"` : "project";
|
|
155
|
-
const buildResult = await build(target.root, targetSerializers, undefined, { buildParams: declaredParams });
|
|
157
|
+
const buildResult = await build(target.root, targetSerializers, undefined, { buildParams: declaredParams, buildRoots });
|
|
156
158
|
if (buildResult.errors.length > 0) {
|
|
157
159
|
console.error(formatError({ message: `Build failed for ${label} — fix errors before taking a snapshot` }));
|
|
158
160
|
anyHardError = true;
|
|
@@ -363,9 +365,11 @@ export async function runLifecycleDiff(ctx: CommandContext): Promise<number> {
|
|
|
363
365
|
const endpointResult = applyLiveEndpoint(config.environments, environment, liveLexicons);
|
|
364
366
|
if (endpointResult.notice) console.error(formatWarning({ message: endpointResult.notice }));
|
|
365
367
|
|
|
368
|
+
const diffBuildRoots = collectBuildRootContributors(plugins, config as unknown as Record<string, unknown>, resolve("."));
|
|
369
|
+
|
|
366
370
|
try {
|
|
367
371
|
for (const target of targets) {
|
|
368
|
-
const buildResult = await build(target.root, targetSerializers, undefined, { buildParams: declaredParams });
|
|
372
|
+
const buildResult = await build(target.root, targetSerializers, undefined, { buildParams: declaredParams, buildRoots: diffBuildRoots });
|
|
369
373
|
if (buildResult.errors.length > 0) {
|
|
370
374
|
const label = target.stack ? `stack "${target.stack}"` : "project";
|
|
371
375
|
console.error(formatError({ message: `Build failed for ${label} — fix errors before diffing` }));
|
|
@@ -1063,6 +1067,7 @@ export async function runLifecyclePlan(ctx: CommandContext): Promise<number> {
|
|
|
1063
1067
|
if (!declaredParams) return 1;
|
|
1064
1068
|
const buildResult = await build(resolveBuildRoot(args, config), targetSerializers, undefined, {
|
|
1065
1069
|
buildParams: declaredParams,
|
|
1070
|
+
buildRoots: collectBuildRootContributors(plugins, config as unknown as Record<string, unknown>, resolve(".")),
|
|
1066
1071
|
});
|
|
1067
1072
|
if (buildResult.errors.length > 0) {
|
|
1068
1073
|
console.error(formatError({ message: "Build failed — fix errors before planning" }));
|
package/src/cli/plugins.ts
CHANGED
|
@@ -95,6 +95,23 @@ export function resolveLexiconVersions(lexiconNames: readonly string[]): Record<
|
|
|
95
95
|
return versions;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Bind each loaded plugin's `buildRoots` hook (#1548 piece 3) to this
|
|
100
|
+
* invocation's config and project root, producing the closures
|
|
101
|
+
* `BuildOptions.buildRoots` takes — the same extract-then-thread shape the
|
|
102
|
+
* CLI uses for `intrinsics`. Plugins without the hook contribute nothing;
|
|
103
|
+
* an empty array is the common case and `build()` treats it as absent.
|
|
104
|
+
*/
|
|
105
|
+
export function collectBuildRootContributors(
|
|
106
|
+
plugins: readonly LexiconPlugin[] | undefined,
|
|
107
|
+
config: Record<string, unknown>,
|
|
108
|
+
projectRoot: string,
|
|
109
|
+
): Array<() => Promise<import("../lexicon").BuildRootContribution>> {
|
|
110
|
+
return (plugins ?? [])
|
|
111
|
+
.filter((plugin) => typeof plugin.buildRoots === "function")
|
|
112
|
+
.map((plugin) => () => plugin.buildRoots!({ projectRoot, config }));
|
|
113
|
+
}
|
|
114
|
+
|
|
98
115
|
/**
|
|
99
116
|
* Load plugins for all detected lexicon names.
|
|
100
117
|
* Calls `init()` on each plugin if present.
|
|
@@ -23,6 +23,19 @@ describe("deployUnits (#1495 piece 1)", () => {
|
|
|
23
23
|
]);
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
+
test("resolves the GitOps verbs to their stack — the CR is the unit (#1549 piece 2)", () => {
|
|
27
|
+
const deploy = [
|
|
28
|
+
phase("Apply", [
|
|
29
|
+
{ kind: "argo-app", manifest: "argo/app.yaml", stack: "gitops-argo" },
|
|
30
|
+
{ kind: "flux-reconcile", manifest: "flux/", stack: "gitops-flux" },
|
|
31
|
+
]),
|
|
32
|
+
];
|
|
33
|
+
expect(deployUnits(deploy)).toEqual([
|
|
34
|
+
{ unit: "gitops-argo", lexicon: "k8s" },
|
|
35
|
+
{ unit: "gitops-flux", lexicon: "k8s" },
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
38
|
+
|
|
26
39
|
test("walks nested phases, dedupes per lexicon, and skips unitless steps", () => {
|
|
27
40
|
const deploy = [
|
|
28
41
|
phase("Outer", [
|
|
@@ -40,6 +40,11 @@ export const DEPLOY_UNIT_RULES: readonly DeployUnitRule[] = [
|
|
|
40
40
|
// kustomize renders, then applies through the same stack-labelled pipeline —
|
|
41
41
|
// so its unit is observed by the identical label sweep (#1548).
|
|
42
42
|
{ kind: "kustomize-apply", field: "stack", lexicon: "k8s" },
|
|
43
|
+
// GitOps verbs apply the controller's CR through that same pipeline — the
|
|
44
|
+
// unit is the CR itself under its stack label, observed by the identical
|
|
45
|
+
// label sweep (#1549 piece 2).
|
|
46
|
+
{ kind: "argo-app", field: "stack", lexicon: "k8s" },
|
|
47
|
+
{ kind: "flux-reconcile", field: "stack", lexicon: "k8s" },
|
|
43
48
|
{ kind: "helm-upgrade", field: "release", lexicon: "helm" },
|
|
44
49
|
];
|
|
45
50
|
|
package/src/lexicon.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Serializer } from "./serializer";
|
|
2
|
+
import type { Declarable } from "./declarable";
|
|
2
3
|
import type { LintRule } from "./lint/rule";
|
|
3
4
|
import type { RuleSpec } from "./lint/declarative";
|
|
4
5
|
import type { PostSynthCheck } from "./lint/post-synth";
|
|
@@ -424,6 +425,31 @@ export interface StackStatusObservation {
|
|
|
424
425
|
healthy?: boolean;
|
|
425
426
|
}
|
|
426
427
|
|
|
428
|
+
/**
|
|
429
|
+
* Context for a lexicon's {@link LexiconPlugin.buildRoots} hook (#1548).
|
|
430
|
+
*/
|
|
431
|
+
export interface BuildRootContext {
|
|
432
|
+
/**
|
|
433
|
+
* The directory the project configuration was loaded from (where
|
|
434
|
+
* `chant.config.*` lives) — relative root paths resolve against it, NOT
|
|
435
|
+
* against `sourceDir`, because a non-chant-source root (a kustomize
|
|
436
|
+
* overlay tree) usually lives beside the typed source rather than inside
|
|
437
|
+
* it.
|
|
438
|
+
*/
|
|
439
|
+
projectRoot: string;
|
|
440
|
+
/** The resolved project configuration, for the lexicon's own namespace. */
|
|
441
|
+
config: Record<string, unknown>;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* What a build-root render contributes to the build: entities keyed like
|
|
446
|
+
* discovered ones, plus non-fatal diagnostics.
|
|
447
|
+
*/
|
|
448
|
+
export interface BuildRootContribution {
|
|
449
|
+
entities: Map<string, Declarable>;
|
|
450
|
+
warnings?: string[];
|
|
451
|
+
}
|
|
452
|
+
|
|
427
453
|
export interface LexiconPlugin {
|
|
428
454
|
// ── Required ──────────────────────────────────────────────
|
|
429
455
|
/** Human-readable name (e.g. "aws", "gcp") */
|
|
@@ -557,6 +583,27 @@ export interface LexiconPlugin {
|
|
|
557
583
|
options?: ComponentPipelineOptions,
|
|
558
584
|
): ComponentPipelineResult;
|
|
559
585
|
|
|
586
|
+
/**
|
|
587
|
+
* Render this lexicon's config-declared build roots into entities (#1548
|
|
588
|
+
* piece 3) — the seam for a build root that is NOT typed chant source. The
|
|
589
|
+
* k8s lexicon implements it for `k8s.kustomize.roots`: each named
|
|
590
|
+
* kustomization dir renders (`kustomize build`) at build time and the
|
|
591
|
+
* documents come back as entities, which the build merges into the
|
|
592
|
+
* discovered set BEFORE partitioning — so they are serialized by this
|
|
593
|
+
* lexicon's serializer (ownership stamping included), seen by post-synth
|
|
594
|
+
* checks, and observed by `describeResources` exactly like discovered
|
|
595
|
+
* entities.
|
|
596
|
+
*
|
|
597
|
+
* Called once per top-level build (never for nested child projects), only
|
|
598
|
+
* when the CLI wires it up (`collectBuildRootContributors` in
|
|
599
|
+
* ./cli/plugins.ts → {@link BuildOptions.buildRoots}). A hook that has
|
|
600
|
+
* nothing configured must return an empty map, not throw; a hook that
|
|
601
|
+
* cannot render (missing binary, missing dir) should throw with a message
|
|
602
|
+
* naming the problem — the build reports it as a build error, not a stack
|
|
603
|
+
* trace. Omit for lexicons with no non-source build-root concept.
|
|
604
|
+
*/
|
|
605
|
+
buildRoots?(ctx: BuildRootContext): Promise<BuildRootContribution>;
|
|
606
|
+
|
|
560
607
|
// LSP
|
|
561
608
|
/** Provide completions for LSP */
|
|
562
609
|
completionProvider?(ctx: CompletionContext): CompletionItem[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, test, expect } from "vitest";
|
|
2
2
|
import { AWS_CARVE_TYPES, awsCarveType, applyAwsMapper } from "./aws-resources";
|
|
3
|
-
import { TIER_MAP } from "./tier-map";
|
|
3
|
+
import { TIER_MAP, FOLDS_INTO, IDENTITY_ATTR } from "./tier-map";
|
|
4
4
|
import { canAdoptFromState } from "./adopt-state";
|
|
5
5
|
|
|
6
6
|
describe("AWS carve-out table", () => {
|
|
@@ -21,10 +21,21 @@ describe("AWS carve-out table", () => {
|
|
|
21
21
|
"aws_secretsmanager_secret", "aws_ssm_parameter", "aws_ecr_repository",
|
|
22
22
|
"aws_vpc", "aws_subnet", "aws_security_group", "aws_route53_zone",
|
|
23
23
|
"aws_cloudwatch_log_group",
|
|
24
|
+
// #998 coverage expansion: streaming, EKS, Lambda periphery, networking
|
|
25
|
+
// periphery, audit, DB groups/clusters, API stages, identity, EFS periphery.
|
|
26
|
+
"aws_kinesis_stream", "aws_eks_cluster", "aws_eks_node_group",
|
|
27
|
+
"aws_lambda_permission", "aws_lambda_event_source_mapping",
|
|
28
|
+
"aws_vpc_endpoint", "aws_route", "aws_route_table_association",
|
|
29
|
+
"aws_flow_log", "aws_cloudtrail", "aws_cloudwatch_dashboard",
|
|
30
|
+
"aws_rds_cluster", "aws_db_parameter_group", "aws_elasticache_subnet_group",
|
|
31
|
+
"aws_lb_listener_rule", "aws_api_gateway_stage", "aws_apigatewayv2_stage",
|
|
32
|
+
"aws_cognito_user_pool", "aws_appautoscaling_target",
|
|
33
|
+
"aws_efs_mount_target", "aws_efs_access_point",
|
|
34
|
+
"aws_sqs_queue_policy", "aws_sns_topic_policy",
|
|
24
35
|
]) {
|
|
25
36
|
expect(types.has(t)).toBe(true);
|
|
26
37
|
}
|
|
27
|
-
expect(AWS_CARVE_TYPES.length).toBeGreaterThanOrEqual(
|
|
38
|
+
expect(AWS_CARVE_TYPES.length).toBeGreaterThanOrEqual(60);
|
|
28
39
|
});
|
|
29
40
|
|
|
30
41
|
test("constructors are non-empty and consistent per native type", () => {
|
|
@@ -78,4 +89,43 @@ describe("applyAwsMapper", () => {
|
|
|
78
89
|
expect(props).toEqual({ VpcId: "vpc-1", CidrBlock: "10.0.1.0/24" });
|
|
79
90
|
expect(props).not.toHaveProperty("AvailabilityZone");
|
|
80
91
|
});
|
|
92
|
+
|
|
93
|
+
test("wraps a queue policy's queue_url and parses its policy document", () => {
|
|
94
|
+
const { props } = applyAwsMapper(awsCarveType("aws_sqs_queue_policy")!, {
|
|
95
|
+
queue_url: "https://sqs.us-east-1.amazonaws.com/1/q",
|
|
96
|
+
policy: '{"Version":"2012-10-17","Statement":[]}',
|
|
97
|
+
});
|
|
98
|
+
expect(props.Queues).toEqual(["https://sqs.us-east-1.amazonaws.com/1/q"]);
|
|
99
|
+
expect(props.PolicyDocument).toEqual({ Version: "2012-10-17", Statement: [] });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe("tier + identity coverage maps (#998)", () => {
|
|
104
|
+
test("kubernetes provider types rank, with _v1 aliases sharing the entry", () => {
|
|
105
|
+
expect(TIER_MAP.kubernetes_manifest).toEqual({ tier: 1, mapsTo: "k8s:manifest" });
|
|
106
|
+
for (const t of ["kubernetes_deployment", "kubernetes_config_map", "kubernetes_service", "kubernetes_namespace"]) {
|
|
107
|
+
expect(TIER_MAP[t]).toMatchObject({ tier: 2 });
|
|
108
|
+
expect(TIER_MAP[`${t}_v1`]).toEqual(TIER_MAP[t]);
|
|
109
|
+
}
|
|
110
|
+
expect(TIER_MAP.kubernetes_horizontal_pod_autoscaler_v2).toEqual(TIER_MAP.kubernetes_horizontal_pod_autoscaler);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test("S3 and ECR sub-resources fold into their parent", () => {
|
|
114
|
+
for (const t of [
|
|
115
|
+
"aws_s3_bucket_website_configuration", "aws_s3_bucket_cors_configuration", "aws_s3_bucket_logging",
|
|
116
|
+
"aws_s3_bucket_ownership_controls", "aws_s3_bucket_notification",
|
|
117
|
+
]) {
|
|
118
|
+
expect(FOLDS_INTO[t]).toBe("aws_s3_bucket");
|
|
119
|
+
}
|
|
120
|
+
expect(FOLDS_INTO.aws_ecr_lifecycle_policy).toBe("aws_ecr_repository");
|
|
121
|
+
expect(FOLDS_INTO.aws_ecr_repository_policy).toBe("aws_ecr_repository");
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test("identity attrs cover the expanded types, including a dotted non-AWS path", () => {
|
|
125
|
+
expect(IDENTITY_ATTR.aws_elasticache_cluster).toBe("cluster_id");
|
|
126
|
+
expect(IDENTITY_ATTR.aws_ecs_task_definition).toBe("family");
|
|
127
|
+
expect(IDENTITY_ATTR.aws_route53_record).toBe("name");
|
|
128
|
+
expect(IDENTITY_ATTR.aws_eks_node_group).toBe("node_group_name");
|
|
129
|
+
expect(IDENTITY_ATTR.kubernetes_manifest).toBe("manifest.metadata.name");
|
|
130
|
+
});
|
|
81
131
|
});
|
|
@@ -120,7 +120,7 @@ export const AWS_CARVE_TYPES: AwsCarveType[] = [
|
|
|
120
120
|
fields: { name: "AutoScalingGroupName", min_size: "MinSize", max_size: "MaxSize", desired_capacity: "DesiredCapacity", vpc_zone_identifier: "VPCZoneIdentifier", health_check_type: "HealthCheckType" } },
|
|
121
121
|
{ tfType: "aws_ecs_cluster", tier: 1, nativeType: "AWS::ECS::Cluster", ctor: "EcsCluster", identityAttr: "name",
|
|
122
122
|
fields: { name: "ClusterName" }, tags: true },
|
|
123
|
-
{ tfType: "aws_ecs_task_definition", tier: 3, nativeType: "AWS::ECS::TaskDefinition", ctor: "TaskDefinition",
|
|
123
|
+
{ tfType: "aws_ecs_task_definition", tier: 3, nativeType: "AWS::ECS::TaskDefinition", ctor: "TaskDefinition", identityAttr: "family",
|
|
124
124
|
fields: { family: "Family", cpu: "Cpu", memory: "Memory", network_mode: "NetworkMode", execution_role_arn: "ExecutionRoleArn", task_role_arn: "TaskRoleArn" }, tags: true },
|
|
125
125
|
{ tfType: "aws_ebs_volume", tier: 1, nativeType: "AWS::EC2::Volume", ctor: "EC2Volume",
|
|
126
126
|
fields: { availability_zone: "AvailabilityZone", size: "Size", type: "VolumeType", encrypted: "Encrypted", iops: "Iops" }, tags: true },
|
|
@@ -140,13 +140,13 @@ export const AWS_CARVE_TYPES: AwsCarveType[] = [
|
|
|
140
140
|
fields: { identifier: "DBInstanceIdentifier", engine: "Engine", engine_version: "EngineVersion", instance_class: "DBInstanceClass", allocated_storage: "AllocatedStorage", db_name: "DBName", multi_az: "MultiAZ", storage_encrypted: "StorageEncrypted" }, tags: true },
|
|
141
141
|
{ tfType: "aws_db_subnet_group", tier: 1, nativeType: "AWS::RDS::DBSubnetGroup", ctor: "RDSDBSubnetGroup", identityAttr: "name",
|
|
142
142
|
fields: { name: "DBSubnetGroupName", description: "DBSubnetGroupDescription", subnet_ids: "SubnetIds" }, tags: true },
|
|
143
|
-
{ tfType: "aws_elasticache_cluster", tier: 2, nativeType: "AWS::ElastiCache::CacheCluster", ctor: "CacheCluster",
|
|
144
|
-
fields: { engine: "Engine", node_type: "CacheNodeType", num_cache_nodes: "NumCacheNodes", engine_version: "EngineVersion" }, tags: true },
|
|
143
|
+
{ tfType: "aws_elasticache_cluster", tier: 2, nativeType: "AWS::ElastiCache::CacheCluster", ctor: "CacheCluster", identityAttr: "cluster_id",
|
|
144
|
+
fields: { cluster_id: "ClusterName", engine: "Engine", node_type: "CacheNodeType", num_cache_nodes: "NumCacheNodes", engine_version: "EngineVersion" }, tags: true },
|
|
145
145
|
{ tfType: "aws_elasticache_replication_group", tier: 2, nativeType: "AWS::ElastiCache::ReplicationGroup", ctor: "ReplicationGroup", identityAttr: "replication_group_id",
|
|
146
146
|
fields: { replication_group_id: "ReplicationGroupId", description: "ReplicationGroupDescription", node_type: "CacheNodeType", engine: "Engine" }, tags: true },
|
|
147
147
|
|
|
148
148
|
// ── DNS, CDN & API ──
|
|
149
|
-
{ tfType: "aws_route53_record", tier: 2, nativeType: "AWS::Route53::RecordSet", ctor: "RecordSet",
|
|
149
|
+
{ tfType: "aws_route53_record", tier: 2, nativeType: "AWS::Route53::RecordSet", ctor: "RecordSet", identityAttr: "name",
|
|
150
150
|
fields: { name: "Name", type: "Type", ttl: "TTL", zone_id: "HostedZoneId", records: "ResourceRecords" } },
|
|
151
151
|
{ tfType: "aws_api_gateway_rest_api", tier: 2, nativeType: "AWS::ApiGateway::RestApi", ctor: "RestApi", identityAttr: "name",
|
|
152
152
|
fields: { name: "Name", description: "Description" }, tags: true },
|
|
@@ -168,6 +168,97 @@ export const AWS_CARVE_TYPES: AwsCarveType[] = [
|
|
|
168
168
|
fields: { protocol: "Protocol", endpoint: "Endpoint", topic_arn: "TopicArn" } },
|
|
169
169
|
{ tfType: "aws_sfn_state_machine", tier: 3, nativeType: "AWS::StepFunctions::StateMachine", ctor: "StateMachine", identityAttr: "name",
|
|
170
170
|
fields: { name: "StateMachineName", role_arn: "RoleArn", type: "StateMachineType" }, tags: true },
|
|
171
|
+
{ tfType: "aws_sqs_queue_policy", tier: 2, nativeType: "AWS::SQS::QueuePolicy", ctor: "QueuePolicy",
|
|
172
|
+
fields: { policy: json("PolicyDocument"), queue_url: { prop: "Queues", transform: (v) => (v === undefined ? v : [v]) } } },
|
|
173
|
+
{ tfType: "aws_sns_topic_policy", tier: 2, nativeType: "AWS::SNS::TopicPolicy", ctor: "TopicPolicy",
|
|
174
|
+
fields: { policy: json("PolicyDocument"), arn: { prop: "Topics", transform: (v) => (v === undefined ? v : [v]) } } },
|
|
175
|
+
|
|
176
|
+
// ── Streaming ──
|
|
177
|
+
{ tfType: "aws_kinesis_stream", tier: 1, nativeType: "AWS::Kinesis::Stream", ctor: "KinesisStream", identityAttr: "name",
|
|
178
|
+
fields: { name: "Name", shard_count: "ShardCount", retention_period: "RetentionPeriodHours" }, tags: true },
|
|
179
|
+
{ tfType: "aws_kinesis_firehose_delivery_stream", tier: 3, nativeType: "AWS::KinesisFirehose::DeliveryStream", ctor: "DeliveryStream", identityAttr: "name",
|
|
180
|
+
fields: { name: "DeliveryStreamName" }, tags: true },
|
|
181
|
+
|
|
182
|
+
// ── EKS ──
|
|
183
|
+
{ tfType: "aws_eks_cluster", tier: 2, nativeType: "AWS::EKS::Cluster", ctor: "EKSCluster", identityAttr: "name",
|
|
184
|
+
fields: { name: "Name", role_arn: "RoleArn", version: "Version" }, tags: true },
|
|
185
|
+
{ tfType: "aws_eks_node_group", tier: 2, nativeType: "AWS::EKS::Nodegroup", ctor: "Nodegroup", identityAttr: "node_group_name",
|
|
186
|
+
fields: { cluster_name: "ClusterName", node_group_name: "NodegroupName", node_role_arn: "NodeRole", subnet_ids: "Subnets",
|
|
187
|
+
instance_types: "InstanceTypes", ami_type: "AmiType", capacity_type: "CapacityType", disk_size: "DiskSize" } },
|
|
188
|
+
|
|
189
|
+
// ── Lambda periphery ──
|
|
190
|
+
{ tfType: "aws_lambda_permission", tier: 1, nativeType: "AWS::Lambda::Permission", ctor: "Permission",
|
|
191
|
+
fields: { action: "Action", function_name: "FunctionName", principal: "Principal", source_arn: "SourceArn", source_account: "SourceAccount" } },
|
|
192
|
+
{ tfType: "aws_lambda_event_source_mapping", tier: 2, nativeType: "AWS::Lambda::EventSourceMapping", ctor: "EventSourceMapping",
|
|
193
|
+
fields: { event_source_arn: "EventSourceArn", function_name: "FunctionName", batch_size: "BatchSize", enabled: "Enabled",
|
|
194
|
+
starting_position: "StartingPosition", maximum_batching_window_in_seconds: "MaximumBatchingWindowInSeconds" } },
|
|
195
|
+
{ tfType: "aws_lambda_alias", tier: 1, nativeType: "AWS::Lambda::Alias", ctor: "LambdaAlias", identityAttr: "name",
|
|
196
|
+
fields: { name: "Name", function_name: "FunctionName", function_version: "FunctionVersion", description: "Description" } },
|
|
197
|
+
{ tfType: "aws_lambda_layer_version", tier: 2, nativeType: "AWS::Lambda::LayerVersion", ctor: "LayerVersion", identityAttr: "layer_name",
|
|
198
|
+
fields: { layer_name: "LayerName", description: "Description", compatible_runtimes: "CompatibleRuntimes",
|
|
199
|
+
compatible_architectures: "CompatibleArchitectures", license_info: "LicenseInfo" } },
|
|
200
|
+
|
|
201
|
+
// ── Networking (endpoints, routes, peering, flow logs) ──
|
|
202
|
+
{ tfType: "aws_vpc_endpoint", tier: 2, nativeType: "AWS::EC2::VPCEndpoint", ctor: "VPCEndpoint",
|
|
203
|
+
fields: { vpc_id: "VpcId", service_name: "ServiceName", vpc_endpoint_type: "VpcEndpointType", route_table_ids: "RouteTableIds",
|
|
204
|
+
subnet_ids: "SubnetIds", security_group_ids: "SecurityGroupIds", private_dns_enabled: "PrivateDnsEnabled", policy: json("PolicyDocument") }, tags: true },
|
|
205
|
+
{ tfType: "aws_route_table_association", tier: 2, nativeType: "AWS::EC2::SubnetRouteTableAssociation", ctor: "SubnetRouteTableAssociation",
|
|
206
|
+
fields: { subnet_id: "SubnetId", route_table_id: "RouteTableId" } },
|
|
207
|
+
{ tfType: "aws_route", tier: 2, nativeType: "AWS::EC2::Route", ctor: "EC2Route",
|
|
208
|
+
fields: { route_table_id: "RouteTableId", destination_cidr_block: "DestinationCidrBlock", destination_ipv6_cidr_block: "DestinationIpv6CidrBlock",
|
|
209
|
+
gateway_id: "GatewayId", nat_gateway_id: "NatGatewayId", transit_gateway_id: "TransitGatewayId",
|
|
210
|
+
vpc_peering_connection_id: "VpcPeeringConnectionId", network_interface_id: "NetworkInterfaceId" } },
|
|
211
|
+
{ tfType: "aws_egress_only_internet_gateway", tier: 1, nativeType: "AWS::EC2::EgressOnlyInternetGateway", ctor: "EgressOnlyInternetGateway",
|
|
212
|
+
fields: { vpc_id: "VpcId" } },
|
|
213
|
+
{ tfType: "aws_vpc_peering_connection", tier: 2, nativeType: "AWS::EC2::VPCPeeringConnection", ctor: "VPCPeeringConnection",
|
|
214
|
+
fields: { vpc_id: "VpcId", peer_vpc_id: "PeerVpcId", peer_owner_id: "PeerOwnerId", peer_region: "PeerRegion" }, tags: true },
|
|
215
|
+
{ tfType: "aws_flow_log", tier: 2, nativeType: "AWS::EC2::FlowLog", ctor: "FlowLog",
|
|
216
|
+
fields: { traffic_type: "TrafficType", log_destination: "LogDestination", log_destination_type: "LogDestinationType",
|
|
217
|
+
iam_role_arn: "DeliverLogsPermissionArn", log_group_name: "LogGroupName", max_aggregation_interval: "MaxAggregationInterval" }, tags: true },
|
|
218
|
+
{ tfType: "aws_key_pair", tier: 1, nativeType: "AWS::EC2::KeyPair", ctor: "KeyPair", identityAttr: "key_name",
|
|
219
|
+
fields: { key_name: "KeyName", public_key: "PublicKeyMaterial" }, tags: true },
|
|
220
|
+
|
|
221
|
+
// ── Audit & observability ──
|
|
222
|
+
{ tfType: "aws_cloudtrail", tier: 2, nativeType: "AWS::CloudTrail::Trail", ctor: "Trail", identityAttr: "name",
|
|
223
|
+
fields: { name: "TrailName", s3_bucket_name: "S3BucketName", s3_key_prefix: "S3KeyPrefix",
|
|
224
|
+
include_global_service_events: "IncludeGlobalServiceEvents", is_multi_region_trail: "IsMultiRegionTrail",
|
|
225
|
+
enable_logging: "IsLogging", enable_log_file_validation: "EnableLogFileValidation", kms_key_id: "KMSKeyId",
|
|
226
|
+
sns_topic_name: "SnsTopicName", cloud_watch_logs_group_arn: "CloudWatchLogsLogGroupArn", cloud_watch_logs_role_arn: "CloudWatchLogsRoleArn" }, tags: true },
|
|
227
|
+
{ tfType: "aws_cloudwatch_dashboard", tier: 1, nativeType: "AWS::CloudWatch::Dashboard", ctor: "CwDashboard", identityAttr: "dashboard_name",
|
|
228
|
+
fields: { dashboard_name: "DashboardName", dashboard_body: "DashboardBody" } },
|
|
229
|
+
|
|
230
|
+
// ── Databases & cache (groups, clusters) ──
|
|
231
|
+
{ tfType: "aws_elasticache_subnet_group", tier: 1, nativeType: "AWS::ElastiCache::SubnetGroup", ctor: "EcSubnetGroup", identityAttr: "name",
|
|
232
|
+
fields: { name: "CacheSubnetGroupName", description: "Description", subnet_ids: "SubnetIds" }, tags: true },
|
|
233
|
+
{ tfType: "aws_db_parameter_group", tier: 2, nativeType: "AWS::RDS::DBParameterGroup", ctor: "RDSDBParameterGroup", identityAttr: "name",
|
|
234
|
+
fields: { name: "DBParameterGroupName", family: "Family", description: "Description" }, tags: true },
|
|
235
|
+
{ tfType: "aws_rds_cluster", tier: 2, nativeType: "AWS::RDS::DBCluster", ctor: "DbCluster", identityAttr: "cluster_identifier",
|
|
236
|
+
fields: { cluster_identifier: "DBClusterIdentifier", engine: "Engine", engine_version: "EngineVersion", database_name: "DatabaseName",
|
|
237
|
+
master_username: "MasterUsername", backup_retention_period: "BackupRetentionPeriod", preferred_backup_window: "PreferredBackupWindow",
|
|
238
|
+
storage_encrypted: "StorageEncrypted", kms_key_id: "KmsKeyId", port: "Port" }, tags: true },
|
|
239
|
+
|
|
240
|
+
// ── Load balancing & API stages ──
|
|
241
|
+
{ tfType: "aws_lb_listener_rule", tier: 3, nativeType: "AWS::ElasticLoadBalancingV2::ListenerRule", ctor: "ListenerRule",
|
|
242
|
+
fields: { listener_arn: "ListenerArn", priority: "Priority" } },
|
|
243
|
+
{ tfType: "aws_api_gateway_stage", tier: 2, nativeType: "AWS::ApiGateway::Stage", ctor: "ApigwStage", identityAttr: "stage_name",
|
|
244
|
+
fields: { rest_api_id: "RestApiId", stage_name: "StageName", deployment_id: "DeploymentId", description: "Description" }, tags: true },
|
|
245
|
+
{ tfType: "aws_api_gateway_deployment", tier: 2, nativeType: "AWS::ApiGateway::Deployment", ctor: "ApigwDeployment",
|
|
246
|
+
fields: { rest_api_id: "RestApiId", description: "Description" } },
|
|
247
|
+
{ tfType: "aws_apigatewayv2_stage", tier: 2, nativeType: "AWS::ApiGatewayV2::Stage", ctor: "Apigwv2Stage", identityAttr: "name",
|
|
248
|
+
fields: { api_id: "ApiId", name: "StageName", auto_deploy: "AutoDeploy", description: "Description" } },
|
|
249
|
+
|
|
250
|
+
// ── Identity & scaling ──
|
|
251
|
+
{ tfType: "aws_cognito_user_pool", tier: 3, nativeType: "AWS::Cognito::UserPool", ctor: "UserPool", identityAttr: "name",
|
|
252
|
+
fields: { name: "UserPoolName", mfa_configuration: "MfaConfiguration", deletion_protection: "DeletionProtection" } },
|
|
253
|
+
{ tfType: "aws_appautoscaling_target", tier: 2, nativeType: "AWS::ApplicationAutoScaling::ScalableTarget", ctor: "ScalableTarget",
|
|
254
|
+
fields: { max_capacity: "MaxCapacity", min_capacity: "MinCapacity", resource_id: "ResourceId",
|
|
255
|
+
scalable_dimension: "ScalableDimension", service_namespace: "ServiceNamespace", role_arn: "RoleARN" } },
|
|
256
|
+
|
|
257
|
+
// ── EFS periphery ──
|
|
258
|
+
{ tfType: "aws_efs_mount_target", tier: 1, nativeType: "AWS::EFS::MountTarget", ctor: "EFSMountTarget",
|
|
259
|
+
fields: { file_system_id: "FileSystemId", subnet_id: "SubnetId", ip_address: "IpAddress", security_groups: "SecurityGroups" } },
|
|
260
|
+
{ tfType: "aws_efs_access_point", tier: 2, nativeType: "AWS::EFS::AccessPoint", ctor: "EFSAccessPoint",
|
|
261
|
+
fields: { file_system_id: "FileSystemId" } },
|
|
171
262
|
];
|
|
172
263
|
|
|
173
264
|
const BY_TYPE = new Map(AWS_CARVE_TYPES.map((t) => [t.tfType, t]));
|
|
@@ -140,6 +140,23 @@ describe("buildGraph", () => {
|
|
|
140
140
|
expect(g.edges).toEqual([]);
|
|
141
141
|
});
|
|
142
142
|
|
|
143
|
+
test("a dotted identity attr resolves through nested blocks (#998)", () => {
|
|
144
|
+
const tree: Hcl2JsonTree = {
|
|
145
|
+
resource: {
|
|
146
|
+
kubernetes_manifest: {
|
|
147
|
+
app_config: [{ manifest: { apiVersion: "v1", kind: "ConfigMap", metadata: { name: "app-config", namespace: "web" } } }],
|
|
148
|
+
templated: [{ manifest: { apiVersion: "v1", kind: "ConfigMap", metadata: { name: "${var.name}" } } }],
|
|
149
|
+
},
|
|
150
|
+
aws_s3_bucket: { assets: [{ bucket: "myapp-assets-prod" }] },
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
const g = buildFixtureGraph(tree);
|
|
154
|
+
const byAddr = Object.fromEntries(g.nodes.map((n) => [n.address, n]));
|
|
155
|
+
expect(byAddr["kubernetes_manifest.app_config"].identity).toBe("app-config");
|
|
156
|
+
expect(byAddr["kubernetes_manifest.templated"].identity).toBeUndefined(); // interpolated
|
|
157
|
+
expect(byAddr["aws_s3_bucket.assets"].identity).toBe("myapp-assets-prod"); // flat attr unaffected
|
|
158
|
+
});
|
|
159
|
+
|
|
143
160
|
test("var / local references are not edges", () => {
|
|
144
161
|
const tree: Hcl2JsonTree = {
|
|
145
162
|
resource: {
|
package/src/terraform/graph.ts
CHANGED
|
@@ -140,11 +140,21 @@ function blockHasMeta(block: unknown, key: string): boolean {
|
|
|
140
140
|
return !!block && typeof block === "object" && key in (block as Record<string, unknown>);
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
/**
|
|
143
|
+
/**
|
|
144
|
+
* The resource's physical name, if its identity attribute is a plain literal
|
|
145
|
+
* (not interpolated). A dotted `IDENTITY_ATTR` entry walks nested blocks —
|
|
146
|
+
* hcl2json renders a nested block as a one-element array, so arrays step
|
|
147
|
+
* through their first element (`manifest.metadata.name`).
|
|
148
|
+
*/
|
|
144
149
|
function literalIdentity(block: unknown, type: string): string | undefined {
|
|
145
150
|
const attr = IDENTITY_ATTR[type];
|
|
146
151
|
if (!attr || !block || typeof block !== "object") return undefined;
|
|
147
|
-
|
|
152
|
+
let value: unknown = block;
|
|
153
|
+
for (const segment of attr.split(".")) {
|
|
154
|
+
if (Array.isArray(value)) value = value[0];
|
|
155
|
+
if (!value || typeof value !== "object") return undefined;
|
|
156
|
+
value = (value as Record<string, unknown>)[segment];
|
|
157
|
+
}
|
|
148
158
|
if (typeof value !== "string" || value.includes("${")) return undefined;
|
|
149
159
|
return value;
|
|
150
160
|
}
|
|
@@ -20,12 +20,52 @@ export interface TierInfo {
|
|
|
20
20
|
mapsTo: string;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Kubernetes provider types with a native k8s-lexicon target. `kubernetes_manifest`
|
|
25
|
+
* IS the manifest (tier 1). The typed provider resources (`kubernetes_deployment`,
|
|
26
|
+
* ...) reshape their HCL schema back into a manifest, so they rank tier 2; the
|
|
27
|
+
* common `_v1` aliases share their base type's entry.
|
|
28
|
+
*/
|
|
29
|
+
const K8S_TIER_BASE: Record<string, TierInfo> = {
|
|
30
|
+
kubernetes_manifest: { tier: 1, mapsTo: "k8s:manifest" },
|
|
31
|
+
kubernetes_namespace: { tier: 2, mapsTo: "k8s:Namespace" },
|
|
32
|
+
kubernetes_config_map: { tier: 2, mapsTo: "k8s:ConfigMap" },
|
|
33
|
+
kubernetes_secret: { tier: 2, mapsTo: "k8s:Secret" },
|
|
34
|
+
kubernetes_service: { tier: 2, mapsTo: "k8s:Service" },
|
|
35
|
+
kubernetes_service_account: { tier: 2, mapsTo: "k8s:ServiceAccount" },
|
|
36
|
+
kubernetes_deployment: { tier: 2, mapsTo: "k8s:Deployment" },
|
|
37
|
+
kubernetes_stateful_set: { tier: 2, mapsTo: "k8s:StatefulSet" },
|
|
38
|
+
kubernetes_daemon_set: { tier: 2, mapsTo: "k8s:DaemonSet" },
|
|
39
|
+
kubernetes_job: { tier: 2, mapsTo: "k8s:Job" },
|
|
40
|
+
kubernetes_cron_job: { tier: 2, mapsTo: "k8s:CronJob" },
|
|
41
|
+
kubernetes_ingress: { tier: 2, mapsTo: "k8s:Ingress" },
|
|
42
|
+
kubernetes_network_policy: { tier: 2, mapsTo: "k8s:NetworkPolicy" },
|
|
43
|
+
kubernetes_persistent_volume_claim: { tier: 2, mapsTo: "k8s:PersistentVolumeClaim" },
|
|
44
|
+
kubernetes_role: { tier: 2, mapsTo: "k8s:Role" },
|
|
45
|
+
kubernetes_role_binding: { tier: 2, mapsTo: "k8s:RoleBinding" },
|
|
46
|
+
kubernetes_cluster_role: { tier: 2, mapsTo: "k8s:ClusterRole" },
|
|
47
|
+
kubernetes_cluster_role_binding: { tier: 2, mapsTo: "k8s:ClusterRoleBinding" },
|
|
48
|
+
kubernetes_resource_quota: { tier: 2, mapsTo: "k8s:ResourceQuota" },
|
|
49
|
+
kubernetes_limit_range: { tier: 2, mapsTo: "k8s:LimitRange" },
|
|
50
|
+
kubernetes_priority_class: { tier: 2, mapsTo: "k8s:PriorityClass" },
|
|
51
|
+
kubernetes_pod_disruption_budget: { tier: 2, mapsTo: "k8s:PodDisruptionBudget" },
|
|
52
|
+
kubernetes_horizontal_pod_autoscaler: { tier: 2, mapsTo: "k8s:HorizontalPodAutoscaler" },
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const K8S_TIER: Record<string, TierInfo> = Object.fromEntries(
|
|
56
|
+
Object.entries(K8S_TIER_BASE).flatMap(([type, info]) =>
|
|
57
|
+
type === "kubernetes_manifest" ? [[type, info]] : [[type, info], [`${type}_v1`, info]],
|
|
58
|
+
),
|
|
59
|
+
);
|
|
60
|
+
// The one provider type whose current alias is _v2, not _v1.
|
|
61
|
+
K8S_TIER.kubernetes_horizontal_pod_autoscaler_v2 = K8S_TIER_BASE.kubernetes_horizontal_pod_autoscaler;
|
|
62
|
+
|
|
23
63
|
/** TF resource type → native tier. Absent = unsupported (score 0). */
|
|
24
64
|
export const TIER_MAP: Record<string, TierInfo> = {
|
|
25
65
|
// AWS: derived from the carve-out table so advise and emit stay in lockstep.
|
|
26
66
|
...Object.fromEntries(AWS_CARVE_TYPES.map((t) => [t.tfType, { tier: t.tier, mapsTo: t.nativeType }])),
|
|
27
|
-
// Kubernetes —
|
|
28
|
-
|
|
67
|
+
// Kubernetes — ranked by advise; emit support is a separate target.
|
|
68
|
+
...K8S_TIER,
|
|
29
69
|
};
|
|
30
70
|
|
|
31
71
|
/**
|
|
@@ -44,16 +84,28 @@ export const FOLDS_INTO: Record<string, string> = {
|
|
|
44
84
|
aws_s3_bucket_public_access_block: "aws_s3_bucket",
|
|
45
85
|
aws_s3_bucket_server_side_encryption_configuration: "aws_s3_bucket",
|
|
46
86
|
aws_s3_bucket_lifecycle_configuration: "aws_s3_bucket",
|
|
87
|
+
aws_s3_bucket_website_configuration: "aws_s3_bucket",
|
|
88
|
+
aws_s3_bucket_cors_configuration: "aws_s3_bucket",
|
|
89
|
+
aws_s3_bucket_logging: "aws_s3_bucket",
|
|
90
|
+
aws_s3_bucket_ownership_controls: "aws_s3_bucket",
|
|
91
|
+
aws_s3_bucket_notification: "aws_s3_bucket",
|
|
92
|
+
aws_s3_bucket_accelerate_configuration: "aws_s3_bucket",
|
|
93
|
+
aws_s3_bucket_request_payment_configuration: "aws_s3_bucket",
|
|
94
|
+
aws_s3_bucket_intelligent_tiering_configuration: "aws_s3_bucket",
|
|
95
|
+
aws_ecr_lifecycle_policy: "aws_ecr_repository",
|
|
96
|
+
aws_ecr_repository_policy: "aws_ecr_repository",
|
|
47
97
|
};
|
|
48
98
|
|
|
49
99
|
/**
|
|
50
|
-
* The HCL attribute carrying a resource's physical name, per type —
|
|
51
|
-
* from the
|
|
52
|
-
*
|
|
100
|
+
* The HCL attribute carrying a resource's physical name, per type — AWS entries
|
|
101
|
+
* derived from the carve-out table, non-AWS listed directly. A dotted entry is
|
|
102
|
+
* a path into nested blocks (`manifest.metadata.name`). Used for the graph's
|
|
103
|
+
* identity and the live-import hint. Absent → fall back to the TF logical name.
|
|
53
104
|
*/
|
|
54
|
-
export const IDENTITY_ATTR: Record<string, string> =
|
|
55
|
-
AWS_CARVE_TYPES.filter((t) => t.identityAttr).map((t) => [t.tfType, t.identityAttr!]),
|
|
56
|
-
|
|
105
|
+
export const IDENTITY_ATTR: Record<string, string> = {
|
|
106
|
+
...Object.fromEntries(AWS_CARVE_TYPES.filter((t) => t.identityAttr).map((t) => [t.tfType, t.identityAttr!])),
|
|
107
|
+
kubernetes_manifest: "manifest.metadata.name",
|
|
108
|
+
};
|
|
57
109
|
|
|
58
110
|
export function resolveTier(tfType: string): TierInfo | null {
|
|
59
111
|
return TIER_MAP[tfType] ?? null;
|