@intentius/chant 0.124.51 → 0.124.54
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/audit/discover.d.ts.map +1 -1
- package/dist/audit/discover.js +3 -1
- package/dist/behaviour.d.ts +1 -1
- package/dist/behaviour.d.ts.map +1 -1
- package/dist/capabilities/templates.d.ts +65 -0
- package/dist/capabilities/templates.d.ts.map +1 -0
- package/dist/capabilities/templates.js +193 -0
- package/dist/capabilities/templates.json +145 -0
- package/dist/change-set-graph.d.ts +35 -3
- package/dist/change-set-graph.d.ts.map +1 -1
- package/dist/change-set-graph.js +60 -9
- package/dist/change-set.d.ts +65 -7
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +23 -12
- package/dist/ci-identity.d.ts +7 -2
- package/dist/ci-identity.d.ts.map +1 -1
- package/dist/ci-identity.js +4 -1
- package/dist/cli/commands/import-index.d.ts +52 -0
- package/dist/cli/commands/import-index.d.ts.map +1 -0
- package/dist/cli/commands/import-index.js +226 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +4 -2
- package/dist/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/components.js +11 -2
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +16 -3
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +22 -4
- package/dist/cli/handlers/index-cloud.d.ts +14 -0
- package/dist/cli/handlers/index-cloud.d.ts.map +1 -0
- package/dist/cli/handlers/index-cloud.js +22 -0
- package/dist/cli/handlers/index-diff.d.ts +18 -0
- package/dist/cli/handlers/index-diff.d.ts.map +1 -0
- package/dist/cli/handlers/index-diff.js +142 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts +25 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-drift.js +64 -0
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.js +188 -28
- package/dist/cli/handlers/misc.d.ts +9 -0
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +77 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +17 -3
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +89 -15
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +28 -4
- package/dist/cli/handlers/scenario.d.ts.map +1 -1
- package/dist/cli/handlers/scenario.js +8 -7
- package/dist/cli/handlers/search.d.ts +34 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +216 -36
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +55 -1
- package/dist/cli/mcp/lifecycle-tools.d.ts.map +1 -1
- package/dist/cli/mcp/lifecycle-tools.js +3 -2
- package/dist/cli/mcp/resource-handlers.d.ts.map +1 -1
- package/dist/cli/mcp/resource-handlers.js +4 -3
- package/dist/cli/mcp/workspace-tools.js +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +55 -2
- package/dist/cli/registry.d.ts +19 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cloud-lister/aws.d.ts +35 -0
- package/dist/cloud-lister/aws.d.ts.map +1 -0
- package/dist/cloud-lister/aws.js +203 -0
- package/dist/cloud-lister/azure.d.ts +34 -0
- package/dist/cloud-lister/azure.d.ts.map +1 -0
- package/dist/cloud-lister/azure.js +129 -0
- package/dist/cloud-lister/common.d.ts +40 -0
- package/dist/cloud-lister/common.d.ts.map +1 -0
- package/dist/cloud-lister/common.js +83 -0
- package/dist/cloud-lister/credentials.d.ts +50 -0
- package/dist/cloud-lister/credentials.d.ts.map +1 -0
- package/dist/cloud-lister/credentials.js +86 -0
- package/dist/cloud-lister/fakes.d.ts +27 -0
- package/dist/cloud-lister/fakes.d.ts.map +1 -0
- package/dist/cloud-lister/fakes.js +50 -0
- package/dist/cloud-lister/gcp.d.ts +42 -0
- package/dist/cloud-lister/gcp.d.ts.map +1 -0
- package/dist/cloud-lister/gcp.js +143 -0
- package/dist/cloud-lister/guard.d.ts +49 -0
- package/dist/cloud-lister/guard.d.ts.map +1 -0
- package/dist/cloud-lister/guard.js +103 -0
- package/dist/cloud-lister/ids.d.ts +23 -0
- package/dist/cloud-lister/ids.d.ts.map +1 -0
- package/dist/cloud-lister/ids.js +42 -0
- package/dist/cloud-lister/index.d.ts +67 -0
- package/dist/cloud-lister/index.d.ts.map +1 -0
- package/dist/cloud-lister/index.js +102 -0
- package/dist/cloud-lister/kubernetes.d.ts +64 -0
- package/dist/cloud-lister/kubernetes.d.ts.map +1 -0
- package/dist/cloud-lister/kubernetes.js +276 -0
- package/dist/cloud-lister/markers.d.ts +31 -0
- package/dist/cloud-lister/markers.d.ts.map +1 -0
- package/dist/cloud-lister/markers.js +73 -0
- package/dist/cloud-lister/mask.d.ts +31 -0
- package/dist/cloud-lister/mask.d.ts.map +1 -0
- package/dist/cloud-lister/mask.js +74 -0
- package/dist/cloud-lister/sigv4.d.ts +29 -0
- package/dist/cloud-lister/sigv4.d.ts.map +1 -0
- package/dist/cloud-lister/sigv4.js +54 -0
- package/dist/cloud-lister/transport.d.ts +55 -0
- package/dist/cloud-lister/transport.d.ts.map +1 -0
- package/dist/cloud-lister/transport.js +86 -0
- package/dist/cloud-lister/types.d.ts +121 -0
- package/dist/cloud-lister/types.d.ts.map +1 -0
- package/dist/cloud-lister/types.js +24 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +6 -0
- package/dist/components/capability-plugin.d.ts +9 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability.d.ts +224 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +21 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +58 -14
- package/dist/components/covered-round.d.ts +173 -0
- package/dist/components/covered-round.d.ts.map +1 -0
- package/dist/components/covered-round.js +200 -0
- package/dist/components/declared-reads.d.ts +38 -0
- package/dist/components/declared-reads.d.ts.map +1 -0
- package/dist/components/declared-reads.js +131 -0
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/components/deploy-units.js +4 -0
- package/dist/components/driver.d.ts +42 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +74 -3
- package/dist/components/fan-out-run.d.ts +23 -1
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +82 -14
- package/dist/components/fan-out-support.d.ts +6 -0
- package/dist/components/fan-out-support.d.ts.map +1 -1
- package/dist/components/fan-out-support.js +4 -1
- package/dist/components/fan-out.d.ts +28 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/groups.d.ts +229 -0
- package/dist/components/groups.d.ts.map +1 -0
- package/dist/components/groups.js +760 -0
- package/dist/components/index.d.ts +7 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +5 -0
- package/dist/components/plan-shape-conformance.d.ts +48 -0
- package/dist/components/plan-shape-conformance.d.ts.map +1 -0
- package/dist/components/plan-shape-conformance.js +122 -0
- package/dist/components/pr-run.d.ts +62 -7
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +354 -53
- package/dist/components/promote-rounds.d.ts +9 -0
- package/dist/components/promote-rounds.d.ts.map +1 -1
- package/dist/components/promote-rounds.js +23 -2
- package/dist/components/promote.d.ts +17 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +36 -6
- package/dist/components/release-gate.d.ts +23 -1
- package/dist/components/release-gate.d.ts.map +1 -1
- package/dist/components/release-gate.js +97 -33
- package/dist/components/run-groups.d.ts +58 -0
- package/dist/components/run-groups.d.ts.map +1 -0
- package/dist/components/run-groups.js +78 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +6 -1
- package/dist/components/verbs/index.d.ts +1 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +1 -0
- package/dist/components/verbs/member-outputs.d.ts +187 -0
- package/dist/components/verbs/member-outputs.d.ts.map +1 -0
- package/dist/components/verbs/member-outputs.js +218 -0
- package/dist/components/wave-plan.d.ts +2 -0
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +4 -1
- package/dist/config.d.ts +60 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +27 -0
- package/dist/deep-observation.d.ts +1 -13
- package/dist/deep-observation.d.ts.map +1 -1
- package/dist/deep-observation.js +5 -22
- package/dist/drift-record.d.ts +542 -0
- package/dist/drift-record.d.ts.map +1 -0
- package/dist/drift-record.js +886 -0
- package/dist/engine-facts.d.ts +144 -0
- package/dist/engine-facts.d.ts.map +1 -0
- package/dist/engine-facts.js +14 -0
- package/dist/graph-ir.d.ts +153 -2
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +224 -6
- package/dist/graph-refs.d.ts +145 -0
- package/dist/graph-refs.d.ts.map +1 -1
- package/dist/graph-refs.js +305 -0
- package/dist/graph-schema/fixtures/adopt.json +15 -0
- package/dist/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/dist/graph-schema/fixtures/index.json +68 -0
- package/dist/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/dist/graph-schema/fixtures.d.ts +23 -0
- package/dist/graph-schema/fixtures.d.ts.map +1 -0
- package/dist/graph-schema/fixtures.js +246 -0
- package/dist/graph-schema/generate.d.ts +15 -0
- package/dist/graph-schema/generate.d.ts.map +1 -0
- package/dist/graph-schema/generate.js +267 -0
- package/dist/graph-schema/graph.schema.json +1387 -0
- package/dist/health.schema.json +2 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/instance-nodes.d.ts +159 -0
- package/dist/instance-nodes.d.ts.map +1 -0
- package/dist/instance-nodes.js +231 -0
- package/dist/lexicon.d.ts +72 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/adoption-file.d.ts +56 -0
- package/dist/lifecycle/adoption-file.d.ts.map +1 -0
- package/dist/lifecycle/adoption-file.js +123 -0
- package/dist/lifecycle/cloud-index.d.ts +186 -0
- package/dist/lifecycle/cloud-index.d.ts.map +1 -0
- package/dist/lifecycle/cloud-index.js +618 -0
- package/dist/lifecycle/derive-edges.d.ts +59 -0
- package/dist/lifecycle/derive-edges.d.ts.map +1 -0
- package/dist/lifecycle/derive-edges.js +126 -0
- package/dist/lifecycle/git.d.ts +10 -9
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +7 -1
- package/dist/lifecycle/identity-match.d.ts +133 -0
- package/dist/lifecycle/identity-match.d.ts.map +1 -0
- package/dist/lifecycle/identity-match.js +147 -0
- package/dist/lifecycle/index-diff.d.ts +224 -0
- package/dist/lifecycle/index-diff.d.ts.map +1 -0
- package/dist/lifecycle/index-diff.js +327 -0
- package/dist/lifecycle/index-document.d.ts +130 -0
- package/dist/lifecycle/index-document.d.ts.map +1 -0
- package/dist/lifecycle/index-document.js +189 -0
- package/dist/lifecycle/index-drift.d.ts +121 -0
- package/dist/lifecycle/index-drift.d.ts.map +1 -0
- package/dist/lifecycle/index-drift.js +178 -0
- package/dist/lifecycle/index-import.d.ts +168 -0
- package/dist/lifecycle/index-import.d.ts.map +1 -0
- package/dist/lifecycle/index-import.js +515 -0
- package/dist/lifecycle/index-join.d.ts +129 -0
- package/dist/lifecycle/index-join.d.ts.map +1 -0
- package/dist/lifecycle/index-join.js +248 -0
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/observation-baseline.d.ts +61 -21
- package/dist/lifecycle/observation-baseline.d.ts.map +1 -1
- package/dist/lifecycle/observation-baseline.js +144 -19
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +6 -1
- package/dist/lifecycle/query.d.ts +45 -4
- package/dist/lifecycle/query.d.ts.map +1 -1
- package/dist/lifecycle/query.js +89 -7
- package/dist/lifecycle/replay.d.ts +10 -3
- package/dist/lifecycle/replay.d.ts.map +1 -1
- package/dist/lifecycle/replay.js +10 -6
- package/dist/lifecycle/scenario.d.ts +4 -3
- package/dist/lifecycle/scenario.d.ts.map +1 -1
- package/dist/lifecycle/snapshot-store-fake.d.ts +9 -0
- package/dist/lifecycle/snapshot-store-fake.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-fake.js +21 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts +102 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-s3.js +254 -0
- package/dist/lifecycle/snapshot-store.d.ts +170 -0
- package/dist/lifecycle/snapshot-store.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store.js +832 -0
- package/dist/lifecycle/snapshot.d.ts +11 -0
- package/dist/lifecycle/snapshot.d.ts.map +1 -1
- package/dist/lifecycle/snapshot.js +18 -5
- package/dist/lifecycle/type-listing.d.ts +148 -0
- package/dist/lifecycle/type-listing.d.ts.map +1 -0
- package/dist/lifecycle/type-listing.js +166 -0
- package/dist/lint/component-checks.d.ts +15 -1
- package/dist/lint/component-checks.d.ts.map +1 -1
- package/dist/lint/component-checks.js +1 -0
- package/dist/lint/presets/relaxed.json +2 -1
- package/dist/lint/presets/strict.json +2 -1
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.js +13 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.js +8 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts +33 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts.map +1 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.js +123 -0
- package/dist/lint/rules/comp/index.d.ts +2 -1
- package/dist/lint/rules/comp/index.d.ts.map +1 -1
- package/dist/lint/rules/comp/index.js +4 -1
- package/dist/observation.d.ts +19 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +18 -1
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +1 -1
- package/dist/op/activities/change-set.d.ts +6 -4
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +4 -2
- package/dist/op/activity-failure.d.ts +27 -0
- package/dist/op/activity-failure.d.ts.map +1 -1
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/index.d.ts +2 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +5 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +22 -8
- package/dist/pr-loop.d.ts +92 -3
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +62 -3
- package/dist/pulumi-urn.d.ts +101 -0
- package/dist/pulumi-urn.d.ts.map +1 -0
- package/dist/pulumi-urn.js +131 -0
- package/dist/release-floors.d.ts +23 -0
- package/dist/release-floors.d.ts.map +1 -0
- package/dist/release-floors.js +22 -0
- package/dist/sensitive-key.d.ts +23 -0
- package/dist/sensitive-key.d.ts.map +1 -0
- package/dist/sensitive-key.js +31 -0
- package/dist/wave-runtime.mjs +234 -234
- package/dist/workspace/adoption-report.d.ts +53 -0
- package/dist/workspace/adoption-report.d.ts.map +1 -0
- package/dist/workspace/adoption-report.js +76 -0
- package/dist/workspace/capabilities-contract.d.ts +7 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -1
- package/dist/workspace/capabilities-contract.js +2 -1
- package/dist/workspace/capabilities.schema.json +98 -0
- package/dist/workspace/change-set.schema.json +42 -3
- package/dist/workspace/ci-cloud-identity.d.ts +13 -1
- package/dist/workspace/ci-cloud-identity.d.ts.map +1 -1
- package/dist/workspace/ci-cloud-identity.js +30 -1
- package/dist/workspace/compose-graph.d.ts +10 -1
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +6 -1
- package/dist/workspace/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +6 -1
- package/dist/workspace/drift-cli.d.ts +81 -0
- package/dist/workspace/drift-cli.d.ts.map +1 -0
- package/dist/workspace/drift-cli.js +317 -0
- package/dist/workspace/drift.schema.json +672 -0
- package/dist/workspace/graph-cli.d.ts +2 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +3 -0
- package/dist/workspace/graph.schema.json +72 -0
- package/dist/workspace/init.d.ts +5 -1
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +55 -9
- package/dist/workspace/ledger.schema.json +1 -1
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +2 -0
- package/dist/workspace/pr-report.schema.json +76 -3
- package/dist/workspace/promote-waves.d.ts +112 -0
- package/dist/workspace/promote-waves.d.ts.map +1 -0
- package/dist/workspace/promote-waves.js +290 -0
- package/dist/workspace/promote.d.ts +84 -2
- package/dist/workspace/promote.d.ts.map +1 -1
- package/dist/workspace/promote.js +347 -61
- package/dist/workspace/reason-codes.d.ts +12 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +14 -0
- package/dist/workspace/search-contract.d.ts +3 -3
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/search-contract.js +2 -0
- package/dist/workspace/search.schema.json +103 -5
- package/package.json +14 -1
- package/src/__fixtures__/drift-record/README.md +58 -0
- package/src/__fixtures__/drift-record/choudoufu-cone.ndjson +4 -0
- package/src/__fixtures__/drift-record/choudoufu-resource.ndjson +3 -0
- package/src/__fixtures__/drift-record/component-status-ledger.json +65 -0
- package/src/__fixtures__/drift-record/component-status.json +91 -0
- package/src/__fixtures__/drift-record/deep-diff.json +259 -0
- package/src/__fixtures__/drift-record/lifecycle-diff-live.json +825 -0
- package/src/__fixtures__/drift-record/live-diff.json +125 -0
- package/src/audit/discover.e2e.test.ts +14 -0
- package/src/audit/discover.ts +3 -1
- package/src/behaviour.ts +1 -1
- package/src/capabilities/templates.json +145 -0
- package/src/capabilities/templates.test.ts +212 -0
- package/src/capabilities/templates.ts +204 -0
- package/src/change-set-bundle.test.ts +83 -0
- package/src/change-set-graph.ts +80 -9
- package/src/change-set.test.ts +24 -0
- package/src/change-set.ts +77 -14
- package/src/ci-identity-targets.test.ts +23 -0
- package/src/ci-identity.ts +10 -4
- package/src/cli/commands/import-index.test.ts +117 -0
- package/src/cli/commands/import-index.ts +265 -0
- package/src/cli/commands/lint.ts +4 -2
- package/src/cli/handlers/components.test.ts +9 -0
- package/src/cli/handlers/components.ts +12 -2
- package/src/cli/handlers/fan-out.ts +17 -3
- package/src/cli/handlers/graph.test.ts +42 -0
- package/src/cli/handlers/graph.ts +26 -4
- package/src/cli/handlers/index-cloud.ts +32 -0
- package/src/cli/handlers/index-diff.test.ts +68 -0
- package/src/cli/handlers/index-diff.ts +146 -0
- package/src/cli/handlers/ledger-root-member.test.ts +161 -0
- package/src/cli/handlers/lifecycle-drift.ts +68 -0
- package/src/cli/handlers/lifecycle.test.ts +33 -11
- package/src/cli/handlers/lifecycle.ts +205 -30
- package/src/cli/handlers/misc.ts +73 -0
- package/src/cli/handlers/pr-waves-blocked.test.ts +37 -2
- package/src/cli/handlers/pr.ts +16 -3
- package/src/cli/handlers/promote.test.ts +64 -0
- package/src/cli/handlers/promote.ts +81 -6
- package/src/cli/handlers/query.ts +27 -4
- package/src/cli/handlers/run-declared-reads-cli.test.ts +187 -0
- package/src/cli/handlers/run-groups-cli.test.ts +229 -0
- package/src/cli/handlers/scenario.test.ts +13 -0
- package/src/cli/handlers/scenario.ts +8 -7
- package/src/cli/handlers/search-index.test.ts +255 -0
- package/src/cli/handlers/search-json.test.ts +1 -1
- package/src/cli/handlers/search-ownership.test.ts +194 -0
- package/src/cli/handlers/search.ts +271 -38
- package/src/cli/main.test.ts +7 -0
- package/src/cli/main.ts +56 -1
- package/src/cli/mcp/lifecycle-tools.ts +3 -2
- package/src/cli/mcp/resource-handlers.ts +4 -3
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +40 -2
- package/src/cli/registry.ts +19 -1
- package/src/cloud-lister/aws.test.ts +202 -0
- package/src/cloud-lister/aws.ts +226 -0
- package/src/cloud-lister/azure.test.ts +132 -0
- package/src/cloud-lister/azure.ts +142 -0
- package/src/cloud-lister/common.ts +115 -0
- package/src/cloud-lister/credentials.ts +110 -0
- package/src/cloud-lister/fakes.ts +66 -0
- package/src/cloud-lister/gcp.test.ts +121 -0
- package/src/cloud-lister/gcp.ts +159 -0
- package/src/cloud-lister/guard.test.ts +198 -0
- package/src/cloud-lister/guard.ts +111 -0
- package/src/cloud-lister/ids.ts +54 -0
- package/src/cloud-lister/index.ts +134 -0
- package/src/cloud-lister/kubernetes.test.ts +160 -0
- package/src/cloud-lister/kubernetes.ts +284 -0
- package/src/cloud-lister/markers.ts +74 -0
- package/src/cloud-lister/mask.ts +77 -0
- package/src/cloud-lister/shape.test.ts +81 -0
- package/src/cloud-lister/sigv4.ts +70 -0
- package/src/cloud-lister/transport.ts +118 -0
- package/src/cloud-lister/types.ts +135 -0
- package/src/components/capability-plugin-loader.ts +4 -0
- package/src/components/capability-plugin.ts +10 -0
- package/src/components/capability.ts +238 -0
- package/src/components/cli-support.ts +70 -14
- package/src/components/covered-round.test.ts +166 -0
- package/src/components/covered-round.ts +293 -0
- package/src/components/declared-reads.test.ts +103 -0
- package/src/components/declared-reads.ts +134 -0
- package/src/components/deploy-units.ts +4 -0
- package/src/components/driver.ts +101 -4
- package/src/components/fan-out-run.ts +95 -15
- package/src/components/fan-out-support.ts +10 -1
- package/src/components/fan-out.ts +30 -0
- package/src/components/groups.test.ts +320 -0
- package/src/components/groups.ts +880 -0
- package/src/components/index.ts +59 -0
- package/src/components/plan-shape-conformance.ts +130 -0
- package/src/components/pr-env-run-bundle.test.ts +2 -0
- package/src/components/pr-run.test.ts +728 -4
- package/src/components/pr-run.ts +395 -55
- package/src/components/promote-rounds.ts +25 -2
- package/src/components/promote.ts +55 -5
- package/src/components/registry.test.ts +1 -1
- package/src/components/release-gate.ts +115 -30
- package/src/components/release-groups.test.ts +362 -0
- package/src/components/run-groups.ts +113 -0
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +1 -0
- package/src/components/verbs/member-outputs.test.ts +205 -0
- package/src/components/verbs/member-outputs.ts +308 -0
- package/src/components/wave-plan.ts +5 -2
- package/src/config.ts +44 -0
- package/src/deep-observation.ts +5 -23
- package/src/drift-record.test.ts +596 -0
- package/src/drift-record.ts +1206 -0
- package/src/engine-facts.guard.test.ts +111 -0
- package/src/engine-facts.test.ts +178 -0
- package/src/engine-facts.ts +154 -0
- package/src/gated-waves-bundle.test.ts +2 -0
- package/src/graph-ir-live.test.ts +92 -0
- package/src/graph-ir.ts +317 -7
- package/src/graph-refs.ts +416 -0
- package/src/graph-schema/fixtures/adopt.json +15 -0
- package/src/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/src/graph-schema/fixtures/index.json +68 -0
- package/src/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/src/graph-schema/fixtures.ts +267 -0
- package/src/graph-schema/generate.ts +263 -0
- package/src/graph-schema/graph-schema.test.ts +153 -0
- package/src/graph-schema/graph.schema.json +1387 -0
- package/src/health.schema.json +2 -1
- package/src/identity.ts +2 -0
- package/src/index.ts +2 -0
- package/src/instance-nodes.ts +288 -0
- package/src/lexicon.ts +76 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T120000Z-aaaaaaaaaaaa.json +149 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T130000Z-bbbbbbbbbbbb.json +127 -0
- package/src/lifecycle/adoption-file.test.ts +100 -0
- package/src/lifecycle/adoption-file.ts +154 -0
- package/src/lifecycle/cloud-index.test.ts +517 -0
- package/src/lifecycle/cloud-index.ts +736 -0
- package/src/lifecycle/derive-edges.test.ts +193 -0
- package/src/lifecycle/derive-edges.ts +182 -0
- package/src/lifecycle/git.ts +10 -4
- package/src/lifecycle/identity-match.test.ts +308 -0
- package/src/lifecycle/identity-match.ts +257 -0
- package/src/lifecycle/index-diff.test.ts +198 -0
- package/src/lifecycle/index-diff.ts +476 -0
- package/src/lifecycle/index-document.test.ts +64 -0
- package/src/lifecycle/index-document.ts +299 -0
- package/src/lifecycle/index-drift.test.ts +191 -0
- package/src/lifecycle/index-drift.ts +304 -0
- package/src/lifecycle/index-import.test.ts +255 -0
- package/src/lifecycle/index-import.ts +634 -0
- package/src/lifecycle/index-join.test.ts +250 -0
- package/src/lifecycle/index-join.ts +304 -0
- package/src/lifecycle/index-store-load-bearing.test.ts +187 -0
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/member-ledger.test.ts +25 -7
- package/src/lifecycle/observation-baseline.test.ts +72 -1
- package/src/lifecycle/observation-baseline.ts +190 -27
- package/src/lifecycle/observe.ts +6 -1
- package/src/lifecycle/query.test.ts +69 -1
- package/src/lifecycle/query.ts +103 -10
- package/src/lifecycle/replay.test.ts +9 -5
- package/src/lifecycle/replay.ts +9 -5
- package/src/lifecycle/scenario.ts +4 -3
- package/src/lifecycle/snapshot-store-fake.ts +29 -0
- package/src/lifecycle/snapshot-store-s3.ts +316 -0
- package/src/lifecycle/snapshot-store.test.ts +385 -0
- package/src/lifecycle/snapshot-store.ts +981 -0
- package/src/lifecycle/snapshot.test.ts +13 -0
- package/src/lifecycle/snapshot.ts +23 -6
- package/src/lifecycle/type-listing.test.ts +166 -0
- package/src/lifecycle/type-listing.ts +309 -0
- package/src/lint/component-checks.ts +17 -1
- package/src/lint/config.test.ts +3 -0
- package/src/lint/presets/relaxed.json +2 -1
- package/src/lint/presets/strict.json +2 -1
- package/src/lint/rules/__fixtures__/comp/comp008/fail/dns.component.ts +15 -0
- package/src/lint/rules/__fixtures__/comp/comp008/pass/dns.component.ts +10 -0
- package/src/lint/rules/comp/comp.test.ts +2 -1
- package/src/lint/rules/comp/comp008-applies-signal-only-root.ts +121 -0
- package/src/lint/rules/comp/comp008.test.ts +77 -0
- package/src/lint/rules/comp/index.ts +4 -1
- package/src/observation-edges.test.ts +33 -0
- package/src/observation.ts +36 -1
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +8 -5
- package/src/op/activity-failure.ts +36 -0
- package/src/op/index.ts +2 -1
- package/src/op/local-executor.test.ts +80 -0
- package/src/op/local-executor.ts +27 -9
- package/src/pr-loop-bundle.test.ts +5 -2
- package/src/pr-loop.test.ts +57 -1
- package/src/pr-loop.ts +154 -6
- package/src/pulumi-urn.ts +151 -0
- package/src/release-floors.ts +22 -0
- package/src/sensitive-key.ts +34 -0
- package/src/workspace/adoption-report.test.ts +61 -0
- package/src/workspace/adoption-report.ts +103 -0
- package/src/workspace/capabilities-contract.test.ts +4 -0
- package/src/workspace/capabilities-contract.ts +9 -1
- package/src/workspace/capabilities.schema.json +98 -0
- package/src/workspace/change-set.schema.json +42 -3
- package/src/workspace/ci-cloud-identity.ts +31 -1
- package/src/workspace/compose-graph.test.ts +12 -0
- package/src/workspace/compose-graph.ts +12 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
- package/src/workspace/conformance/index.ts +6 -1
- package/src/workspace/drift-cli.test.ts +65 -0
- package/src/workspace/drift-cli.ts +365 -0
- package/src/workspace/drift.schema.json +672 -0
- package/src/workspace/graph-cli.ts +5 -0
- package/src/workspace/graph.schema.json +72 -0
- package/src/workspace/init.test.ts +38 -1
- package/src/workspace/init.ts +50 -8
- package/src/workspace/intent-gaps.test.ts +18 -2
- package/src/workspace/ledger.schema.json +1 -1
- package/src/workspace/nested-graph.ts +1 -0
- package/src/workspace/pr-report.schema.json +76 -3
- package/src/workspace/promote-waves.test.ts +296 -0
- package/src/workspace/promote-waves.ts +340 -0
- package/src/workspace/promote.test.ts +158 -4
- package/src/workspace/promote.ts +398 -57
- package/src/workspace/reason-codes.test.ts +4 -1
- package/src/workspace/reason-codes.ts +14 -0
- package/src/workspace/search-contract.ts +2 -0
- package/src/workspace/search.schema.json +103 -5
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* from verb modules, so neither needed to change for this migration —
|
|
26
26
|
* the compatibility guarantee #559 asks for.
|
|
27
27
|
*/
|
|
28
|
-
import { dockerBuildCapability, zipPackageCapability, jvmBuildCapability, generateSbomCapability, publishImageCapability, publishArtifactCapability, signCapability, attestProvenanceCapability, verifyCapability, scanVulnerabilitiesCapability, vulnGateCapability, waitClusterHealthyCapability, waitEndpointCapability, healthGateCapability, shellCapability, ensureSecretCapability, wranglerDeployCapability, wranglerVersionsPromoteCapability, r2SyncCapability, } from "./verbs/index.js";
|
|
28
|
+
import { dockerBuildCapability, zipPackageCapability, jvmBuildCapability, generateSbomCapability, publishImageCapability, publishArtifactCapability, signCapability, attestProvenanceCapability, verifyCapability, scanVulnerabilitiesCapability, vulnGateCapability, waitClusterHealthyCapability, waitEndpointCapability, healthGateCapability, shellCapability, ensureSecretCapability, wranglerDeployCapability, wranglerVersionsPromoteCapability, r2SyncCapability, memberOutputsStarterCapability, } from "./verbs/index.js";
|
|
29
29
|
import { ownPackageVersion } from "./capability-plugin.js";
|
|
30
30
|
/**
|
|
31
31
|
* Every `kind` in the starter verb set, grouped by family, per epic #551 and
|
|
@@ -59,6 +59,10 @@ export const STARTER_VERB_FAMILIES = {
|
|
|
59
59
|
// there is no cloudflare lexicon for these three verbs to live in. Revisit
|
|
60
60
|
// if/when the zone-plane lexicon (#1294) lands.
|
|
61
61
|
cloudflare: ["wrangler-deploy", "wrangler-versions-promote", "r2-sync"],
|
|
62
|
+
// Another workspace member's outputs, read through the engine it runs on
|
|
63
|
+
// (#4455). One agnostic verb; each engine's lexicon contributes a source
|
|
64
|
+
// (`CapabilityPlugin.engineOutputSources`).
|
|
65
|
+
engineOutputs: ["member-outputs"],
|
|
62
66
|
};
|
|
63
67
|
/**
|
|
64
68
|
* Every starter-set verb, in the same registration order Phase 1's
|
|
@@ -88,6 +92,7 @@ function starterCapabilities() {
|
|
|
88
92
|
wranglerDeployCapability,
|
|
89
93
|
wranglerVersionsPromoteCapability,
|
|
90
94
|
r2SyncCapability,
|
|
95
|
+
memberOutputsStarterCapability,
|
|
91
96
|
];
|
|
92
97
|
}
|
|
93
98
|
/**
|
|
@@ -52,6 +52,7 @@ export * from "./verify.js";
|
|
|
52
52
|
export * from "./run-agent.js";
|
|
53
53
|
export * from "./wrangler.js";
|
|
54
54
|
export * from "./r2-sync.js";
|
|
55
|
+
export * from "./member-outputs.js";
|
|
55
56
|
export * from "./vuln-scan.js";
|
|
56
57
|
export * from "./vex.js";
|
|
57
58
|
export * from "./license-policy.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/verbs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/verbs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
@@ -52,6 +52,7 @@ export * from "./verify.js";
|
|
|
52
52
|
export * from "./run-agent.js";
|
|
53
53
|
export * from "./wrangler.js";
|
|
54
54
|
export * from "./r2-sync.js";
|
|
55
|
+
export * from "./member-outputs.js";
|
|
55
56
|
export * from "./vuln-scan.js";
|
|
56
57
|
export * from "./vex.js";
|
|
57
58
|
export * from "./license-policy.js";
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `member-outputs`: another workspace member's outputs, read through the
|
|
3
|
+
* engine that member runs on, so a chant member's parameters can be planned
|
|
4
|
+
* against them (#4455, design record choudoufu#2258 lane T6).
|
|
5
|
+
*
|
|
6
|
+
* In `behold/example-three-cloud`, `dns` (a chant member) reads each cloud's
|
|
7
|
+
* endpoint as a parameter of the same name as the output the cloud's member
|
|
8
|
+
* publishes. When the Azure site is a choudoufu estate, `azureEndpoint` is a
|
|
9
|
+
* Terraform root output, and when the AWS site is a Pulumi stack it is a
|
|
10
|
+
* stack output. Neither is a chant component, so there is nothing for a
|
|
11
|
+
* `stackOutput()` reference to read. This verb is that something: a
|
|
12
|
+
* component in the consumer's project whose one step names the upstream
|
|
13
|
+
* member, and whose capability answers the two questions the components
|
|
14
|
+
* machinery already asks of an upstream:
|
|
15
|
+
*
|
|
16
|
+
* - `outputs` (applied): what the member exposes now. A pull request that
|
|
17
|
+
* does not touch the member plans the consumer against these
|
|
18
|
+
* (`deployedOutputs`, #4104).
|
|
19
|
+
* - `plan` (planned): what the member will expose once its own plan applies,
|
|
20
|
+
* with the outputs known only after apply named (`PlannedOutputs`, #3999).
|
|
21
|
+
* A pull request that touches the member plans the consumer against the
|
|
22
|
+
* known ones. A reference to an unknown one is unresolved, so the
|
|
23
|
+
* consumer's step is planned with `DeployContext.unresolvedInputs` naming
|
|
24
|
+
* the member, the pull request's report lists `<member>.<output>` under the
|
|
25
|
+
* consumer's `unknownInputs`, and the apply holds the consumer back until
|
|
26
|
+
* the member applied, then plans it again (`pr-run.ts`, "Planning again
|
|
27
|
+
* once an upstream applied"). That is the hold chant already puts on a
|
|
28
|
+
* root waiting on another root's unknown output; nothing here adds a
|
|
29
|
+
* second one.
|
|
30
|
+
*
|
|
31
|
+
* The consumer writes it as two components:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* export const azure = memberOutputsComponent("azure");
|
|
35
|
+
* export const records: Component = {
|
|
36
|
+
* name: "records",
|
|
37
|
+
* dependsOn: ["azure"],
|
|
38
|
+
* deploy: [phase("Apply", [{ kind: "cfn-deploy", template: "dist/dns.json",
|
|
39
|
+
* inputs: { azureEndpoint: stackOutput("azure", "azureEndpoint") } }])],
|
|
40
|
+
* };
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* ## Engines: the seam
|
|
44
|
+
*
|
|
45
|
+
* The member is looked up in the workspace declaration (`chant.workspace.json`)
|
|
46
|
+
* by name, and its `kind` picks the {@link EngineOutputSource} that reads it.
|
|
47
|
+
* Sources are not capabilities: each lexicon that drives an engine
|
|
48
|
+
* contributes one through `CapabilityPlugin.engineOutputSources()`, the way
|
|
49
|
+
* the cloud lexicons contribute registry logins to `publish-image`, and the
|
|
50
|
+
* registry binds them into this one verb when it is built
|
|
51
|
+
* (`registerCapabilityPlugins`). So two engines never register the same
|
|
52
|
+
* kind, and a consumer's step does not change when the member moves between
|
|
53
|
+
* engines.
|
|
54
|
+
*
|
|
55
|
+
* - `choudoufu` (the terraform lexicon, `choudoufuOutputSource`): applied
|
|
56
|
+
* values from `choudoufu output -json` in the member's directory, which in
|
|
57
|
+
* live mode reads the estate's record store; planned values from
|
|
58
|
+
* `live-plan-set -json` over the member's root, its plan's
|
|
59
|
+
* `planned_values.outputs` with every output whose `output_changes` entry
|
|
60
|
+
* marks any part `after_unknown` named unknown (`terraformPlannedOutputs`).
|
|
61
|
+
* - `pulumi` (the pulumi lexicon, `pulumiOutputSource`): applied values
|
|
62
|
+
* from `pulumi stack output --json --show-secrets=false`, or from the
|
|
63
|
+
* member's checked-in `stack-export.json` when chant must not run pulumi
|
|
64
|
+
* (`CHANT_PULUMI_APPLIED_OUTPUTS=export`); planned values from `pulumi
|
|
65
|
+
* preview --json`, the stack step's outputs, where an output holding
|
|
66
|
+
* Pulumi's unknown sentinel is unknown. Secret outputs are left out of
|
|
67
|
+
* both. A member on plunge runs the same commands under `plunge`.
|
|
68
|
+
* Nothing in this module or in the consumer changes for it.
|
|
69
|
+
*
|
|
70
|
+
* ## Run reads, it never applies
|
|
71
|
+
*
|
|
72
|
+
* The member applies through its own pipeline. `run` checks that the
|
|
73
|
+
* member's plan has nothing left to apply (`changes` false) and answers its
|
|
74
|
+
* applied outputs; a member with changes still to apply refuses the run
|
|
75
|
+
* with {@link MemberOutputsPendingError}, so the consumer is blocked behind
|
|
76
|
+
* it and never applies against values from before the member's change. A
|
|
77
|
+
* workspace orders the member's own run before the consumer's (members that
|
|
78
|
+
* link to a producer run after it, `chant workspace run`).
|
|
79
|
+
*
|
|
80
|
+
* ## Which changes reach the member
|
|
81
|
+
*
|
|
82
|
+
* The component is a deploy unit named after the member (`DEPLOY_UNIT_RULES`),
|
|
83
|
+
* so a change signal that names the member as a changed unit puts it in the
|
|
84
|
+
* change. The terraform lexicon names it when the consumer's
|
|
85
|
+
* `terraform.roots` has an entry of that name whose files changed;
|
|
86
|
+
* `--from-affected` can name it too.
|
|
87
|
+
*/
|
|
88
|
+
import type { Capability, DeployContext, PlannedOutputs } from "../capability.js";
|
|
89
|
+
import type { Component } from "../component.js";
|
|
90
|
+
/** The step kind. */
|
|
91
|
+
export declare const MEMBER_OUTPUTS_KIND = "member-outputs";
|
|
92
|
+
/** The `member-outputs` step's input. */
|
|
93
|
+
export interface MemberOutputsInput {
|
|
94
|
+
/** The upstream member's name in the workspace declaration. Also the component's name, by convention. */
|
|
95
|
+
member: string;
|
|
96
|
+
/**
|
|
97
|
+
* Where the declaration search starts. Default: the current directory,
|
|
98
|
+
* which is the consumer's project root under `chant run`.
|
|
99
|
+
*/
|
|
100
|
+
cwd?: string;
|
|
101
|
+
}
|
|
102
|
+
/** What `run` returns: the member's applied outputs, under `outputs`, where the driver collects a stack's outputs from. */
|
|
103
|
+
export interface MemberOutputsOutput {
|
|
104
|
+
member: string;
|
|
105
|
+
outputs: Record<string, unknown>;
|
|
106
|
+
}
|
|
107
|
+
/** The upstream member a source reads, as the workspace declares it. */
|
|
108
|
+
export interface EngineMemberRef {
|
|
109
|
+
/** The member's name. */
|
|
110
|
+
member: string;
|
|
111
|
+
/** Its declared kind, which picked the source: `choudoufu`, `pulumi`. */
|
|
112
|
+
kind: string;
|
|
113
|
+
/** Its directory, absolute. */
|
|
114
|
+
dir: string;
|
|
115
|
+
/** The workspace root, absolute. A source that must run from above the member's directory runs from here. */
|
|
116
|
+
workspaceRoot: string;
|
|
117
|
+
}
|
|
118
|
+
/** What a source's plan of the member says about its outputs. */
|
|
119
|
+
export interface EnginePlannedOutputs extends PlannedOutputs {
|
|
120
|
+
/**
|
|
121
|
+
* A digest of the member's plan, the engine's own or chant's over it. The
|
|
122
|
+
* consumer's approval binds it, so a plan of the member that moves after
|
|
123
|
+
* review moves the consumer's digest too.
|
|
124
|
+
*/
|
|
125
|
+
planDigest: string;
|
|
126
|
+
/** Whether the member's plan has anything to apply. `run` refuses while it does. */
|
|
127
|
+
changes: boolean;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Reads one engine's member outputs (#4455). One per engine, contributed by
|
|
131
|
+
* the lexicon that drives it through `CapabilityPlugin.engineOutputSources()`.
|
|
132
|
+
*/
|
|
133
|
+
export interface EngineOutputSource {
|
|
134
|
+
/** The member kinds this source reads, as declared in `chant.workspace.json`. */
|
|
135
|
+
readonly kinds: readonly string[];
|
|
136
|
+
/** The member's outputs as applied now, by name. */
|
|
137
|
+
applied(ctx: DeployContext, ref: EngineMemberRef): Promise<Record<string, unknown>>;
|
|
138
|
+
/** The member's outputs once its current plan applies, the ones known only after apply named. */
|
|
139
|
+
planned(ctx: DeployContext, ref: EngineMemberRef): Promise<EnginePlannedOutputs>;
|
|
140
|
+
}
|
|
141
|
+
/** Finds a member in the workspace above `cwd`: its kind and directory. */
|
|
142
|
+
export type MemberLookup = (cwd: string, member: string) => Promise<EngineMemberRef>;
|
|
143
|
+
/** No source for the member's kind is loaded. */
|
|
144
|
+
export declare class EngineOutputSourceMissingError extends Error {
|
|
145
|
+
readonly member: string;
|
|
146
|
+
readonly kind: string;
|
|
147
|
+
readonly available: readonly string[];
|
|
148
|
+
constructor(member: string, kind: string, available: readonly string[]);
|
|
149
|
+
}
|
|
150
|
+
/** The member's plan has changes its own pipeline has not applied. Nothing was read. */
|
|
151
|
+
export declare class MemberOutputsPendingError extends Error {
|
|
152
|
+
readonly member: string;
|
|
153
|
+
constructor(member: string);
|
|
154
|
+
}
|
|
155
|
+
/** The member a {@link MemberOutputsInput} reads plans as, in the consumer's change set. */
|
|
156
|
+
export declare const memberOutputsMemberName: (member: string) => string;
|
|
157
|
+
/**
|
|
158
|
+
* The member's name in the declaration above `cwd`, with its kind and
|
|
159
|
+
* directory. Reads the working tree. Imported lazily: the verb set is
|
|
160
|
+
* loaded where the workspace reader's dependencies may not be.
|
|
161
|
+
*/
|
|
162
|
+
export declare const workspaceMemberLookup: MemberLookup;
|
|
163
|
+
/** Implemented by a capability that wants the plugins' engine output sources injected when a registry is built. */
|
|
164
|
+
export interface EngineOutputSourceConsumer {
|
|
165
|
+
withEngineOutputSources(sources: readonly EngineOutputSource[]): Capability<never, unknown>;
|
|
166
|
+
}
|
|
167
|
+
export declare function isEngineOutputSourceConsumer(value: unknown): value is EngineOutputSourceConsumer;
|
|
168
|
+
export interface MemberOutputsCapabilityOptions {
|
|
169
|
+
/** The engines' sources. Bound by the registry from the loaded plugins; empty until then. */
|
|
170
|
+
sources?: readonly EngineOutputSource[];
|
|
171
|
+
/** How a member is found. Default: {@link workspaceMemberLookup}. */
|
|
172
|
+
lookup?: MemberLookup;
|
|
173
|
+
}
|
|
174
|
+
/** `member-outputs` over the given sources. */
|
|
175
|
+
export declare function memberOutputsCapability(options?: MemberOutputsCapabilityOptions): Capability<MemberOutputsInput, MemberOutputsOutput> & EngineOutputSourceConsumer;
|
|
176
|
+
/** The starter set's `member-outputs`, with no sources until a registry binds the loaded plugins' ones. */
|
|
177
|
+
export declare const memberOutputsStarterCapability: Capability<MemberOutputsInput, MemberOutputsOutput> & EngineOutputSourceConsumer;
|
|
178
|
+
/**
|
|
179
|
+
* A component in the consumer's project that stands for workspace member
|
|
180
|
+
* `member` (#4455): one step reading its outputs. Named after the member, so
|
|
181
|
+
* `stackOutput(member, "<output>")` reads them and `dependsOn: [member]`
|
|
182
|
+
* orders the consumer after it.
|
|
183
|
+
*/
|
|
184
|
+
export declare function memberOutputsComponent(member: string, options?: {
|
|
185
|
+
cwd?: string;
|
|
186
|
+
}): Component;
|
|
187
|
+
//# sourceMappingURL=member-outputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-outputs.d.ts","sourceRoot":"","sources":["../../../src/components/verbs/member-outputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `member-outputs`: another workspace member's outputs, read through the
|
|
3
|
+
* engine that member runs on, so a chant member's parameters can be planned
|
|
4
|
+
* against them (#4455, design record choudoufu#2258 lane T6).
|
|
5
|
+
*
|
|
6
|
+
* In `behold/example-three-cloud`, `dns` (a chant member) reads each cloud's
|
|
7
|
+
* endpoint as a parameter of the same name as the output the cloud's member
|
|
8
|
+
* publishes. When the Azure site is a choudoufu estate, `azureEndpoint` is a
|
|
9
|
+
* Terraform root output, and when the AWS site is a Pulumi stack it is a
|
|
10
|
+
* stack output. Neither is a chant component, so there is nothing for a
|
|
11
|
+
* `stackOutput()` reference to read. This verb is that something: a
|
|
12
|
+
* component in the consumer's project whose one step names the upstream
|
|
13
|
+
* member, and whose capability answers the two questions the components
|
|
14
|
+
* machinery already asks of an upstream:
|
|
15
|
+
*
|
|
16
|
+
* - `outputs` (applied): what the member exposes now. A pull request that
|
|
17
|
+
* does not touch the member plans the consumer against these
|
|
18
|
+
* (`deployedOutputs`, #4104).
|
|
19
|
+
* - `plan` (planned): what the member will expose once its own plan applies,
|
|
20
|
+
* with the outputs known only after apply named (`PlannedOutputs`, #3999).
|
|
21
|
+
* A pull request that touches the member plans the consumer against the
|
|
22
|
+
* known ones. A reference to an unknown one is unresolved, so the
|
|
23
|
+
* consumer's step is planned with `DeployContext.unresolvedInputs` naming
|
|
24
|
+
* the member, the pull request's report lists `<member>.<output>` under the
|
|
25
|
+
* consumer's `unknownInputs`, and the apply holds the consumer back until
|
|
26
|
+
* the member applied, then plans it again (`pr-run.ts`, "Planning again
|
|
27
|
+
* once an upstream applied"). That is the hold chant already puts on a
|
|
28
|
+
* root waiting on another root's unknown output; nothing here adds a
|
|
29
|
+
* second one.
|
|
30
|
+
*
|
|
31
|
+
* The consumer writes it as two components:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* export const azure = memberOutputsComponent("azure");
|
|
35
|
+
* export const records: Component = {
|
|
36
|
+
* name: "records",
|
|
37
|
+
* dependsOn: ["azure"],
|
|
38
|
+
* deploy: [phase("Apply", [{ kind: "cfn-deploy", template: "dist/dns.json",
|
|
39
|
+
* inputs: { azureEndpoint: stackOutput("azure", "azureEndpoint") } }])],
|
|
40
|
+
* };
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* ## Engines: the seam
|
|
44
|
+
*
|
|
45
|
+
* The member is looked up in the workspace declaration (`chant.workspace.json`)
|
|
46
|
+
* by name, and its `kind` picks the {@link EngineOutputSource} that reads it.
|
|
47
|
+
* Sources are not capabilities: each lexicon that drives an engine
|
|
48
|
+
* contributes one through `CapabilityPlugin.engineOutputSources()`, the way
|
|
49
|
+
* the cloud lexicons contribute registry logins to `publish-image`, and the
|
|
50
|
+
* registry binds them into this one verb when it is built
|
|
51
|
+
* (`registerCapabilityPlugins`). So two engines never register the same
|
|
52
|
+
* kind, and a consumer's step does not change when the member moves between
|
|
53
|
+
* engines.
|
|
54
|
+
*
|
|
55
|
+
* - `choudoufu` (the terraform lexicon, `choudoufuOutputSource`): applied
|
|
56
|
+
* values from `choudoufu output -json` in the member's directory, which in
|
|
57
|
+
* live mode reads the estate's record store; planned values from
|
|
58
|
+
* `live-plan-set -json` over the member's root, its plan's
|
|
59
|
+
* `planned_values.outputs` with every output whose `output_changes` entry
|
|
60
|
+
* marks any part `after_unknown` named unknown (`terraformPlannedOutputs`).
|
|
61
|
+
* - `pulumi` (the pulumi lexicon, `pulumiOutputSource`): applied values
|
|
62
|
+
* from `pulumi stack output --json --show-secrets=false`, or from the
|
|
63
|
+
* member's checked-in `stack-export.json` when chant must not run pulumi
|
|
64
|
+
* (`CHANT_PULUMI_APPLIED_OUTPUTS=export`); planned values from `pulumi
|
|
65
|
+
* preview --json`, the stack step's outputs, where an output holding
|
|
66
|
+
* Pulumi's unknown sentinel is unknown. Secret outputs are left out of
|
|
67
|
+
* both. A member on plunge runs the same commands under `plunge`.
|
|
68
|
+
* Nothing in this module or in the consumer changes for it.
|
|
69
|
+
*
|
|
70
|
+
* ## Run reads, it never applies
|
|
71
|
+
*
|
|
72
|
+
* The member applies through its own pipeline. `run` checks that the
|
|
73
|
+
* member's plan has nothing left to apply (`changes` false) and answers its
|
|
74
|
+
* applied outputs; a member with changes still to apply refuses the run
|
|
75
|
+
* with {@link MemberOutputsPendingError}, so the consumer is blocked behind
|
|
76
|
+
* it and never applies against values from before the member's change. A
|
|
77
|
+
* workspace orders the member's own run before the consumer's (members that
|
|
78
|
+
* link to a producer run after it, `chant workspace run`).
|
|
79
|
+
*
|
|
80
|
+
* ## Which changes reach the member
|
|
81
|
+
*
|
|
82
|
+
* The component is a deploy unit named after the member (`DEPLOY_UNIT_RULES`),
|
|
83
|
+
* so a change signal that names the member as a changed unit puts it in the
|
|
84
|
+
* change. The terraform lexicon names it when the consumer's
|
|
85
|
+
* `terraform.roots` has an entry of that name whose files changed;
|
|
86
|
+
* `--from-affected` can name it too.
|
|
87
|
+
*/
|
|
88
|
+
import { computePlanDigest } from "../../lifecycle/plan-digest.js";
|
|
89
|
+
/** The step kind. */
|
|
90
|
+
export const MEMBER_OUTPUTS_KIND = "member-outputs";
|
|
91
|
+
/** No source for the member's kind is loaded. */
|
|
92
|
+
export class EngineOutputSourceMissingError extends Error {
|
|
93
|
+
constructor(member, kind, available) {
|
|
94
|
+
super(`${MEMBER_OUTPUTS_KIND}: member "${member}" is kind ${kind}, and no loaded lexicon reads that engine's outputs` +
|
|
95
|
+
(available.length > 0 ? ` (loaded: ${available.join(", ")})` : "") +
|
|
96
|
+
`. ${kind === "choudoufu" ? 'Add "terraform" to the project\'s lexicons.' : kind === "pulumi" ? 'Add "pulumi" to the project\'s lexicons.' : "Load the lexicon that drives it."}`);
|
|
97
|
+
this.member = member;
|
|
98
|
+
this.kind = kind;
|
|
99
|
+
this.available = available;
|
|
100
|
+
this.name = "EngineOutputSourceMissingError";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** The member's plan has changes its own pipeline has not applied. Nothing was read. */
|
|
104
|
+
export class MemberOutputsPendingError extends Error {
|
|
105
|
+
constructor(member) {
|
|
106
|
+
super(`${MEMBER_OUTPUTS_KIND}: member "${member}" has changes its own pipeline has not applied yet, ` +
|
|
107
|
+
`so its outputs are still the ones from before them. Apply ${member} first; whatever reads its outputs runs after it.`);
|
|
108
|
+
this.member = member;
|
|
109
|
+
this.name = "MemberOutputsPendingError";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** The member a {@link MemberOutputsInput} reads plans as, in the consumer's change set. */
|
|
113
|
+
export const memberOutputsMemberName = (member) => `${member}#outputs`;
|
|
114
|
+
/**
|
|
115
|
+
* The member's name in the declaration above `cwd`, with its kind and
|
|
116
|
+
* directory. Reads the working tree. Imported lazily: the verb set is
|
|
117
|
+
* loaded where the workspace reader's dependencies may not be.
|
|
118
|
+
*/
|
|
119
|
+
export const workspaceMemberLookup = async (cwd, member) => {
|
|
120
|
+
const { locateWorkspace } = await import("../../workspace/which-chant.js");
|
|
121
|
+
const { readDeclaration } = await import("../../workspace/declaration.js");
|
|
122
|
+
const { join } = await import("node:path");
|
|
123
|
+
const located = locateWorkspace(cwd);
|
|
124
|
+
const declaration = readDeclaration(located.tree);
|
|
125
|
+
const found = declaration.members.find((m) => m.name === member);
|
|
126
|
+
if (!found) {
|
|
127
|
+
const names = declaration.members.map((m) => m.name).sort();
|
|
128
|
+
throw new Error(`${MEMBER_OUTPUTS_KIND}: the workspace at ${located.rootOnDisk} declares no member "${member}" (members: ${names.join(", ")})`);
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
member: found.name,
|
|
132
|
+
kind: found.kind,
|
|
133
|
+
dir: found.dir === "." ? located.rootOnDisk : join(located.rootOnDisk, ...found.dir.split("/")),
|
|
134
|
+
workspaceRoot: located.rootOnDisk,
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
function requireMember(input) {
|
|
138
|
+
if (typeof input?.member !== "string" || input.member === "") {
|
|
139
|
+
throw new Error(`${MEMBER_OUTPUTS_KIND}: "member" is required and names a member of the workspace`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function isEngineOutputSourceConsumer(value) {
|
|
143
|
+
return typeof value === "object" && value !== null && typeof value.withEngineOutputSources === "function";
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The member's part of the consumer's change set: no entries, since the
|
|
147
|
+
* member's own pipeline plans and applies its changes, and a hole per output
|
|
148
|
+
* known only after apply, naming the member and the output.
|
|
149
|
+
*/
|
|
150
|
+
function outputsPart(member, planDigest, unknown) {
|
|
151
|
+
const holes = unknown.map((name) => ({
|
|
152
|
+
address: `${member}.${name}`,
|
|
153
|
+
type: "output",
|
|
154
|
+
reason: `${member}.${name} is known only after ${member} applies; what reads it is planned again then`,
|
|
155
|
+
}));
|
|
156
|
+
return {
|
|
157
|
+
member: { member: memberOutputsMemberName(member), lexicon: "chant", planner: "chant", status: "planned", planDigest, holes },
|
|
158
|
+
entries: [],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/** `member-outputs` over the given sources. */
|
|
162
|
+
export function memberOutputsCapability(options = {}) {
|
|
163
|
+
const sources = options.sources ?? [];
|
|
164
|
+
const lookup = options.lookup ?? workspaceMemberLookup;
|
|
165
|
+
async function resolve(input) {
|
|
166
|
+
requireMember(input);
|
|
167
|
+
const ref = await lookup(input.cwd ?? process.cwd(), input.member);
|
|
168
|
+
const source = sources.find((s) => s.kinds.includes(ref.kind));
|
|
169
|
+
if (!source)
|
|
170
|
+
throw new EngineOutputSourceMissingError(ref.member, ref.kind, [...new Set(sources.flatMap((s) => s.kinds))].sort());
|
|
171
|
+
return { ref, source };
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
kind: MEMBER_OUTPUTS_KIND,
|
|
175
|
+
// It reads; the member's own pipeline applies. Nothing to compensate.
|
|
176
|
+
rollbackPolicy: "none-by-design",
|
|
177
|
+
targets: { refuse: "it reads another member's outputs; narrow that member's own plan instead" },
|
|
178
|
+
async plan(ctx, input) {
|
|
179
|
+
const { ref, source } = await resolve(input);
|
|
180
|
+
const planned = await source.planned(ctx, ref);
|
|
181
|
+
const unknown = [...new Set(planned.unknown)].sort();
|
|
182
|
+
const known = Object.fromEntries(Object.entries(planned.known).filter(([name]) => !unknown.includes(name)));
|
|
183
|
+
const member = memberOutputsMemberName(ref.member);
|
|
184
|
+
const planDigest = computePlanDigest(MEMBER_OUTPUTS_KIND, { env: ctx.env, member: ref.member, kind: ref.kind, plan: planned.planDigest, known, unknown });
|
|
185
|
+
return { member, planDigest, changeSet: outputsPart(ref.member, planDigest, unknown), outputs: { known, unknown } };
|
|
186
|
+
},
|
|
187
|
+
async outputs(ctx, input) {
|
|
188
|
+
const { ref, source } = await resolve(input);
|
|
189
|
+
return source.applied(ctx, ref);
|
|
190
|
+
},
|
|
191
|
+
async run(ctx, input) {
|
|
192
|
+
const { ref, source } = await resolve(input);
|
|
193
|
+
const now = await source.planned(ctx, ref);
|
|
194
|
+
if (now.changes)
|
|
195
|
+
throw new MemberOutputsPendingError(ref.member);
|
|
196
|
+
return { member: ref.member, outputs: await source.applied(ctx, ref) };
|
|
197
|
+
},
|
|
198
|
+
withEngineOutputSources(next) {
|
|
199
|
+
return memberOutputsCapability({ ...options, sources: next });
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/** The starter set's `member-outputs`, with no sources until a registry binds the loaded plugins' ones. */
|
|
204
|
+
export const memberOutputsStarterCapability = memberOutputsCapability();
|
|
205
|
+
/**
|
|
206
|
+
* A component in the consumer's project that stands for workspace member
|
|
207
|
+
* `member` (#4455): one step reading its outputs. Named after the member, so
|
|
208
|
+
* `stackOutput(member, "<output>")` reads them and `dependsOn: [member]`
|
|
209
|
+
* orders the consumer after it.
|
|
210
|
+
*/
|
|
211
|
+
export function memberOutputsComponent(member, options = {}) {
|
|
212
|
+
return {
|
|
213
|
+
name: member,
|
|
214
|
+
archetype: "infra",
|
|
215
|
+
dependsOn: [],
|
|
216
|
+
deploy: [{ phase: "Outputs", steps: [{ kind: MEMBER_OUTPUTS_KIND, member, ...(options.cwd ? { cwd: options.cwd } : {}) }] }],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
* plans as `undefined`. Cross-component wiring (`stackOutput()`,
|
|
27
27
|
* `@<component>.publish.*`) resolves.
|
|
28
28
|
*/
|
|
29
|
+
import type { PlanShape } from "./covered-round.js";
|
|
29
30
|
import { type DriverComponent, type DriverPhase, type DriverStep } from "./driver.js";
|
|
30
31
|
import type { CapabilityPlan, CapabilityRegistry, DeployContext, PlannedOutputs } from "./capability.js";
|
|
31
32
|
import type { WaveMember } from "../gated-waves.js";
|
|
@@ -44,6 +45,7 @@ export type WaveComponentPlan = {
|
|
|
44
45
|
plans: Record<string, unknown>;
|
|
45
46
|
parts: ChangeSetPart[];
|
|
46
47
|
outputs?: PlannedOutputs;
|
|
48
|
+
shapes?: Record<string, PlanShape>;
|
|
47
49
|
} | {
|
|
48
50
|
component: string;
|
|
49
51
|
error: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wave-plan.d.ts","sourceRoot":"","sources":["../../src/components/wave-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAoE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAIrJ,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"wave-plan.d.ts","sourceRoot":"","sources":["../../src/components/wave-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAoE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAIrJ,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAAE,GAClK;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAWzC,0GAA0G;AAC1G,eAAO,MAAM,gBAAgB,cAAe,MAAM,KAAG,MAA+B,CAAC;AAErF,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,UAAU,EAAE,CAc5E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxD,aAAa,CAGf;AAED,oHAAoH;AACpH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,EAAE,aAAa,EAClB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxD,OAAO,CAAC,iBAAiB,CAAC,CAoD5B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEzF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,cAAc,CAgBrG;AAUD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,EAAE,aAAa,EAClB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAU9C;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EAChD,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,aAAa,EAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC/C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAYnC"}
|
|
@@ -73,6 +73,7 @@ export async function planWaveComponent(component, registry, ctx, componentOutpu
|
|
|
73
73
|
const plans = {};
|
|
74
74
|
const parts = [];
|
|
75
75
|
let outputs;
|
|
76
|
+
const shapes = {};
|
|
76
77
|
assertTargetsAccepted(component, registry, ctx);
|
|
77
78
|
for (const step of capabilitySteps(component.deploy)) {
|
|
78
79
|
const capability = registry.resolve(step.kind);
|
|
@@ -86,6 +87,8 @@ export async function planWaveComponent(component, registry, ctx, componentOutpu
|
|
|
86
87
|
parts.push(planned.changeSet ?? emptyPart(member));
|
|
87
88
|
if (planned.artifact !== undefined)
|
|
88
89
|
plans[planned.member] = planned.artifact;
|
|
90
|
+
if (planned.shape)
|
|
91
|
+
shapes[planned.member] = { ...planned.shape, member: planned.member };
|
|
89
92
|
if (planned.outputs)
|
|
90
93
|
outputs = mergePlannedOutputs(outputs, planned.outputs);
|
|
91
94
|
}
|
|
@@ -117,7 +120,7 @@ export async function planWaveComponent(component, registry, ctx, componentOutpu
|
|
|
117
120
|
parts.push(emptyPart(member, read.unbound));
|
|
118
121
|
}
|
|
119
122
|
}
|
|
120
|
-
return { component: component.name, members, plans, parts, ...(outputs ? { outputs } : {}) };
|
|
123
|
+
return { component: component.name, members, plans, parts, ...(outputs ? { outputs } : {}), ...(Object.keys(shapes).length > 0 ? { shapes } : {}) };
|
|
121
124
|
}
|
|
122
125
|
catch (err) {
|
|
123
126
|
return { component: component.name, error: err instanceof Error ? err.message : String(err) };
|
package/dist/config.d.ts
CHANGED
|
@@ -175,6 +175,52 @@ export declare const ChantConfigSchema: z.ZodObject<{
|
|
|
175
175
|
exclude: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
176
176
|
include: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
177
177
|
rootOnly: z.ZodOptional<z.ZodBoolean>;
|
|
178
|
+
snapshots: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
179
|
+
store: z.ZodLiteral<"git-ref">;
|
|
180
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
181
|
+
readOrphanBranch: z.ZodOptional<z.ZodBoolean>;
|
|
182
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
183
|
+
store: z.ZodLiteral<"orphan-branch">;
|
|
184
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
185
|
+
store: z.ZodLiteral<"local">;
|
|
186
|
+
dir: z.ZodOptional<z.ZodString>;
|
|
187
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
188
|
+
bucket: z.ZodString;
|
|
189
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
190
|
+
region: z.ZodOptional<z.ZodString>;
|
|
191
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
192
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
193
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
194
|
+
accessKeyId: z.ZodString;
|
|
195
|
+
secretAccessKey: z.ZodString;
|
|
196
|
+
sessionToken: z.ZodOptional<z.ZodString>;
|
|
197
|
+
}, z.core.$strict>>;
|
|
198
|
+
store: z.ZodLiteral<"s3">;
|
|
199
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
200
|
+
store: z.ZodLiteral<"none">;
|
|
201
|
+
}, z.core.$strict>], "store">>;
|
|
202
|
+
observationBaseline: z.ZodOptional<z.ZodObject<{
|
|
203
|
+
store: z.ZodEnum<{
|
|
204
|
+
file: "file";
|
|
205
|
+
"git-ref": "git-ref";
|
|
206
|
+
none: "none";
|
|
207
|
+
s3: "s3";
|
|
208
|
+
}>;
|
|
209
|
+
dir: z.ZodOptional<z.ZodString>;
|
|
210
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
211
|
+
s3: z.ZodOptional<z.ZodObject<{
|
|
212
|
+
bucket: z.ZodString;
|
|
213
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
214
|
+
region: z.ZodOptional<z.ZodString>;
|
|
215
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
216
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
217
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
218
|
+
accessKeyId: z.ZodString;
|
|
219
|
+
secretAccessKey: z.ZodString;
|
|
220
|
+
sessionToken: z.ZodOptional<z.ZodString>;
|
|
221
|
+
}, z.core.$strict>>;
|
|
222
|
+
}, z.core.$strict>>;
|
|
223
|
+
}, z.core.$strict>>;
|
|
178
224
|
}, z.core.$loose>;
|
|
179
225
|
/**
|
|
180
226
|
* Top-level chant project configuration.
|
|
@@ -519,6 +565,20 @@ export interface ChantConfig {
|
|
|
519
565
|
* in a project with no `chant.workspace.json`.
|
|
520
566
|
*/
|
|
521
567
|
rootOnly?: boolean;
|
|
568
|
+
/**
|
|
569
|
+
* Where snapshots and every other index are kept (#4519): `git-ref`
|
|
570
|
+
* (default, `refs/chant/snapshots`, still reading `chant/lifecycle` for
|
|
571
|
+
* snapshots written before), `local` (a directory), `s3` (a bucket under a
|
|
572
|
+
* prefix), `none`, or `orphan-branch` (read-only). `CHANT_SNAPSHOT_STORE`
|
|
573
|
+
* and its companions override it. See `./lifecycle/snapshot-store.ts`.
|
|
574
|
+
*/
|
|
575
|
+
snapshots?: import("./lifecycle/snapshot-store.js").SnapshotStoreConfig;
|
|
576
|
+
/**
|
|
577
|
+
* Where accepted observation deviations are kept (#4519): `file` (default,
|
|
578
|
+
* `.chant/observation-baseline/<env>.json`, committed and reviewed),
|
|
579
|
+
* `git-ref`, `s3` or `none`. See `./lifecycle/observation-baseline.ts`.
|
|
580
|
+
*/
|
|
581
|
+
observationBaseline?: import("./lifecycle/observation-baseline.js").ObservationBaselineStoreConfig;
|
|
522
582
|
}
|
|
523
583
|
/**
|
|
524
584
|
* Resolved project configuration with metadata about how it was loaded.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAA8D,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAKpG,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA+D,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|