@intentius/chant 0.124.44 → 0.124.46
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/capabilities/aws.paths +148 -0
- package/dist/capabilities/base-mappings.json +122 -0
- package/dist/capabilities/catalog.d.ts +89 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +204 -0
- package/dist/capabilities/language.d.ts +103 -0
- package/dist/capabilities/language.d.ts.map +1 -0
- package/dist/capabilities/language.js +335 -0
- package/dist/capabilities/matcher.d.ts +65 -0
- package/dist/capabilities/matcher.d.ts.map +1 -0
- package/dist/capabilities/matcher.js +299 -0
- package/dist/capabilities/view.d.ts +207 -0
- package/dist/capabilities/view.d.ts.map +1 -0
- package/dist/capabilities/view.js +484 -0
- package/dist/ci-identity.d.ts +183 -12
- package/dist/ci-identity.d.ts.map +1 -1
- package/dist/ci-identity.js +362 -53
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +1 -0
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +17 -1
- package/dist/cli/handlers/declared-graph.d.ts +44 -0
- package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
- package/dist/cli/handlers/declared-graph.js +87 -0
- package/dist/cli/handlers/graph.d.ts +25 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +93 -87
- package/dist/cli/handlers/pr-env.d.ts +8 -2
- package/dist/cli/handlers/pr-env.d.ts.map +1 -1
- package/dist/cli/handlers/pr-env.js +127 -225
- package/dist/cli/handlers/pr.d.ts +3 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +1 -0
- package/dist/cli/handlers/search-count.d.ts +89 -0
- package/dist/cli/handlers/search-count.d.ts.map +1 -0
- package/dist/cli/handlers/search-count.js +132 -0
- package/dist/cli/handlers/search.d.ts +358 -6
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +1065 -155
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +23 -3
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +3 -0
- package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
- package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
- package/dist/cli/mcp/tools/capabilities.js +27 -0
- package/dist/cli/mcp/workspace-tools.d.ts +3 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.js +47 -2
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +64 -17
- package/dist/cli/registry.d.ts +22 -0
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +2 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +4 -2
- package/dist/components/fan-out-support.d.ts +3 -0
- package/dist/components/fan-out-support.d.ts.map +1 -1
- package/dist/components/fan-out-support.js +1 -1
- package/dist/components/pr-env-ports.d.ts +29 -0
- package/dist/components/pr-env-ports.d.ts.map +1 -0
- package/dist/components/pr-env-ports.js +77 -0
- package/dist/components/pr-env-run.d.ts +254 -0
- package/dist/components/pr-env-run.d.ts.map +1 -0
- package/dist/components/pr-env-run.js +376 -0
- package/dist/components/pr-environment.d.ts +91 -15
- package/dist/components/pr-environment.d.ts.map +1 -1
- package/dist/components/pr-environment.js +95 -9
- package/dist/components/pr-pipeline.d.ts +10 -1
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/config-environments.d.ts +92 -0
- package/dist/config-environments.d.ts.map +1 -0
- package/dist/config-environments.js +102 -0
- package/dist/config.d.ts +24 -84
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -96
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +15 -3
- package/dist/graph-effective.d.ts +33 -2
- package/dist/graph-effective.d.ts.map +1 -1
- package/dist/graph-effective.js +215 -68
- package/dist/graph-ir.d.ts +23 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +130 -0
- package/dist/graph-sub-template.d.ts +11 -0
- package/dist/graph-sub-template.d.ts.map +1 -0
- package/dist/graph-sub-template.js +19 -0
- package/dist/lexicon.d.ts +9 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/observe.d.ts +28 -0
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +23 -1
- package/dist/lint/rule.d.ts +6 -0
- package/dist/lint/rule.d.ts.map +1 -1
- package/dist/live-endpoint.d.ts +1 -1
- package/dist/live-endpoint.d.ts.map +1 -1
- package/dist/live-endpoint.js +1 -1
- package/dist/observation.d.ts +48 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +21 -5
- package/dist/op/activities/activity-contracts.d.ts +4 -4
- package/dist/op/op-waves.d.ts +17 -0
- package/dist/op/op-waves.d.ts.map +1 -1
- package/dist/op/op-waves.js +23 -1
- package/dist/pr-forge.d.ts +15 -1
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +28 -16
- package/dist/pr-requires.d.ts +5 -1
- package/dist/pr-requires.d.ts.map +1 -1
- package/dist/wave-runtime.mjs +251 -250
- package/dist/workspace/capabilities-contract.d.ts +66 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -0
- package/dist/workspace/capabilities-contract.js +107 -0
- package/dist/workspace/capabilities.schema.json +229 -0
- package/dist/workspace/ci-cloud-identity.d.ts +3 -1
- package/dist/workspace/ci-cloud-identity.d.ts.map +1 -1
- package/dist/workspace/ci-cloud-identity.js +16 -1
- package/dist/workspace/ci-run.d.ts +35 -8
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +95 -21
- package/dist/workspace/ci-secrets.d.ts.map +1 -1
- package/dist/workspace/ci-secrets.js +4 -3
- package/dist/workspace/compose-graph.d.ts +9 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +3 -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 +39 -2
- package/dist/workspace/declaration.d.ts +10 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +17 -1
- package/dist/workspace/declaration.schema.json +36 -1
- package/dist/workspace/graph-cache.d.ts +8 -0
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +27 -3
- package/dist/workspace/graph-cli.d.ts +39 -2
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +66 -24
- package/dist/workspace/graph.schema.json +148 -0
- package/dist/workspace/kind-readers.d.ts +3 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +7 -1
- package/dist/workspace/member-commands.d.ts +10 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +17 -1
- package/dist/workspace/nested-graph.d.ts +2 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +32 -1
- package/dist/workspace/reason-codes.d.ts +10 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +12 -0
- package/dist/workspace/search-cli.d.ts +204 -0
- package/dist/workspace/search-cli.d.ts.map +1 -0
- package/dist/workspace/search-cli.js +466 -0
- package/dist/workspace/search-contract.d.ts +56 -0
- package/dist/workspace/search-contract.d.ts.map +1 -0
- package/dist/workspace/search-contract.js +70 -0
- package/dist/workspace/search.schema.json +822 -0
- package/package.json +1 -1
- package/src/__snapshots__/okf.test.ts.snap +10 -0
- package/src/capabilities/aws.paths +148 -0
- package/src/capabilities/base-mappings.json +122 -0
- package/src/capabilities/catalog.ts +230 -0
- package/src/capabilities/language.test.ts +191 -0
- package/src/capabilities/language.ts +373 -0
- package/src/capabilities/matcher.ts +315 -0
- package/src/capabilities/view-compose.test.ts +76 -0
- package/src/capabilities/view.ts +631 -0
- package/src/ci-identity-targets.test.ts +275 -0
- package/src/ci-identity.ts +394 -61
- package/src/cli/commands/lint.ts +1 -0
- package/src/cli/handlers/build.ts +15 -1
- package/src/cli/handlers/declared-graph.ts +99 -0
- package/src/cli/handlers/graph.test.ts +94 -3
- package/src/cli/handlers/graph.ts +123 -96
- package/src/cli/handlers/pr-env.ts +135 -227
- package/src/cli/handlers/pr.ts +4 -0
- package/src/cli/handlers/search-build-roots.test.ts +144 -0
- package/src/cli/handlers/search-count.test.ts +191 -0
- package/src/cli/handlers/search-count.ts +165 -0
- package/src/cli/handlers/search-json.test.ts +333 -0
- package/src/cli/handlers/search-live.test.ts +387 -0
- package/src/cli/handlers/search-paths.test.ts +235 -0
- package/src/cli/handlers/search.ts +1312 -166
- package/src/cli/main.test.ts +28 -3
- package/src/cli/main.ts +23 -3
- package/src/cli/mcp/server.test.ts +3 -3
- package/src/cli/mcp/server.ts +3 -0
- package/src/cli/mcp/tools/capabilities.ts +32 -0
- package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
- package/src/cli/mcp/workspace-tools.ts +47 -2
- package/src/cli/parse-args.ts +52 -13
- package/src/cli/registry.ts +22 -0
- package/src/components/cli-support.ts +6 -1
- package/src/components/fan-out-support.ts +4 -1
- package/src/components/pr-env-ports.ts +89 -0
- package/src/components/pr-env-run-bundle.test.ts +54 -0
- package/src/components/pr-env-run.test.ts +290 -0
- package/src/components/pr-env-run.ts +563 -0
- package/src/components/pr-environment.ts +161 -13
- package/src/components/pr-pipeline.ts +10 -1
- package/src/config-environments.ts +133 -0
- package/src/config.ts +37 -124
- package/src/graph-detail.ts +15 -3
- package/src/graph-effective.ts +226 -75
- package/src/graph-ir.test.ts +163 -0
- package/src/graph-ir.ts +147 -0
- package/src/graph-sub-template.ts +22 -0
- package/src/lexicon.ts +10 -0
- package/src/lifecycle/observe.test.ts +27 -1
- package/src/lifecycle/observe.ts +43 -1
- package/src/lint/rule.ts +6 -0
- package/src/live-endpoint.ts +1 -1
- package/src/observation.test.ts +25 -0
- package/src/observation.ts +69 -5
- package/src/op/op-waves.ts +38 -1
- package/src/pr-forge-bundle.test.ts +1 -1
- package/src/pr-forge.ts +44 -17
- package/src/pr-requires.test.ts +43 -6
- package/src/pr-requires.ts +5 -1
- package/src/workspace/capabilities-contract.test.ts +88 -0
- package/src/workspace/capabilities-contract.ts +132 -0
- package/src/workspace/capabilities.schema.json +229 -0
- package/src/workspace/ci-cloud-identity.test.ts +20 -0
- package/src/workspace/ci-cloud-identity.ts +14 -1
- package/src/workspace/ci-run.test.ts +74 -1
- package/src/workspace/ci-run.ts +122 -29
- package/src/workspace/ci-secrets.test.ts +1 -1
- package/src/workspace/ci-secrets.ts +4 -3
- package/src/workspace/compose-graph.ts +10 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +14 -1
- package/src/workspace/conformance/index.ts +31 -2
- package/src/workspace/declaration.schema.json +36 -1
- package/src/workspace/declaration.test.ts +7 -0
- package/src/workspace/declaration.ts +24 -2
- package/src/workspace/graph-cache.ts +27 -3
- package/src/workspace/graph-cli.ts +96 -24
- package/src/workspace/graph.schema.json +148 -0
- package/src/workspace/kind-readers.e2e.test.ts +28 -0
- package/src/workspace/kind-readers.test.ts +1 -1
- package/src/workspace/kind-readers.ts +7 -1
- package/src/workspace/member-commands.ts +22 -1
- package/src/workspace/nested-graph.ts +32 -1
- package/src/workspace/reason-codes.test.ts +7 -0
- package/src/workspace/reason-codes.ts +12 -0
- package/src/workspace/search-cli.e2e.test.ts +305 -0
- package/src/workspace/search-cli.ts +591 -0
- package/src/workspace/search-contract.ts +95 -0
- package/src/workspace/search.schema.json +822 -0
|
@@ -32,9 +32,13 @@
|
|
|
32
32
|
*
|
|
33
33
|
* terragucci's `ephemeral.ts` gives each copy a suffixed Terraform state key.
|
|
34
34
|
* That part is Terraform's own and stays there; chant keys ownership on the
|
|
35
|
-
* marker its lexicons stamp and read back (`../lifecycle/teardown.ts`).
|
|
35
|
+
* marker its lexicons stamp and read back (`../lifecycle/teardown.ts`). A
|
|
36
|
+
* product supplies the rest as adapters (#4330): its plan and apply
|
|
37
|
+
* (`./pr-env-run.ts`), and a teardown for what no lexicon tears down
|
|
38
|
+
* ({@link PrEnvTeardownAdapter}), which reads the marker back from the copy
|
|
39
|
+
* as a lexicon does.
|
|
36
40
|
*/
|
|
37
|
-
import { environmentEndpoint, environmentName, isEnvironmentPattern, isOwnershipParamRef, matchesDeclaredEnvironment, resolveOwnershipStack } from "../config.js";
|
|
41
|
+
import { environmentEndpoint, environmentName, isEnvironmentPattern, isOwnershipParamRef, matchesDeclaredEnvironment, resolveOwnershipStack } from "../config-environments.js";
|
|
38
42
|
import { executeTeardown, planTeardown } from "../lifecycle/teardown.js";
|
|
39
43
|
import { applyLiveEndpoint } from "../live-endpoint.js";
|
|
40
44
|
/** The gate a pull request's environment waits on, under the pull request's op `pr-<n>`. */
|
|
@@ -132,6 +136,35 @@ export function derivePrEnvironment(config, template, pr) {
|
|
|
132
136
|
const environments = declared ? [endpoint ? { name: env, endpoint } : env, ...declared] : undefined;
|
|
133
137
|
return { env, template, stack, param: own.param, environments, ...(endpoint ? { endpoint } : {}) };
|
|
134
138
|
}
|
|
139
|
+
/** The placeholder a template's site URL or domain names the environment with (#4330). */
|
|
140
|
+
export const PR_ENV_SITE_PLACEHOLDER = "{env}";
|
|
141
|
+
/**
|
|
142
|
+
* A component's site in `env`, a pull request's environment, carried over
|
|
143
|
+
* from its site in `template` (#4330). An entry the component declares for
|
|
144
|
+
* `env` itself wins. Otherwise the template's runtime and lifecycle remote
|
|
145
|
+
* carry over as they are. Its URL and domain carry over only when they name
|
|
146
|
+
* the environment with `{env}`, which becomes `pr-<n>`: a literal URL or
|
|
147
|
+
* domain is the template's own release, so it is left out rather than
|
|
148
|
+
* pointing pr-<n> at it. Undefined when neither is declared.
|
|
149
|
+
*/
|
|
150
|
+
export function prEnvironmentSite(declared, template, env) {
|
|
151
|
+
const own = declared?.find((d) => d.name === env);
|
|
152
|
+
if (own)
|
|
153
|
+
return { ...own };
|
|
154
|
+
const from = declared?.find((d) => d.name === template);
|
|
155
|
+
if (!from)
|
|
156
|
+
return undefined;
|
|
157
|
+
const named = (v) => (v && v.includes(PR_ENV_SITE_PLACEHOLDER) ? v.split(PR_ENV_SITE_PLACEHOLDER).join(env) : undefined);
|
|
158
|
+
const url = named(from.url);
|
|
159
|
+
const domain = named(from.domain);
|
|
160
|
+
return {
|
|
161
|
+
name: env,
|
|
162
|
+
...(from.runtime ? { runtime: from.runtime } : {}),
|
|
163
|
+
...(url ? { url } : {}),
|
|
164
|
+
...(domain ? { domain } : {}),
|
|
165
|
+
...(from.lifecycle ? { lifecycle: from.lifecycle } : {}),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
135
168
|
/** The records of a records.jsonl text, oldest first. Malformed lines are skipped. */
|
|
136
169
|
export function parsePrEnvRecords(text) {
|
|
137
170
|
const out = [];
|
|
@@ -157,6 +190,7 @@ export function livePrEnvironments(records) {
|
|
|
157
190
|
for (const r of records) {
|
|
158
191
|
if (r.kind === "up") {
|
|
159
192
|
const was = live.get(r.env);
|
|
193
|
+
const locations = { ...(was?.locations ?? {}), ...(r.locations ?? {}) };
|
|
160
194
|
live.set(r.env, {
|
|
161
195
|
pr: r.pr,
|
|
162
196
|
env: r.env,
|
|
@@ -165,6 +199,7 @@ export function livePrEnvironments(records) {
|
|
|
165
199
|
marker: { ...r.marker },
|
|
166
200
|
commit: r.commit,
|
|
167
201
|
components: [...new Set([...(was?.components ?? []), ...r.components])],
|
|
202
|
+
...(Object.keys(locations).length > 0 ? { locations } : {}),
|
|
168
203
|
applied: r.timestamp,
|
|
169
204
|
expiresAt: r.expiresAt ?? r.timestamp,
|
|
170
205
|
});
|
|
@@ -214,25 +249,48 @@ export function ownedEntries(plan, marker) {
|
|
|
214
249
|
const owns = (e) => e.marker?.stack === marker.stack && e.marker?.env === marker.env;
|
|
215
250
|
return { plan: { ...plan, entries: plan.entries.filter(owns) }, dropped: plan.entries.filter((e) => !owns(e)) };
|
|
216
251
|
}
|
|
252
|
+
/** An adapter in the shape `planTeardown` and `executeTeardown` call: a lexicon with only its two teardown halves. */
|
|
253
|
+
function adapterLexicon(adapter, live) {
|
|
254
|
+
const shaped = {
|
|
255
|
+
name: adapter.name,
|
|
256
|
+
teardownOwned: (o) => adapter.owned({ environment: o.environment, marker: o.marker, live }),
|
|
257
|
+
executeTeardown: (o) => adapter.teardown({ environment: o.environment, marker: o.marker, live, candidates: o.candidates }),
|
|
258
|
+
};
|
|
259
|
+
return shaped;
|
|
260
|
+
}
|
|
217
261
|
/**
|
|
218
262
|
* Tear down pull request `pr`'s environment with the ownership check: refused
|
|
219
263
|
* before any read when {@link teardownRefusal} says so; otherwise the live
|
|
220
264
|
* resources under the record's marker are planned, every entry whose marker
|
|
221
265
|
* is not exactly `{ stack, env: "pr-<n>" }` is dropped ({@link ownedEntries}),
|
|
222
|
-
* and only the rest go to each lexicon's teardown. The endpoint
|
|
223
|
-
* the environment was applied at: its own `pr-*` entry's, else the
|
|
266
|
+
* and only the rest go to each lexicon's or adapter's teardown. The endpoint
|
|
267
|
+
* is the one the environment was applied at: its own `pr-*` entry's, else the
|
|
268
|
+
* template's. A lexicon an adapter covers (`lexicons`) is left out.
|
|
224
269
|
*/
|
|
225
270
|
export async function tearDownPrEnvironment(input) {
|
|
226
|
-
const { pr, live
|
|
271
|
+
const { pr, live } = input;
|
|
272
|
+
const config = input.config ?? {};
|
|
227
273
|
const refusal = teardownRefusal(pr, live, config.environments);
|
|
228
274
|
if (refusal)
|
|
229
275
|
return { refusal };
|
|
276
|
+
const adapters = input.adapters ?? [];
|
|
277
|
+
const covered = new Set(adapters.flatMap((a) => a.lexicons ?? []));
|
|
278
|
+
const names = new Set();
|
|
279
|
+
for (const a of adapters) {
|
|
280
|
+
if (names.has(a.name))
|
|
281
|
+
return { refusal: `two teardown adapters are named ${a.name}, so their outcomes could not be told apart; nothing was torn down` };
|
|
282
|
+
names.add(a.name);
|
|
283
|
+
}
|
|
284
|
+
const lexicons = (input.plugins ?? []).filter((x) => !covered.has(x.name));
|
|
285
|
+
if (lexicons.some((x) => names.has(x.name)))
|
|
286
|
+
return { refusal: `a teardown adapter shares its name with a lexicon (${[...names].filter((n) => lexicons.some((x) => x.name === n)).join(", ")}), so their outcomes could not be told apart; nothing was torn down` };
|
|
230
287
|
const env = prEnvironmentName(pr);
|
|
231
288
|
const marker = { stack: live.marker.stack, env };
|
|
232
289
|
const endpoint = environmentEndpoint(config.environments, env) ?? environmentEndpoint(config.environments, live.template);
|
|
233
|
-
const applied = applyLiveEndpoint(endpoint ? [{ name: env, endpoint }] : [], env,
|
|
290
|
+
const applied = applyLiveEndpoint(endpoint ? [{ name: env, endpoint }] : [], env, lexicons.filter((x) => x.teardownOwned || x.describeResources || x.executeTeardown));
|
|
234
291
|
if (applied.notice)
|
|
235
292
|
input.warn?.(applied.notice);
|
|
293
|
+
const plugins = [...lexicons, ...adapters.map((a) => adapterLexicon(a, live))];
|
|
236
294
|
const deployedStacks = (config.stacks ?? []).map((s) => ({ name: s.name, ...(s.region ? { region: s.region } : {}) }));
|
|
237
295
|
try {
|
|
238
296
|
const planned = await planTeardown({ environment: env, stack: marker.stack, plugins, ...(deployedStacks.length > 0 ? { deployedStacks } : {}) });
|
|
@@ -293,6 +351,7 @@ export function acceptHandedRecord(raw, check) {
|
|
|
293
351
|
marker: { stack: r.marker.stack, env },
|
|
294
352
|
commit: check.head,
|
|
295
353
|
components: [...r.components],
|
|
354
|
+
...(handedLocations(r.locations) ? { locations: handedLocations(r.locations) } : {}),
|
|
296
355
|
planDigest: typeof r.planDigest === "string" ? r.planDigest : "",
|
|
297
356
|
result: r.result,
|
|
298
357
|
by: check.by,
|
|
@@ -304,6 +363,21 @@ export function acceptHandedRecord(raw, check) {
|
|
|
304
363
|
},
|
|
305
364
|
};
|
|
306
365
|
}
|
|
366
|
+
/** A handed-on report row's site, kept only as its three strings. */
|
|
367
|
+
function handedSite(raw) {
|
|
368
|
+
if (typeof raw !== "object" || raw === null)
|
|
369
|
+
return undefined;
|
|
370
|
+
const r = raw;
|
|
371
|
+
const site = Object.fromEntries(["runtime", "url", "domain"].filter((k) => typeof r[k] === "string").map((k) => [k, r[k]]));
|
|
372
|
+
return Object.keys(site).length > 0 ? site : undefined;
|
|
373
|
+
}
|
|
374
|
+
/** A handed-on record's locations, kept only as a map of strings to strings. */
|
|
375
|
+
function handedLocations(raw) {
|
|
376
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
377
|
+
return undefined;
|
|
378
|
+
const out = Object.fromEntries(Object.entries(raw).filter((e) => typeof e[1] === "string"));
|
|
379
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
380
|
+
}
|
|
307
381
|
/**
|
|
308
382
|
* The report `pr-env up` handed on, checked as data before the post job
|
|
309
383
|
* renders a note from it: an `up` report for this pull request's `pr-<n>`.
|
|
@@ -335,7 +409,16 @@ export function handedPrEnvReport(raw, check) {
|
|
|
335
409
|
status: r.status,
|
|
336
410
|
...(typeof r.message === "string" ? { message: r.message } : {}),
|
|
337
411
|
...(typeof r.endpoint === "string" ? { endpoint: r.endpoint } : {}),
|
|
338
|
-
components: (Array.isArray(r.components) ? r.components : []).map((c) => ({
|
|
412
|
+
components: (Array.isArray(r.components) ? r.components : []).map((c) => ({
|
|
413
|
+
component: str(c?.component),
|
|
414
|
+
status: str(c?.status),
|
|
415
|
+
create: num(c?.create),
|
|
416
|
+
update: num(c?.update),
|
|
417
|
+
replace: num(c?.replace),
|
|
418
|
+
delete: num(c?.delete),
|
|
419
|
+
...(typeof c?.location === "string" ? { location: c.location } : {}),
|
|
420
|
+
...(handedSite(c?.site) ? { site: handedSite(c?.site) } : {}),
|
|
421
|
+
})),
|
|
339
422
|
...(Array.isArray(r.approvedBy) ? { approvedBy: r.approvedBy.filter((a) => typeof a === "string") } : {}),
|
|
340
423
|
},
|
|
341
424
|
};
|
|
@@ -372,9 +455,12 @@ export function renderPrEnvNote(r, approver = "<you>") {
|
|
|
372
455
|
if (r.message)
|
|
373
456
|
out.push("", `> ${r.message.split("\n").join("\n> ")}`);
|
|
374
457
|
if (r.components.length > 0) {
|
|
375
|
-
|
|
458
|
+
// #4330: a Where column when a row has a URL or a location, as code: env-up ran the change's code, so the post job does not link it.
|
|
459
|
+
const at = (c) => c.site?.url ?? c.site?.domain ?? c.location;
|
|
460
|
+
const where = r.components.some((c) => at(c));
|
|
461
|
+
out.push("", `| Component | Status | Create | Update | Replace | Delete |${where ? " Where |" : ""}`, `|---|---|---:|---:|---:|---:|${where ? "---|" : ""}`);
|
|
376
462
|
for (const c of r.components)
|
|
377
|
-
out.push(`| ${code(c.component)} | ${c.status} | ${c.create} | ${c.update} | ${c.replace} | ${c.delete} |`);
|
|
463
|
+
out.push(`| ${code(c.component)} | ${c.status} | ${c.create} | ${c.update} | ${c.replace} | ${c.delete} |${where ? ` ${at(c) ? code(at(c)) : ""} |` : ""}`);
|
|
378
464
|
}
|
|
379
465
|
if (r.digest)
|
|
380
466
|
out.push("", `Plan digest: ${code(r.digest)}${r.approvedBy?.length ? `, approved by ${r.approvedBy.map(code).join(", ")}` : ""}`);
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
import type { ForgeKind } from "../pr-forge.js";
|
|
84
84
|
import type { DriverComponent } from "./driver.js";
|
|
85
85
|
import type { GatedWavePipelineOptions } from "./gated-wave-pipeline.js";
|
|
86
|
-
import type { PipelineCloudIdentity } from "../ci-identity.js";
|
|
86
|
+
import type { CloudTradeSpec, PipelineCloudIdentity } from "../ci-identity.js";
|
|
87
87
|
/** Where both jobs write their reports, kept as a CI artifact. */
|
|
88
88
|
export declare const PR_LOOP_REPORT_DIR = ".chant/pr";
|
|
89
89
|
/**
|
|
@@ -191,6 +191,15 @@ export interface PrLoopPipelineOptions {
|
|
|
191
191
|
* ({@link prEnvJobs}). Set from `--pr-env` beside `--pr-loop`. Default false.
|
|
192
192
|
*/
|
|
193
193
|
prEnvironment?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* The cloud identity a pull request environment's jobs take (#4330), from
|
|
196
|
+
* `ci.identity.cloud` (`resolvePrEnvCloudIdentity` in ../ci-identity.ts):
|
|
197
|
+
* the apply identity of a rule that names the pull request environments.
|
|
198
|
+
* env-up, env-down and env-sweep trade their OIDC token for it before the
|
|
199
|
+
* checkout, and env-up's later steps start without the token variables.
|
|
200
|
+
* Absent: they request no OIDC token.
|
|
201
|
+
*/
|
|
202
|
+
prEnvIdentity?: CloudTradeSpec;
|
|
194
203
|
}
|
|
195
204
|
/** One job's command and the forge values it reads, as environment variables for its step. */
|
|
196
205
|
export interface PrLoopJob {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-pipeline.d.ts","sourceRoot":"","sources":["../../src/components/pr-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pr-pipeline.d.ts","sourceRoot":"","sources":["../../src/components/pr-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure helpers over a loaded config's `environments` and `ownership`:
|
|
3
|
+
* names, patterns, endpoints and the ownership stack. ./config.ts re-exports
|
|
4
|
+
* them. They import nothing at runtime, so ./components/pr-environment.ts and
|
|
5
|
+
* ./live-endpoint.ts use them without bundling the config loader.
|
|
6
|
+
*/
|
|
7
|
+
import type { ChantConfig } from "./config.js";
|
|
8
|
+
/**
|
|
9
|
+
* One project-declared environment (chant #1166). Historically always a bare
|
|
10
|
+
* name (`"floci"`); an entry can now instead carry the endpoint that
|
|
11
|
+
* environment's `--live` reads should target (`{ name: "floci", endpoint:
|
|
12
|
+
* "http://localhost:4566" }`), so a project pointed at a local emulator is
|
|
13
|
+
* self-sufficient — no ambient `AWS_ENDPOINT_URL` export required to avoid
|
|
14
|
+
* silently querying real AWS. See {@link environmentName}, {@link
|
|
15
|
+
* environmentNames}, {@link environmentEndpoint} below, and
|
|
16
|
+
* `./live-endpoint.ts`'s `applyLiveEndpoint`, the CLI-side consumer.
|
|
17
|
+
*
|
|
18
|
+
* The array's order is the member's promotion order (#4030, see
|
|
19
|
+
* `./workspace/promotion-order.ts`), and `canary: true` marks a step as the
|
|
20
|
+
* canary step of that order. The canary is declared and surfaced; chant does
|
|
21
|
+
* not yet act on it.
|
|
22
|
+
*/
|
|
23
|
+
export type EnvironmentDeclaration = string | {
|
|
24
|
+
name: string;
|
|
25
|
+
endpoint?: string;
|
|
26
|
+
canary?: boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* `ownership.env`: a literal environment identity, or a reference to a
|
|
30
|
+
* declared build parameter whose resolved value becomes the identity (#1396).
|
|
31
|
+
*/
|
|
32
|
+
export type OwnershipEnv = string | {
|
|
33
|
+
param: string;
|
|
34
|
+
};
|
|
35
|
+
/** The declared name of one `environments` entry, whichever form it takes. */
|
|
36
|
+
export declare function environmentName(entry: EnvironmentDeclaration): string;
|
|
37
|
+
/**
|
|
38
|
+
* Every declared environment's name, in `environments` order. `undefined` in,
|
|
39
|
+
* `undefined` out — mirrors the field itself being optional, so a caller that
|
|
40
|
+
* already writes `config.environments?.something` can keep doing so:
|
|
41
|
+
* `environmentNames(config.environments)?.includes(name)`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function environmentNames(environments: EnvironmentDeclaration[] | undefined): string[] | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a declared environment name is a glob pattern rather than a literal
|
|
46
|
+
* (#1221) — it contains at least one `*`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isEnvironmentPattern(declaredName: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Anchored `*`-glob match (#1221): each `*` in `pattern` matches any run of
|
|
51
|
+
* characters (possibly empty); everything else matches itself. Deliberately
|
|
52
|
+
* the whole surface — no `?`, no character classes, no regex. A pattern with
|
|
53
|
+
* no `*` degenerates to string equality.
|
|
54
|
+
*/
|
|
55
|
+
export declare function matchesEnvironmentPattern(pattern: string, name: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Environment-membership test (#1221): is `name` covered by this project's
|
|
58
|
+
* declared `environments`? A literal entry matches by equality; an entry
|
|
59
|
+
* containing `*` matches as a glob pattern (`"pr-*"` covers `pr-42`).
|
|
60
|
+
* Literals are checked first across the whole list, then patterns — so a
|
|
61
|
+
* name that is declared outright never depends on pattern order. `undefined`
|
|
62
|
+
* / empty `environments` returns `false`; callers that treat "no declared
|
|
63
|
+
* environments" as "anything goes" (e.g. {@link unknownEnvError} in
|
|
64
|
+
* `./env.ts`) guard that case themselves.
|
|
65
|
+
*/
|
|
66
|
+
export declare function matchesDeclaredEnvironment(environments: EnvironmentDeclaration[] | undefined, name: string): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* The endpoint `name` declares (chant #1166) — `undefined` for a bare-string
|
|
69
|
+
* entry, an entry with no `endpoint` set, or a name this project doesn't
|
|
70
|
+
* declare at all. `./live-endpoint.ts`'s `applyLiveEndpoint` is the consumer:
|
|
71
|
+
* it injects this into the ambient env var each observing lexicon's CLI
|
|
72
|
+
* shell-out reads (e.g. `AWS_ENDPOINT_URL`), unless that var is already set —
|
|
73
|
+
* ambient always wins.
|
|
74
|
+
*
|
|
75
|
+
* A pattern entry (#1221) can carry an endpoint too: `{ name: "pr-*",
|
|
76
|
+
* endpoint }` supplies the endpoint for every `pr-<n>` environment. A literal
|
|
77
|
+
* entry always wins over a pattern — declaring `pr-special` alongside
|
|
78
|
+
* `pr-*` resolves `pr-special` to the literal entry's endpoint (or none).
|
|
79
|
+
*/
|
|
80
|
+
export declare function environmentEndpoint(environments: EnvironmentDeclaration[] | undefined, name: string): string | undefined;
|
|
81
|
+
/** Whether an `ownership.env` entry is a build-parameter reference rather than a literal. */
|
|
82
|
+
export declare function isOwnershipParamRef(env: OwnershipEnv | undefined): env is {
|
|
83
|
+
param: string;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* The ownership stack identity alone — `ownership.stack` when marking is on
|
|
87
|
+
* (no `stack`, or `enabled: false`, means off). For callers that need the
|
|
88
|
+
* stack and nothing else (a field manager, a prune selector) and so have no
|
|
89
|
+
* build parameters to resolve `env` against.
|
|
90
|
+
*/
|
|
91
|
+
export declare function resolveOwnershipStack(config: Pick<ChantConfig, "ownership">): string | undefined;
|
|
92
|
+
//# sourceMappingURL=config-environments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-environments.d.ts","sourceRoot":"","sources":["../src/config-environments.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpG;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,sBAAsB,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAEzG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAehF;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAClD,IAAI,EAAE,MAAM,GACX,OAAO,CAIT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxH;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,GAAG,IAAI;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAE3F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,GAAG,SAAS,CAIhG"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pure helpers over a loaded config's `environments` and `ownership`:
|
|
3
|
+
* names, patterns, endpoints and the ownership stack. ./config.ts re-exports
|
|
4
|
+
* them. They import nothing at runtime, so ./components/pr-environment.ts and
|
|
5
|
+
* ./live-endpoint.ts use them without bundling the config loader.
|
|
6
|
+
*/
|
|
7
|
+
/** The declared name of one `environments` entry, whichever form it takes. */
|
|
8
|
+
export function environmentName(entry) {
|
|
9
|
+
return typeof entry === "string" ? entry : entry.name;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Every declared environment's name, in `environments` order. `undefined` in,
|
|
13
|
+
* `undefined` out — mirrors the field itself being optional, so a caller that
|
|
14
|
+
* already writes `config.environments?.something` can keep doing so:
|
|
15
|
+
* `environmentNames(config.environments)?.includes(name)`.
|
|
16
|
+
*/
|
|
17
|
+
export function environmentNames(environments) {
|
|
18
|
+
return environments?.map(environmentName);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Whether a declared environment name is a glob pattern rather than a literal
|
|
22
|
+
* (#1221) — it contains at least one `*`.
|
|
23
|
+
*/
|
|
24
|
+
export function isEnvironmentPattern(declaredName) {
|
|
25
|
+
return declaredName.includes("*");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Anchored `*`-glob match (#1221): each `*` in `pattern` matches any run of
|
|
29
|
+
* characters (possibly empty); everything else matches itself. Deliberately
|
|
30
|
+
* the whole surface — no `?`, no character classes, no regex. A pattern with
|
|
31
|
+
* no `*` degenerates to string equality.
|
|
32
|
+
*/
|
|
33
|
+
export function matchesEnvironmentPattern(pattern, name) {
|
|
34
|
+
const parts = pattern.split("*");
|
|
35
|
+
if (parts.length === 1)
|
|
36
|
+
return pattern === name;
|
|
37
|
+
const first = parts[0];
|
|
38
|
+
const last = parts[parts.length - 1];
|
|
39
|
+
if (!name.startsWith(first))
|
|
40
|
+
return false;
|
|
41
|
+
let cursor = first.length;
|
|
42
|
+
for (let i = 1; i < parts.length - 1; i++) {
|
|
43
|
+
const part = parts[i];
|
|
44
|
+
if (part === "")
|
|
45
|
+
continue;
|
|
46
|
+
const at = name.indexOf(part, cursor);
|
|
47
|
+
if (at === -1)
|
|
48
|
+
return false;
|
|
49
|
+
cursor = at + part.length;
|
|
50
|
+
}
|
|
51
|
+
return name.length - cursor >= last.length && name.endsWith(last);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Environment-membership test (#1221): is `name` covered by this project's
|
|
55
|
+
* declared `environments`? A literal entry matches by equality; an entry
|
|
56
|
+
* containing `*` matches as a glob pattern (`"pr-*"` covers `pr-42`).
|
|
57
|
+
* Literals are checked first across the whole list, then patterns — so a
|
|
58
|
+
* name that is declared outright never depends on pattern order. `undefined`
|
|
59
|
+
* / empty `environments` returns `false`; callers that treat "no declared
|
|
60
|
+
* environments" as "anything goes" (e.g. {@link unknownEnvError} in
|
|
61
|
+
* `./env.ts`) guard that case themselves.
|
|
62
|
+
*/
|
|
63
|
+
export function matchesDeclaredEnvironment(environments, name) {
|
|
64
|
+
const names = environmentNames(environments) ?? [];
|
|
65
|
+
if (names.includes(name))
|
|
66
|
+
return true;
|
|
67
|
+
return names.some((declared) => isEnvironmentPattern(declared) && matchesEnvironmentPattern(declared, name));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The endpoint `name` declares (chant #1166) — `undefined` for a bare-string
|
|
71
|
+
* entry, an entry with no `endpoint` set, or a name this project doesn't
|
|
72
|
+
* declare at all. `./live-endpoint.ts`'s `applyLiveEndpoint` is the consumer:
|
|
73
|
+
* it injects this into the ambient env var each observing lexicon's CLI
|
|
74
|
+
* shell-out reads (e.g. `AWS_ENDPOINT_URL`), unless that var is already set —
|
|
75
|
+
* ambient always wins.
|
|
76
|
+
*
|
|
77
|
+
* A pattern entry (#1221) can carry an endpoint too: `{ name: "pr-*",
|
|
78
|
+
* endpoint }` supplies the endpoint for every `pr-<n>` environment. A literal
|
|
79
|
+
* entry always wins over a pattern — declaring `pr-special` alongside
|
|
80
|
+
* `pr-*` resolves `pr-special` to the literal entry's endpoint (or none).
|
|
81
|
+
*/
|
|
82
|
+
export function environmentEndpoint(environments, name) {
|
|
83
|
+
const found = environments?.find((e) => environmentName(e) === name) ??
|
|
84
|
+
environments?.find((e) => isEnvironmentPattern(environmentName(e)) && matchesEnvironmentPattern(environmentName(e), name));
|
|
85
|
+
return found && typeof found !== "string" ? found.endpoint : undefined;
|
|
86
|
+
}
|
|
87
|
+
/** Whether an `ownership.env` entry is a build-parameter reference rather than a literal. */
|
|
88
|
+
export function isOwnershipParamRef(env) {
|
|
89
|
+
return typeof env === "object" && env !== null && typeof env.param === "string";
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The ownership stack identity alone — `ownership.stack` when marking is on
|
|
93
|
+
* (no `stack`, or `enabled: false`, means off). For callers that need the
|
|
94
|
+
* stack and nothing else (a field manager, a prune selector) and so have no
|
|
95
|
+
* build parameters to resolve `env` against.
|
|
96
|
+
*/
|
|
97
|
+
export function resolveOwnershipStack(config) {
|
|
98
|
+
const o = config.ownership;
|
|
99
|
+
if (!o || !o.stack || o.enabled === false)
|
|
100
|
+
return undefined;
|
|
101
|
+
return o.stack;
|
|
102
|
+
}
|
package/dist/config.d.ts
CHANGED
|
@@ -9,79 +9,8 @@ import type { BuildParamProvenance } from "./provenance.js";
|
|
|
9
9
|
import { type LexiconDeclaration } from "./lexicon-module.js";
|
|
10
10
|
import { type DecideConfig } from "./op/decide-config.js";
|
|
11
11
|
import { type PublishDeclaration } from "./lifecycle/publish-declaration.js";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* name (`"floci"`); an entry can now instead carry the endpoint that
|
|
15
|
-
* environment's `--live` reads should target (`{ name: "floci", endpoint:
|
|
16
|
-
* "http://localhost:4566" }`), so a project pointed at a local emulator is
|
|
17
|
-
* self-sufficient — no ambient `AWS_ENDPOINT_URL` export required to avoid
|
|
18
|
-
* silently querying real AWS. See {@link environmentName}, {@link
|
|
19
|
-
* environmentNames}, {@link environmentEndpoint} below, and
|
|
20
|
-
* `./live-endpoint.ts`'s `applyLiveEndpoint`, the CLI-side consumer.
|
|
21
|
-
*
|
|
22
|
-
* The array's order is the member's promotion order (#4030, see
|
|
23
|
-
* `./workspace/promotion-order.ts`), and `canary: true` marks a step as the
|
|
24
|
-
* canary step of that order. The canary is declared and surfaced; chant does
|
|
25
|
-
* not yet act on it.
|
|
26
|
-
*/
|
|
27
|
-
export type EnvironmentDeclaration = string | {
|
|
28
|
-
name: string;
|
|
29
|
-
endpoint?: string;
|
|
30
|
-
canary?: boolean;
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* `ownership.env`: a literal environment identity, or a reference to a
|
|
34
|
-
* declared build parameter whose resolved value becomes the identity (#1396).
|
|
35
|
-
*/
|
|
36
|
-
export type OwnershipEnv = string | {
|
|
37
|
-
param: string;
|
|
38
|
-
};
|
|
39
|
-
/** The declared name of one `environments` entry, whichever form it takes. */
|
|
40
|
-
export declare function environmentName(entry: EnvironmentDeclaration): string;
|
|
41
|
-
/**
|
|
42
|
-
* Every declared environment's name, in `environments` order. `undefined` in,
|
|
43
|
-
* `undefined` out — mirrors the field itself being optional, so a caller that
|
|
44
|
-
* already writes `config.environments?.something` can keep doing so:
|
|
45
|
-
* `environmentNames(config.environments)?.includes(name)`.
|
|
46
|
-
*/
|
|
47
|
-
export declare function environmentNames(environments: EnvironmentDeclaration[] | undefined): string[] | undefined;
|
|
48
|
-
/**
|
|
49
|
-
* Whether a declared environment name is a glob pattern rather than a literal
|
|
50
|
-
* (#1221) — it contains at least one `*`.
|
|
51
|
-
*/
|
|
52
|
-
export declare function isEnvironmentPattern(declaredName: string): boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Anchored `*`-glob match (#1221): each `*` in `pattern` matches any run of
|
|
55
|
-
* characters (possibly empty); everything else matches itself. Deliberately
|
|
56
|
-
* the whole surface — no `?`, no character classes, no regex. A pattern with
|
|
57
|
-
* no `*` degenerates to string equality.
|
|
58
|
-
*/
|
|
59
|
-
export declare function matchesEnvironmentPattern(pattern: string, name: string): boolean;
|
|
60
|
-
/**
|
|
61
|
-
* Environment-membership test (#1221): is `name` covered by this project's
|
|
62
|
-
* declared `environments`? A literal entry matches by equality; an entry
|
|
63
|
-
* containing `*` matches as a glob pattern (`"pr-*"` covers `pr-42`).
|
|
64
|
-
* Literals are checked first across the whole list, then patterns — so a
|
|
65
|
-
* name that is declared outright never depends on pattern order. `undefined`
|
|
66
|
-
* / empty `environments` returns `false`; callers that treat "no declared
|
|
67
|
-
* environments" as "anything goes" (e.g. {@link unknownEnvError} in
|
|
68
|
-
* `./env.ts`) guard that case themselves.
|
|
69
|
-
*/
|
|
70
|
-
export declare function matchesDeclaredEnvironment(environments: EnvironmentDeclaration[] | undefined, name: string): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* The endpoint `name` declares (chant #1166) — `undefined` for a bare-string
|
|
73
|
-
* entry, an entry with no `endpoint` set, or a name this project doesn't
|
|
74
|
-
* declare at all. `./live-endpoint.ts`'s `applyLiveEndpoint` is the consumer:
|
|
75
|
-
* it injects this into the ambient env var each observing lexicon's CLI
|
|
76
|
-
* shell-out reads (e.g. `AWS_ENDPOINT_URL`), unless that var is already set —
|
|
77
|
-
* ambient always wins.
|
|
78
|
-
*
|
|
79
|
-
* A pattern entry (#1221) can carry an endpoint too: `{ name: "pr-*",
|
|
80
|
-
* endpoint }` supplies the endpoint for every `pr-<n>` environment. A literal
|
|
81
|
-
* entry always wins over a pattern — declaring `pr-special` alongside
|
|
82
|
-
* `pr-*` resolves `pr-special` to the literal entry's endpoint (or none).
|
|
83
|
-
*/
|
|
84
|
-
export declare function environmentEndpoint(environments: EnvironmentDeclaration[] | undefined, name: string): string | undefined;
|
|
12
|
+
export { environmentEndpoint, environmentName, environmentNames, isEnvironmentPattern, isOwnershipParamRef, matchesDeclaredEnvironment, matchesEnvironmentPattern, resolveOwnershipStack, type EnvironmentDeclaration, type OwnershipEnv, } from "./config-environments.js";
|
|
13
|
+
import { type EnvironmentDeclaration, type OwnershipEnv } from "./config-environments.js";
|
|
85
14
|
export declare const ChantConfigSchema: z.ZodObject<{
|
|
86
15
|
lexicons: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
87
16
|
name: z.ZodString;
|
|
@@ -106,6 +35,12 @@ export declare const ChantConfigSchema: z.ZodObject<{
|
|
|
106
35
|
build: z.ZodOptional<z.ZodObject<{
|
|
107
36
|
fold: z.ZodOptional<z.ZodBoolean>;
|
|
108
37
|
}, z.core.$strip>>;
|
|
38
|
+
graph: z.ZodOptional<z.ZodObject<{
|
|
39
|
+
lint: z.ZodOptional<z.ZodEnum<{
|
|
40
|
+
gate: "gate";
|
|
41
|
+
report: "report";
|
|
42
|
+
}>>;
|
|
43
|
+
}, z.core.$strict>>;
|
|
109
44
|
buildParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
110
45
|
type: z.ZodEnum<{
|
|
111
46
|
boolean: "boolean";
|
|
@@ -304,6 +239,22 @@ export interface ChantConfig {
|
|
|
304
239
|
}>;
|
|
305
240
|
/** Lint configuration (rules, extends, overrides, plugins) */
|
|
306
241
|
lint?: LintConfig;
|
|
242
|
+
/**
|
|
243
|
+
* How `chant graph` treats lint errors (INTENTIUS/behold#919).
|
|
244
|
+
*
|
|
245
|
+
* `"gate"` (the default) refuses to emit the entity graph for source that
|
|
246
|
+
* fails `chant lint`: the graph stands for source chant will build.
|
|
247
|
+
* `"report"` emits it anyway and carries every lint finding on the IR's
|
|
248
|
+
* `meta.lint`, for a project that only reads source it did not author. The
|
|
249
|
+
* reader project `chant workspace graph` writes for a terraform or choudoufu
|
|
250
|
+
* member sets it, and so does behold's scratch project for a bare Terraform
|
|
251
|
+
* folder: an error-severity finding there describes the estate, and the
|
|
252
|
+
* person needs the picture to look at it. A chant older than the key
|
|
253
|
+
* ignores it and gates as before.
|
|
254
|
+
*/
|
|
255
|
+
graph?: {
|
|
256
|
+
lint?: "gate" | "report";
|
|
257
|
+
};
|
|
307
258
|
/**
|
|
308
259
|
* Telemetry attribution (#2558, D22): lexicons that declare workloads stamp
|
|
309
260
|
* resource attributes (`chant.workspace`, `chant.member`, `chant.decl`,
|
|
@@ -637,17 +588,6 @@ export interface DiscoveryGlobs {
|
|
|
637
588
|
*/
|
|
638
589
|
export declare function resolveDiscoveryGlobs(startDir: string): Promise<DiscoveryGlobs | undefined>;
|
|
639
590
|
export declare function isLintOnlyFragment(configPath: string): boolean;
|
|
640
|
-
/** Whether an `ownership.env` entry is a build-parameter reference rather than a literal. */
|
|
641
|
-
export declare function isOwnershipParamRef(env: OwnershipEnv | undefined): env is {
|
|
642
|
-
param: string;
|
|
643
|
-
};
|
|
644
|
-
/**
|
|
645
|
-
* The ownership stack identity alone — `ownership.stack` when marking is on
|
|
646
|
-
* (no `stack`, or `enabled: false`, means off). For callers that need the
|
|
647
|
-
* stack and nothing else (a field manager, a prune selector) and so have no
|
|
648
|
-
* build parameters to resolve `env` against.
|
|
649
|
-
*/
|
|
650
|
-
export declare function resolveOwnershipStack(config: ChantConfig): string | undefined;
|
|
651
591
|
/**
|
|
652
592
|
* Resolve the `env` half of the ownership marker (#1396). A literal is
|
|
653
593
|
* returned as-is. A `{ param }` reference is looked up in this build's resolved
|
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;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|