@intentius/chant 0.124.52 → 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 +15 -2
- 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 +215 -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/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 +34 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +66 -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 +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -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 +41 -4
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +209 -39
- 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/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 +56 -1
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +51 -1
- 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 +51 -2
- 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 +14 -2
- 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 +229 -0
- package/src/components/cli-support.ts +70 -14
- 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 +89 -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 +42 -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 +516 -3
- package/src/components/pr-run.ts +231 -41
- 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/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 +43 -0
- package/src/pr-loop.ts +111 -2
- 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 +51 -2
- 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
|
@@ -28,6 +28,7 @@ import { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync } from "node:fs
|
|
|
28
28
|
import { tmpdir } from "node:os";
|
|
29
29
|
import { dirname, join, resolve } from "node:path";
|
|
30
30
|
import { formatError } from "../cli/format.js";
|
|
31
|
+
import { INSTANCE_ROLLUP_CODES } from "../instance-nodes.js";
|
|
31
32
|
import { graphBox, plantability } from "./box-factory.js";
|
|
32
33
|
import { composedId, composeWorkspaceGraph, readMemberIr } from "./compose-graph.js";
|
|
33
34
|
import { isViewDocument, prefixView } from "../capabilities/view.js";
|
|
@@ -52,6 +53,8 @@ export const GRAPH_OUTPUT_SCHEMA_ID = "https://intentius.io/chant/schemas/worksp
|
|
|
52
53
|
* included, and `live-at-revision` for `--live` with `--at` (#2875).
|
|
53
54
|
*/
|
|
54
55
|
export const GRAPH_ERROR_CODES = [...WORKSPACE_ERROR_CODES, "live-at-revision"];
|
|
56
|
+
/** Why a block node of an expanded terraform block stays one node: `nodes[].instanceRollup.code` (#4489). */
|
|
57
|
+
export const GRAPH_INSTANCE_ROLLUP_CODES = INSTANCE_ROLLUP_CODES;
|
|
55
58
|
/** Why `--live` and `--at` don't go together (#2875). */
|
|
56
59
|
const LIVE_AT_REVISION = "--live reads the account as it stands now, and --at reads the source at a revision; chant workspace graph takes one of them";
|
|
57
60
|
const USAGE = "chant workspace graph [dir] [--at <rev>] [--member <name>] [--kind <kind file>] [-o <file>] [--env <env>] [--live [--overlay] [--traffic <level>]] [--no-cache] [--dry-run] | chant workspace graph --composites [--at <rev>] [--member <name>] [-o <file>] | chant workspace graph --intent <path[:start-end]|path#symbol|member/node|sha> [--at <rev>] [--kind <kind file>...] [--follow-squash] [--json]";
|
|
@@ -394,6 +394,13 @@
|
|
|
394
394
|
],
|
|
395
395
|
"description": "What the per-member cache keys this read on (#2876): sha256 over the member's files and install state, or over the commit id with --at. Present on composed members; null for a live read or when no stamp could be taken. Two reads of a member with equal stamps read the same source."
|
|
396
396
|
},
|
|
397
|
+
"rootReads": {
|
|
398
|
+
"type": "object",
|
|
399
|
+
"description": "Added in contract 1 by #4452. With --live: which read answered each of the member's roots, the member IR's rootReads as its chant wrote it, keyed by the lexicon's root key (terraform uses terraform.roots.<root>), unprefixed. The read that answered is fellBackTo when set, else depth. Absent when the member's IR had none, including a member read by a chant before #4452.",
|
|
400
|
+
"additionalProperties": {
|
|
401
|
+
"$ref": "#/$defs/rootRead"
|
|
402
|
+
}
|
|
403
|
+
},
|
|
397
404
|
"meta": {
|
|
398
405
|
"type": "object",
|
|
399
406
|
"description": "The member IR's whole-read facts."
|
|
@@ -548,6 +555,45 @@
|
|
|
548
555
|
"runtimeOwner": {
|
|
549
556
|
"type": "string"
|
|
550
557
|
},
|
|
558
|
+
"instanceOf": {
|
|
559
|
+
"type": "string",
|
|
560
|
+
"description": "Added in contract 1 by #4454. On an instance node of a count or for_each block: the block node's id, prefixed like the ids. The instance node's id is that id followed by instanceKey (<member>/<block>[0]); the block node stays and is the rollup."
|
|
561
|
+
},
|
|
562
|
+
"instanceKey": {
|
|
563
|
+
"type": "string",
|
|
564
|
+
"description": "Added in contract 1 by #4454. With instanceOf: the block's own instance key as the engine prints it, [0] or [\"a\"]. Absent on an instance only an expanded module call makes (#4486)."
|
|
565
|
+
},
|
|
566
|
+
"instanceScope": {
|
|
567
|
+
"type": "string",
|
|
568
|
+
"description": "Added in contract 1 by #4486. With instanceOf, under an expanded module call: the module path as the engine prints it, module.app[0]. The id then carries the key on the call's segment, <member>/<root>/module.app[0]/aws_eip.pool[1]."
|
|
569
|
+
},
|
|
570
|
+
"instanceRollup": {
|
|
571
|
+
"type": "object",
|
|
572
|
+
"description": "Added in contract 1 by #4489, written by chant 0.124.54 and newer. On a block node whose count or for_each the declared graph cannot count: why it stays one node, with no instance nodes under it. Absent on a block that is not expanded and on one whose instances are listed. The read contract lists every form that is rolled up and its code.",
|
|
573
|
+
"required": ["code", "argument", "expression"],
|
|
574
|
+
"properties": {
|
|
575
|
+
"code": {
|
|
576
|
+
"type": "string",
|
|
577
|
+
"enum": ["instances-each-value", "instances-merge", "instances-value-unknown", "instances-form-unread", "instances-over-limit", "instances-module-uncounted"]
|
|
578
|
+
},
|
|
579
|
+
"argument": {
|
|
580
|
+
"type": "string",
|
|
581
|
+
"enum": ["count", "for_each"]
|
|
582
|
+
},
|
|
583
|
+
"expression": {
|
|
584
|
+
"type": "string",
|
|
585
|
+
"description": "The count or for_each expression as written, without the ${ } around it. With call, the module call's."
|
|
586
|
+
},
|
|
587
|
+
"call": {
|
|
588
|
+
"type": "string",
|
|
589
|
+
"description": "With instances-module-uncounted: the module call that could not be counted, module.app or module.app.module.db."
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
"facts": {
|
|
594
|
+
"type": "object",
|
|
595
|
+
"description": "Added in contract 1 by #4529, written by chant 0.124.54 and newer. What an ownership engine observed about the node: ownership, markers, ownedBy, cloudIds, recordVersions and observedAt, each optional, in the shape of EngineFacts (packages/core/src/graph-schema/graph.schema.json). Set on a Pulumi member on plunge from its checked-in engine-graph.json. Never read for a decision."
|
|
596
|
+
},
|
|
551
597
|
"nested": {
|
|
552
598
|
"type": "string",
|
|
553
599
|
"description": "For a node read through a nested workspace (#2551): the nested workspace's member it belongs to. `member` is then the outer member, and the id is `<member>/<nested>/<id>`."
|
|
@@ -605,6 +651,10 @@
|
|
|
605
651
|
"type": "boolean",
|
|
606
652
|
"description": "Added in contract 1 by #3922. True when the edge leaves the pipeline `from` belongs to (#3910): a reusable-workflow call, a `workflow_run` trigger, a GitLab child or multi-project trigger, an include. Absent on every in-pipeline edge."
|
|
607
653
|
},
|
|
654
|
+
"grain": {
|
|
655
|
+
"enum": ["block", "instance", "property"],
|
|
656
|
+
"description": "Added in contract 1 by #4529, written by chant 0.124.54 and newer. What the edge joins: two blocks, two instances, or a property of one instance to another. A Pulumi member's dependencies and parent edges are instance; a plunge member's property edges are property. Absent when the source does not say."
|
|
657
|
+
},
|
|
608
658
|
"member": {
|
|
609
659
|
"type": "string"
|
|
610
660
|
}
|
|
@@ -1620,6 +1670,28 @@
|
|
|
1620
1670
|
}
|
|
1621
1671
|
}
|
|
1622
1672
|
}
|
|
1673
|
+
},
|
|
1674
|
+
"rootRead": {
|
|
1675
|
+
"type": "object",
|
|
1676
|
+
"description": "Which read answered one root (#4452), as packages/core/src/observation.ts RootRead. depth is the read asked for (plan for a plan-depth root, live+plan for a live root at the plan depth). fellBackTo is set only when that read failed: the read that answered instead (live is live-plan alone, for a live root), or declared when none did. reason is a short machine-stable cause such as no-credentials, needs-init, backend-unreachable or plan-failed, not prose to match on.",
|
|
1677
|
+
"required": [
|
|
1678
|
+
"depth"
|
|
1679
|
+
],
|
|
1680
|
+
"properties": {
|
|
1681
|
+
"depth": {
|
|
1682
|
+
"type": "string"
|
|
1683
|
+
},
|
|
1684
|
+
"fellBackTo": {
|
|
1685
|
+
"enum": [
|
|
1686
|
+
"state",
|
|
1687
|
+
"live",
|
|
1688
|
+
"declared"
|
|
1689
|
+
]
|
|
1690
|
+
},
|
|
1691
|
+
"reason": {
|
|
1692
|
+
"type": "string"
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1623
1695
|
}
|
|
1624
1696
|
}
|
|
1625
1697
|
}
|
package/dist/workspace/init.d.ts
CHANGED
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - each outermost chant project (a chant.config.ts or .json) becomes a
|
|
10
10
|
* `chant` member, and the root's own config makes a root member `"."`;
|
|
11
|
-
* - each nested declaration becomes a `workspace` member;
|
|
11
|
+
* - each nested declaration becomes a `workspace` member; one under an
|
|
12
|
+
* examples-style directory does too, with a `because` saying where it sits
|
|
13
|
+
* (#4499), and the example group's glob leaves its directory out, unless
|
|
14
|
+
* it sits inside another package or project, where it stays an example
|
|
15
|
+
* since only the root member contains other members;
|
|
12
16
|
* - each other npm package, from the npm workspaces or any other
|
|
13
17
|
* package.json, becomes an `other` member with a `because`;
|
|
14
18
|
* - projects under an `examples`, `test` or `fixtures`-style directory become
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/workspace/init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/workspace/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAetD,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAI7E,mHAAmH;AACnH,eAAO,MAAM,QAAQ,YAAI,UAAU,EAAE,KAAK,EAAE,OAAO,CAAU,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,uDAAuD;AACvD,eAAO,MAAM,YAAY,iCAAiC,CAAC;AAE3D,yFAAyF;AACzF,eAAO,MAAM,aAAa,uCAAuC,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjG;AAoBD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC1B;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,uGAAuG;IACvG,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC5C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,OAAO,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAClH,kFAAkF;IAClF,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC3D,qEAAqE;IACrE,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAiDD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQhD;AAuDD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAkBvI;AASD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,EAAE,CAuB1H;AAqID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,QAAQ,CA+HxF;AA4ED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA6E3E"}
|
package/dist/workspace/init.js
CHANGED
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - each outermost chant project (a chant.config.ts or .json) becomes a
|
|
10
10
|
* `chant` member, and the root's own config makes a root member `"."`;
|
|
11
|
-
* - each nested declaration becomes a `workspace` member;
|
|
11
|
+
* - each nested declaration becomes a `workspace` member; one under an
|
|
12
|
+
* examples-style directory does too, with a `because` saying where it sits
|
|
13
|
+
* (#4499), and the example group's glob leaves its directory out, unless
|
|
14
|
+
* it sits inside another package or project, where it stays an example
|
|
15
|
+
* since only the root member contains other members;
|
|
12
16
|
* - each other npm package, from the npm workspaces or any other
|
|
13
17
|
* package.json, becomes an `other` member with a `because`;
|
|
14
18
|
* - projects under an `examples`, `test` or `fixtures`-style directory become
|
|
@@ -291,7 +295,27 @@ function exampleGlobs(tree, matches, memberDirs) {
|
|
|
291
295
|
else
|
|
292
296
|
explicit.push(...ms);
|
|
293
297
|
}
|
|
294
|
-
const
|
|
298
|
+
const blocked = (d) => memberDirs.some((m) => m !== "" && isInside(m, d)) || (!matches.includes(d) && holdsChantProject(tree, d));
|
|
299
|
+
const safe = (glob) => expandGlob(tree, glob).every((d) => !blocked(d));
|
|
300
|
+
/**
|
|
301
|
+
* `<prefix>/*` when it is safe, else `<prefix>/!(a|b)` leaving out the
|
|
302
|
+
* directories that block it (a workspace member under an examples
|
|
303
|
+
* directory, #4499), when that is safe and still covers every match the
|
|
304
|
+
* prefix's parents hold. Undefined when neither works.
|
|
305
|
+
*/
|
|
306
|
+
const lastSegment = (prefix, parents) => {
|
|
307
|
+
const all = `${prefix}/*`;
|
|
308
|
+
if (safe(all))
|
|
309
|
+
return all;
|
|
310
|
+
const names = [...new Set(expandGlob(tree, all).filter(blocked).map((d) => d.slice(d.lastIndexOf("/") + 1)))].sort();
|
|
311
|
+
if (names.length === 0 || names.some((n) => /[*?[\]{}()!+@|]/.test(n)))
|
|
312
|
+
return undefined;
|
|
313
|
+
const glob = `${prefix}/!(${names.join("|")})`;
|
|
314
|
+
if (!safe(glob))
|
|
315
|
+
return undefined;
|
|
316
|
+
const reached = new Set(expandGlob(tree, glob));
|
|
317
|
+
return matches.every((m) => !parents.includes(dirOf(m)) || reached.has(m)) ? glob : undefined;
|
|
318
|
+
};
|
|
295
319
|
const globs = [];
|
|
296
320
|
const left = new Set(wide);
|
|
297
321
|
// Try every one-segment wildcard, largest merge first.
|
|
@@ -305,14 +329,22 @@ function exampleGlobs(tree, matches, memberDirs) {
|
|
|
305
329
|
}
|
|
306
330
|
for (const [pattern, parents] of [...candidates].sort((a, b) => b[1].length - a[1].length)) {
|
|
307
331
|
const open = parents.filter((p) => left.has(p));
|
|
308
|
-
if (open.length < 2
|
|
332
|
+
if (open.length < 2)
|
|
333
|
+
continue;
|
|
334
|
+
const glob = lastSegment(pattern, open);
|
|
335
|
+
if (glob === undefined)
|
|
309
336
|
continue;
|
|
310
|
-
globs.push(
|
|
337
|
+
globs.push(glob);
|
|
311
338
|
for (const p of open)
|
|
312
339
|
left.delete(p);
|
|
313
340
|
}
|
|
314
|
-
for (const p of left)
|
|
315
|
-
|
|
341
|
+
for (const p of left) {
|
|
342
|
+
const glob = lastSegment(p, [p]);
|
|
343
|
+
if (glob !== undefined)
|
|
344
|
+
globs.push(glob);
|
|
345
|
+
else
|
|
346
|
+
explicit.push(...(byParent.get(p) ?? []));
|
|
347
|
+
}
|
|
316
348
|
// Explicit matches a glob already covers need no entry of their own.
|
|
317
349
|
const covered = new Set(globs.flatMap((g) => expandGlob(tree, g)));
|
|
318
350
|
for (const m of explicit)
|
|
@@ -372,7 +404,13 @@ export function proposeWorkspace(root, options = {}) {
|
|
|
372
404
|
const configDirs = new Set([...dirsWith((n) => CONFIG_FILES.has(n))].filter((d) => !SCAFFOLDING.test(d)));
|
|
373
405
|
const declDirs = dirsWith((n) => DECLARATION_FILES.includes(n));
|
|
374
406
|
const pkgDirs = dirsWith((n) => n === "package.json");
|
|
375
|
-
|
|
407
|
+
// A declaration under an examples-style directory is a `workspace` member
|
|
408
|
+
// too (#4499, ruled), with a note saying where it sits. Plain projects
|
|
409
|
+
// there stay examples. Only the root member contains other members, so one
|
|
410
|
+
// that sits inside another package or project (a lexicon shipping a whole
|
|
411
|
+
// workspace as an example, chant#4468) stays an example of its group.
|
|
412
|
+
const insideAnother = (d) => [...pkgDirs, ...configDirs, ...declDirs].some((o) => o !== "" && o !== d && isInside(d, o));
|
|
413
|
+
const nested = outermost([...declDirs].filter((d) => d !== "" && !(exampleMatch(d) && insideAnother(d))));
|
|
376
414
|
const notNested = (d) => !nested.some((n) => isInside(d, n));
|
|
377
415
|
const projects = outermost([...configDirs].filter((d) => d !== "" && notNested(d)));
|
|
378
416
|
const matches = new Set();
|
|
@@ -434,8 +472,16 @@ export function proposeWorkspace(root, options = {}) {
|
|
|
434
472
|
const entries = [];
|
|
435
473
|
if (configDirs.has(""))
|
|
436
474
|
entries.push({ sort: "", name: uniqueName(memberName(tree, "", name), taken), dir: ".", kind: "chant" });
|
|
437
|
-
for (const d of nested)
|
|
438
|
-
|
|
475
|
+
for (const d of nested) {
|
|
476
|
+
const ex = exampleMatch(d);
|
|
477
|
+
entries.push({
|
|
478
|
+
sort: d,
|
|
479
|
+
name: uniqueName(memberName(tree, d, name), taken),
|
|
480
|
+
dir: d,
|
|
481
|
+
kind: "workspace",
|
|
482
|
+
...(ex ? { because: `a workspace of its own under ${ex.parent}, an examples directory; a workspace is a member, never an example` } : {}),
|
|
483
|
+
});
|
|
484
|
+
}
|
|
439
485
|
for (const d of chantMembers)
|
|
440
486
|
entries.push({ sort: d, name: uniqueName(memberName(tree, d, name), taken), dir: d, kind: "chant" });
|
|
441
487
|
for (const d of packages) {
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
},
|
|
103
103
|
"row": {
|
|
104
104
|
"type": "object",
|
|
105
|
-
"description": "One row, keyed by column. Every row starts with member: the workspace member whose ledger it came from, or null outside a workspace. A value is a string, a number, a boolean, an object or array (a JSON column), or null.",
|
|
105
|
+
"description": "One row, keyed by column. Every row starts with member: the workspace member whose ledger it came from, or null outside a workspace. A value is a string, a number, a boolean, an object or array (a JSON column), or null. A runs row's root_member, added within version 1 by #4500, written by chant 0.124.54 and newer, is the member whose directory holds the terraform root a TerraformApplyOp run applied, or null when that is unknown (another kind of run, or a run whose Init step failed before it resolved the root, #4508; a failed terraform init still names it, #4512); a row from an older chant lacks it. A resources row's marker_stack, marker_env, engine_ownership and engine_owned_by, added within version 1 by #4534, written by chant 0.124.54 and newer, are the stack and env the resource's chant marker names and an ownership engine's verdict and what bound the node (never read for a decision), or null when unknown; a row from an older chant lacks them.",
|
|
106
106
|
"required": [
|
|
107
107
|
"member"
|
|
108
108
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-graph.d.ts","sourceRoot":"","sources":["../../src/workspace/nested-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAA8B,KAAK,cAAc,EAAqB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE1H,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpE,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,cAAc,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElI,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAc1G;AAeD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAwBnI;AAED,uEAAuE;AACvE,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EACzB,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,SAAS,GAAG,SAAqB,GAC3C,OAAO,CAAC,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAS1C;AAED,yGAAyG;AACzG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AAYD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"nested-graph.d.ts","sourceRoot":"","sources":["../../src/workspace/nested-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAA8B,KAAK,cAAc,EAAqB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE1H,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpE,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,cAAc,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElI,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAc1G;AAeD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAwBnI;AAED,uEAAuE;AACvE,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EACzB,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,SAAS,GAAG,SAAqB,GAC3C,OAAO,CAAC,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAS1C;AAED,yGAAyG;AACzG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AAYD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2E5H"}
|
|
@@ -125,6 +125,8 @@ export function foldNested(graph, member, inner) {
|
|
|
125
125
|
n.compositeInstance = prefixed(outer, node.compositeInstance);
|
|
126
126
|
if (node.runtimeOwner)
|
|
127
127
|
n.runtimeOwner = prefixed(outer, node.runtimeOwner);
|
|
128
|
+
if (node.instanceOf)
|
|
129
|
+
n.instanceOf = prefixed(outer, node.instanceOf);
|
|
128
130
|
if (node.compositeParent)
|
|
129
131
|
n.compositeParent = node.compositeParent;
|
|
130
132
|
// sourceLoc is relative to the member's directory: the outer member's is the nested root.
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
"member": { "type": "string", "description": "The member's name in the change set: the root, for a terraform-family step." },
|
|
199
199
|
"component": { "type": "string" },
|
|
200
200
|
"planDigest": { "type": ["string", "null"], "description": "What a gate on this member alone binds. null when it failed to plan." },
|
|
201
|
-
"status": { "enum": ["planned", "plan-failed", "applied", "failed", "blocked", "waiting"], "description": "waiting (#3999): held back because its plan read an upstream output that applied as another value, or was known only after apply; it waits on an approval of its plan in rounds." },
|
|
201
|
+
"status": { "enum": ["planned", "plan-failed", "applied", "failed", "blocked", "waiting", "not-started"], "description": "waiting (#3999): held back because its plan read an upstream output that applied as another value, or was known only after apply; it waits on an approval of its plan in rounds. not-started (ws-107, #4440, written by chant 0.124.54 and newer): a member of a group whose apply stopped before its part began." },
|
|
202
202
|
"counts": {
|
|
203
203
|
"type": "object",
|
|
204
204
|
"required": ["create", "update", "replace", "delete"],
|
|
@@ -240,7 +240,56 @@
|
|
|
240
240
|
}
|
|
241
241
|
},
|
|
242
242
|
"round": { "type": "integer", "minimum": 2, "description": "Apply stage (#3999): the round whose plan it applied or waits on, when not the first. planDigest and counts are that round's." },
|
|
243
|
-
"held": { "type": "string", "description": "Apply stage (#3999): why the first round's plan did not apply." }
|
|
243
|
+
"held": { "type": "string", "description": "Apply stage (#3999): why the first round's plan did not apply." },
|
|
244
|
+
"group": { "type": "integer", "minimum": 0, "description": "Added within contract version 1 by #4446, written by chant 0.124.54 and newer. The index in groups of the group the member planned and applied with. Absent when it is in no group." },
|
|
245
|
+
"groupOutcome": {
|
|
246
|
+
"enum": ["applied", "partial", "failed", "not-started", "no-changes"],
|
|
247
|
+
"description": "Added within contract version 1 by #4446, written by chant 0.124.54 and newer. Apply stage: how the member's part of its group's apply ended, as the capability said. applied and no-changes give status applied, and what applied stays applied; partial and failed give status failed; not-started gives status not-started. pr-apply --resume plans partial, failed and not-started members again. Absent when the group did not run."
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"groups": {
|
|
253
|
+
"type": "array",
|
|
254
|
+
"description": "Added within contract version 1 by #4446, written by chant 0.124.54 and newer. The groups of components one capability planned and applied as one (ws-107), in plan order of their first member. On a resumed apply, what is left of each approved group, grouped again. Absent when none formed.",
|
|
255
|
+
"items": {
|
|
256
|
+
"type": "object",
|
|
257
|
+
"required": ["capability", "components", "wave", "digest"],
|
|
258
|
+
"additionalProperties": false,
|
|
259
|
+
"properties": {
|
|
260
|
+
"capability": { "type": "string", "description": "The kind of the capability every member's one step names, such as terraform-apply." },
|
|
261
|
+
"components": { "type": "array", "minItems": 2, "items": { "type": "string" }, "description": "The members, by component, in apply order: upstreams first." },
|
|
262
|
+
"wave": { "type": "integer", "minimum": 1, "description": "The 1-based wave of selection.waves the group ran in." },
|
|
263
|
+
"digest": { "type": ["string", "null"], "description": "The group digest folded into each member's planDigest. null when the group failed to plan." },
|
|
264
|
+
"error": { "type": "string", "description": "Why the group failed to plan. Every member is then plan-failed." },
|
|
265
|
+
"reads": {
|
|
266
|
+
"type": "array",
|
|
267
|
+
"description": "Each read of another member that its plan did not know, which the group's apply computes, sorted by component then ref. Absent when none.",
|
|
268
|
+
"items": {
|
|
269
|
+
"type": "object",
|
|
270
|
+
"required": ["component", "ref"],
|
|
271
|
+
"additionalProperties": false,
|
|
272
|
+
"properties": {
|
|
273
|
+
"component": { "type": "string", "description": "The member that reads." },
|
|
274
|
+
"ref": { "type": "string", "description": "What it reads, as <component>.<output>." }
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"fallbacks": {
|
|
282
|
+
"type": "array",
|
|
283
|
+
"description": "Added within contract version 1 by #4446, written by chant 0.124.54 and newer. Each component in the change whose capability declares planGroup and runGroup, that a read joins to another such component of its kind, and that ended in no group, sorted by component. Absent when none.",
|
|
284
|
+
"items": {
|
|
285
|
+
"type": "object",
|
|
286
|
+
"required": ["component", "capability", "kind", "reason"],
|
|
287
|
+
"additionalProperties": false,
|
|
288
|
+
"properties": {
|
|
289
|
+
"component": { "type": "string" },
|
|
290
|
+
"capability": { "type": "string", "description": "The kind of the capability its step names." },
|
|
291
|
+
"kind": { "type": "string", "description": "Why, as a kind: core's steps (its deploy has more than one step), split (a component outside the group lies on a dependency path between it and the rest), alone (the capability dropped the other members of its group and a group of one is no group), cycle (placing the group would order two groups each before the other) or error (the capability's groupFallback threw), or the capability's own, for the whole group or for each member it drops. off: the capability's setting turns grouping off; the note does not print it." },
|
|
292
|
+
"reason": { "type": "string", "description": "The reason as printed." }
|
|
244
293
|
}
|
|
245
294
|
}
|
|
246
295
|
},
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant workspace promote --all` (#4461): adopt a workspace of plain
|
|
3
|
+
* Terraform roots into choudoufu in waves, a canary first.
|
|
4
|
+
*
|
|
5
|
+
* Each root goes through {@link promoteCommand} on its own, so each root has
|
|
6
|
+
* its own gate, `workspace-promote/<member>`, whose digest binds that root's
|
|
7
|
+
* own `live-import` report. A root that fails leaves every other root as it
|
|
8
|
+
* was: its staging ran in a worktree, and nothing of it reached the tree.
|
|
9
|
+
*
|
|
10
|
+
* The order:
|
|
11
|
+
*
|
|
12
|
+
* - The canary (`--canary <member>`, else the first candidate in declaration
|
|
13
|
+
* order) is wave 1. Unless every canary lands, no other wave runs.
|
|
14
|
+
* - The rest follow in declaration order, `--wave-size` roots a wave. Every
|
|
15
|
+
* root of a wave is tried even when one of them fails, and the next wave
|
|
16
|
+
* runs only when the whole wave landed.
|
|
17
|
+
*
|
|
18
|
+
* A root lands when it was applied, was already promoted, or (under
|
|
19
|
+
* `--dry-run`) staged cleanly. A gated root has not landed: approve its gate
|
|
20
|
+
* and run the same command again. Roots already of kind `choudoufu` report
|
|
21
|
+
* `already-promoted` and are not staged again, so a re-run over a workspace
|
|
22
|
+
* that has landed is a no-op. A root whose kind was written but whose
|
|
23
|
+
* `live-import -approve` failed is kind `choudoufu` with a pending stamp
|
|
24
|
+
* (#4485): a re-run retries the stamp, and the root lands once it passes or
|
|
25
|
+
* stays `stamp-failed` with the command to run.
|
|
26
|
+
*
|
|
27
|
+
* Before a root is staged its state is checked: `live-import` reads a local
|
|
28
|
+
* tfstate of format version 4, so a missing state under a remote backend, or
|
|
29
|
+
* a state of another version, refuses that root by name.
|
|
30
|
+
*/
|
|
31
|
+
import type { GateLedgerPort } from "../op/gate.js";
|
|
32
|
+
import { type PromoteRunner } from "./promote.js";
|
|
33
|
+
export declare const DEFAULT_WAVE_SIZE = 5;
|
|
34
|
+
export type WaveRootOutcome =
|
|
35
|
+
/** Staged, approved, kind written and markers stamped. */
|
|
36
|
+
"applied"
|
|
37
|
+
/** Already of kind choudoufu (or above): nothing to do. */
|
|
38
|
+
| "already-promoted"
|
|
39
|
+
/** `--dry-run`: staged and checked, no gate recorded. */
|
|
40
|
+
| "dry-run"
|
|
41
|
+
/** A gate is pending for this root's digest. */
|
|
42
|
+
| "gated"
|
|
43
|
+
/** live-check or the live-import report failed in staging. */
|
|
44
|
+
| "checks-failed"
|
|
45
|
+
/** The state is not a local v4 tfstate. */
|
|
46
|
+
| "refused"
|
|
47
|
+
/** The kind was written but `live-import -approve` failed. */
|
|
48
|
+
| "stamp-failed"
|
|
49
|
+
/** Anything else that stopped the root (uncommitted changes, a patch that no longer applies). */
|
|
50
|
+
| "failed"
|
|
51
|
+
/** An earlier wave did not land. */
|
|
52
|
+
| "not-run";
|
|
53
|
+
export interface WaveRootResult {
|
|
54
|
+
member: string;
|
|
55
|
+
wave: number;
|
|
56
|
+
canary: boolean;
|
|
57
|
+
outcome: WaveRootOutcome;
|
|
58
|
+
kind: string;
|
|
59
|
+
state?: string;
|
|
60
|
+
digest?: string;
|
|
61
|
+
reportDigest?: string;
|
|
62
|
+
/** From the report: instances eligible for stamping, of the total. */
|
|
63
|
+
eligible?: {
|
|
64
|
+
stampable: number;
|
|
65
|
+
total: number;
|
|
66
|
+
};
|
|
67
|
+
/** From the report: instances outside the admitted type set, never stamped. */
|
|
68
|
+
unadmitted?: number;
|
|
69
|
+
/** From the stamp report under -approve. */
|
|
70
|
+
stamped?: {
|
|
71
|
+
newly: number;
|
|
72
|
+
already: number;
|
|
73
|
+
failed: number;
|
|
74
|
+
};
|
|
75
|
+
reason?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface WavesSummary {
|
|
78
|
+
outcome: "landed" | "gated" | "failed" | "dry-run";
|
|
79
|
+
exitCode: number;
|
|
80
|
+
waves: string[][];
|
|
81
|
+
roots: WaveRootResult[];
|
|
82
|
+
}
|
|
83
|
+
export interface PromoteWavesOptions {
|
|
84
|
+
root: string;
|
|
85
|
+
/** Every terraform member, and every choudoufu member (which reports already-promoted). */
|
|
86
|
+
all?: boolean;
|
|
87
|
+
/** `--state <member>=<path>`, repeatable. Without `all`, the members named here are the set. */
|
|
88
|
+
states?: Record<string, string>;
|
|
89
|
+
/** `--state-dir <dir>`: a member's state is `<dir>/<member>.tfstate`. */
|
|
90
|
+
stateDir?: string;
|
|
91
|
+
canary?: string[];
|
|
92
|
+
waveSize?: number;
|
|
93
|
+
dryRun?: boolean;
|
|
94
|
+
json?: boolean;
|
|
95
|
+
/** For tests. */
|
|
96
|
+
runner?: PromoteRunner;
|
|
97
|
+
ledger?: GateLedgerPort;
|
|
98
|
+
now?: string;
|
|
99
|
+
}
|
|
100
|
+
/** Parse `--state <member>=<path>` values. */
|
|
101
|
+
export declare function parseStateMappings(values: readonly string[]): Record<string, string>;
|
|
102
|
+
/** The waves: the canaries first, then the rest in declaration order, `size` at a time. */
|
|
103
|
+
export declare function planWaves(candidates: readonly string[], canary: readonly string[], size: number): string[][];
|
|
104
|
+
/** The backend a root's .tf files declare, or undefined for none or `local`. */
|
|
105
|
+
export declare function remoteBackend(dir: string): string | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Why `state` cannot feed `live-import` for `member`, or undefined when it
|
|
108
|
+
* can: it must be a local tfstate of format version 4.
|
|
109
|
+
*/
|
|
110
|
+
export declare function stateRefusal(member: string, memberDir: string, state: string): string | undefined;
|
|
111
|
+
export declare function promoteWavesCommand(opts: PromoteWavesOptions): Promise<WavesSummary>;
|
|
112
|
+
//# sourceMappingURL=promote-waves.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote-waves.d.ts","sourceRoot":"","sources":["../../src/workspace/promote-waves.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAA2H,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAGxK,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,MAAM,MAAM,eAAe;AACzB,0DAA0D;AACxD,SAAS;AACX,2DAA2D;GACzD,kBAAkB;AACpB,yDAAyD;GACvD,SAAS;AACX,gDAAgD;GAC9C,OAAO;AACT,8DAA8D;GAC5D,eAAe;AACjB,2CAA2C;GACzC,SAAS;AACX,8DAA8D;GAC5D,cAAc;AAChB,iGAAiG;GAC/F,QAAQ;AACV,oCAAoC;GAClC,SAAS,CAAC;AAId,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;IAClB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gGAAgG;IAChG,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUpF;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAU5G;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc7D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsBjG;AAqBD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA+I1F"}
|