@intentius/chant 0.124.39 → 0.124.40
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/cli/component-endpoint.d.ts +20 -0
- package/dist/cli/component-endpoint.d.ts.map +1 -0
- package/dist/cli/component-endpoint.js +36 -0
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +10 -1
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +11 -5
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +7 -2
- package/dist/cli/handlers/run.d.ts +4 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +17 -6
- package/dist/components/auto-release.d.ts +35 -3
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +29 -2
- 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 +2 -0
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/components/deploy-units.js +5 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +39 -16
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -1
- package/dist/lifecycle/__fixtures__/publish-fakes.js +6 -1
- package/dist/lifecycle/publish-declaration.d.ts.map +1 -1
- package/dist/lifecycle/publish-declaration.js +4 -3
- package/dist/lifecycle/publish-npm.d.ts +2 -2
- package/dist/lifecycle/publish-npm.d.ts.map +1 -1
- package/dist/lifecycle/publish-npm.js +31 -8
- package/dist/lifecycle/release-ledger.d.ts +31 -0
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +19 -1
- package/dist/lifecycle/status.d.ts +5 -1
- package/dist/lifecycle/status.d.ts.map +1 -1
- package/dist/lifecycle/status.js +10 -5
- package/dist/live-endpoint.d.ts +18 -0
- package/dist/live-endpoint.d.ts.map +1 -1
- package/dist/live-endpoint.js +27 -0
- package/dist/wave-runtime.mjs +192 -192
- package/dist/workspace/ci-run.d.ts +7 -0
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +21 -3
- package/dist/workspace/status.d.ts +3 -1
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +3 -2
- package/dist/workspace/status.schema.json +1 -0
- package/package.json +1 -1
- package/src/cli/component-endpoint.ts +43 -0
- package/src/cli/handlers/fan-out.test.ts +10 -0
- package/src/cli/handlers/fan-out.ts +12 -0
- package/src/cli/handlers/pr-endpoint.test.ts +169 -0
- package/src/cli/handlers/pr.ts +12 -5
- package/src/cli/handlers/promote.ts +16 -2
- package/src/cli/handlers/run.test.ts +2 -1
- package/src/cli/handlers/run.ts +16 -5
- package/src/components/auto-release-infra.test.ts +131 -0
- package/src/components/auto-release.test.ts +40 -1
- package/src/components/auto-release.ts +50 -4
- package/src/components/cli-support.ts +4 -0
- package/src/components/deploy-units.ts +5 -0
- package/src/components/promote.test.ts +39 -0
- package/src/components/promote.ts +38 -14
- package/src/lifecycle/__fixtures__/publish-fakes.ts +6 -1
- package/src/lifecycle/publish-declaration.ts +4 -3
- package/src/lifecycle/publish-npm.ts +33 -8
- package/src/lifecycle/publish-targets.test.ts +36 -3
- package/src/lifecycle/release-ledger.ts +42 -1
- package/src/lifecycle/status.test.ts +19 -0
- package/src/lifecycle/status.ts +14 -6
- package/src/live-endpoint.ts +31 -0
- package/src/workspace/ci-run.test.ts +26 -0
- package/src/workspace/ci-run.ts +20 -3
- package/src/workspace/status.schema.json +1 -0
- package/src/workspace/status.ts +7 -3
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The component plan and apply paths apply the environment's declared
|
|
3
|
+
* endpoint before any capability runs (#4281), the way `--live` reads do
|
|
4
|
+
* (`../live-endpoint.ts`).
|
|
5
|
+
*/
|
|
6
|
+
import { type ChantConfig } from "../config.js";
|
|
7
|
+
import type { CommandContext } from "./registry.js";
|
|
8
|
+
/**
|
|
9
|
+
* Run `run` with the declared endpoint of `environment` (default `--env`,
|
|
10
|
+
* else `local`) applied to every project lexicon's endpoint var. `config` is
|
|
11
|
+
* loaded from the working directory when not given. The project's plugins are
|
|
12
|
+
* loaded only when the environment declares an endpoint and the command did
|
|
13
|
+
* not load them; a project whose plugins can't load then stops, since running
|
|
14
|
+
* on would reach the real cloud.
|
|
15
|
+
*/
|
|
16
|
+
export declare function withComponentEndpoint<T>(ctx: Pick<CommandContext, "args" | "plugins">, run: () => Promise<T>, input?: {
|
|
17
|
+
config?: ChantConfig;
|
|
18
|
+
environment?: string;
|
|
19
|
+
}): Promise<T>;
|
|
20
|
+
//# sourceMappingURL=component-endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-endpoint.d.ts","sourceRoot":"","sources":["../../src/cli/component-endpoint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAI9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,KAAK,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,OAAO,CAAC,CAAC,CAAC,CAiBZ"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The component plan and apply paths apply the environment's declared
|
|
3
|
+
* endpoint before any capability runs (#4281), the way `--live` reads do
|
|
4
|
+
* (`../live-endpoint.ts`).
|
|
5
|
+
*/
|
|
6
|
+
import { resolve } from "node:path";
|
|
7
|
+
import { loadChantConfig } from "../config.js";
|
|
8
|
+
import { withEnvironmentEndpoint } from "../live-endpoint.js";
|
|
9
|
+
import { formatWarning } from "./format.js";
|
|
10
|
+
import { loadPlugins, resolveProjectLexicons } from "./plugins.js";
|
|
11
|
+
/**
|
|
12
|
+
* Run `run` with the declared endpoint of `environment` (default `--env`,
|
|
13
|
+
* else `local`) applied to every project lexicon's endpoint var. `config` is
|
|
14
|
+
* loaded from the working directory when not given. The project's plugins are
|
|
15
|
+
* loaded only when the environment declares an endpoint and the command did
|
|
16
|
+
* not load them; a project whose plugins can't load then stops, since running
|
|
17
|
+
* on would reach the real cloud.
|
|
18
|
+
*/
|
|
19
|
+
export async function withComponentEndpoint(ctx, run, input = {}) {
|
|
20
|
+
const projectPath = resolve(".");
|
|
21
|
+
const config = input.config ?? (await loadChantConfig(projectPath).catch(() => ({ config: {} }))).config;
|
|
22
|
+
const environment = input.environment ?? ctx.args.env ?? "local";
|
|
23
|
+
const lexicons = async () => {
|
|
24
|
+
if (ctx.plugins.length > 0)
|
|
25
|
+
return ctx.plugins;
|
|
26
|
+
try {
|
|
27
|
+
return await loadPlugins(await resolveProjectLexicons(projectPath));
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
throw new Error(`environment "${environment}" declares an endpoint, but the project's lexicons could not load to apply it: ${err instanceof Error ? err.message : String(err)}`);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return withEnvironmentEndpoint(config.environments, environment, lexicons, run, {
|
|
34
|
+
warn: (message) => console.error(formatWarning({ message })),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAIH,OAAO,EAA+C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAIH,OAAO,EAA+C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAgB7F,OAAO,EAAmB,KAAK,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AASnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE;IACJ,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,OAAO,CAAC;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+ErE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E"}
|
|
@@ -58,6 +58,7 @@ import { deriveFanOut, fanOutRegistry } from "../../components/fan-out-support.j
|
|
|
58
58
|
import { EarlierWaveNotAppliedError, runFanOut } from "../../components/fan-out-run.js";
|
|
59
59
|
import { readFanOutAttempt, writeFanOutAttempt } from "../../components/fan-out-record.js";
|
|
60
60
|
import { componentInputDigests, progressThatCarries } from "../../components/fan-out-inputs.js";
|
|
61
|
+
import { appliedDigestOf } from "../../components/auto-release.js";
|
|
61
62
|
import { describeChangedWave, withWaveRecord } from "../../gated-waves.js";
|
|
62
63
|
import { renderFanOutHuman, renderFanOutJson, renderFanOutPlan } from "../../components/fan-out-output.js";
|
|
63
64
|
import { ndjsonProgressSink } from "../../components/run-progress.js";
|
|
@@ -74,6 +75,7 @@ import { reportUninstalledDependencies } from "../dependencies.js";
|
|
|
74
75
|
import { FAN_OUT_GATE_OP } from "../../op/gate-name.js";
|
|
75
76
|
import { resolveBuildRoot } from "./lifecycle.js";
|
|
76
77
|
import { GATED_EXIT_CODE, autoReleaseRun, recordAutoReleasesForRun } from "./run.js";
|
|
78
|
+
import { withComponentEndpoint } from "../component-endpoint.js";
|
|
77
79
|
/**
|
|
78
80
|
* The stack-level change signal, from whichever end the invocation supplied.
|
|
79
81
|
*
|
|
@@ -178,6 +180,11 @@ export async function runComponentsFanOut(ctx) {
|
|
|
178
180
|
return 1;
|
|
179
181
|
const projectPath = resolve(".");
|
|
180
182
|
const { config } = await loadChantConfig(projectPath).catch(() => ({ config: {} }));
|
|
183
|
+
// #4281: every capability the fan-out plans or runs reaches the environment's declared endpoint.
|
|
184
|
+
return withComponentEndpoint(ctx, () => fanOut(ctx, projectPath, config), { config });
|
|
185
|
+
}
|
|
186
|
+
async function fanOut(ctx, projectPath, config) {
|
|
187
|
+
const { args } = ctx;
|
|
181
188
|
const paramsResolution = resolveCliBuildParams(config.buildParams, {
|
|
182
189
|
cli: parseParamFlags(args.param),
|
|
183
190
|
paramsFile: args.paramsFile,
|
|
@@ -471,7 +478,9 @@ export async function runComponentsFanOut(ctx) {
|
|
|
471
478
|
// A gated-wave run can stop at a later wave's gate after earlier waves
|
|
472
479
|
// applied, and those applies are recorded like any other.
|
|
473
480
|
if (result.status !== "gated" || result.completed.length > 0) {
|
|
474
|
-
await recordAutoReleasesForRun(result.results, args.env ?? "local", release.runId, resolveAutoReleaseDisabled(config, args.noReleaseRecord), release.runOrigin
|
|
481
|
+
await recordAutoReleasesForRun(result.results, args.env ?? "local", release.runId, resolveAutoReleaseDisabled(config, args.noReleaseRecord), release.runOrigin, undefined, undefined,
|
|
482
|
+
// #4274: a component that publishes nothing is recorded by its deploy-input digest.
|
|
483
|
+
appliedDigestOf({ components: derived.components, env: args.env ?? "local", projectRoot: projectPath }));
|
|
475
484
|
}
|
|
476
485
|
// A failed root outranks a gate in the status, but a gated-wave run that
|
|
477
486
|
// stopped at a wave's gate still prints how to approve it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/pr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;
|
|
1
|
+
{"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/pr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAyDH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,qDAAqD;AACrD,eAAO,MAAM,aAAa,cAAc,CAAC;AAqSzC,mKAAmK;AACnK,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAyDD,yLAAyL;AACzL,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzE;AA6OD,uKAAuK;AACvK,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAG1E"}
|
package/dist/cli/handlers/pr.js
CHANGED
|
@@ -88,6 +88,8 @@ import { findWorkspaceRoot } from "../../project-root.js";
|
|
|
88
88
|
import { resolveChangedUnits } from "./fan-out.js";
|
|
89
89
|
import { coverByMerges, greenOp } from "../../components/green-cover.js";
|
|
90
90
|
import { GATED_EXIT_CODE, autoReleaseRun, recordAutoReleasesForRun } from "./run.js";
|
|
91
|
+
import { appliedDigestOf } from "../../components/auto-release.js";
|
|
92
|
+
import { withComponentEndpoint } from "../component-endpoint.js";
|
|
91
93
|
import { failedRunExitCode } from "../../components/driver.js";
|
|
92
94
|
/** Where the reports land unless `--output` says. */
|
|
93
95
|
export const PR_REPORT_DIR = ".chant/pr";
|
|
@@ -356,7 +358,7 @@ function openUpload(events, stage, pr, p) {
|
|
|
356
358
|
export function runComponentsPrPlan(ctx) {
|
|
357
359
|
if (refusesEventsWithJson(ctx.args, "the stage's report"))
|
|
358
360
|
return Promise.resolve(1);
|
|
359
|
-
return withStageEvents("pr-plan", ctx, (events) => prPlan(ctx, events));
|
|
361
|
+
return withStageEvents("pr-plan", ctx, (events) => withComponentEndpoint(ctx, () => prPlan(ctx, events)));
|
|
360
362
|
}
|
|
361
363
|
async function prPlan(ctx, stage) {
|
|
362
364
|
if (ctx.args.pr === undefined) {
|
|
@@ -414,7 +416,7 @@ async function prPlan(ctx, stage) {
|
|
|
414
416
|
export function runComponentsPrApply(ctx) {
|
|
415
417
|
if (refusesEventsWithJson(ctx.args, "the stage's report"))
|
|
416
418
|
return Promise.resolve(1);
|
|
417
|
-
return withStageEvents("pr-apply", ctx, (events) => prApply(ctx, events));
|
|
419
|
+
return withStageEvents("pr-apply", ctx, (events) => withComponentEndpoint(ctx, () => prApply(ctx, events)));
|
|
418
420
|
}
|
|
419
421
|
async function prApply(ctx, stage) {
|
|
420
422
|
// #4168: the review-rules security group turns --require-review on, read from the declaration at base.
|
|
@@ -623,7 +625,7 @@ async function prApply(ctx, stage) {
|
|
|
623
625
|
: {}),
|
|
624
626
|
});
|
|
625
627
|
recordAttempt();
|
|
626
|
-
await recordAutoReleasesForRun(applied.run.results, p.env, release.runId, resolveAutoReleaseDisabled(p.config, args.noReleaseRecord), release.runOrigin);
|
|
628
|
+
await recordAutoReleasesForRun(applied.run.results, p.env, release.runId, resolveAutoReleaseDisabled(p.config, args.noReleaseRecord), release.runOrigin, undefined, undefined, prAppliedDigests(p, applied.members));
|
|
627
629
|
const report = prReport({
|
|
628
630
|
...base,
|
|
629
631
|
approval,
|
|
@@ -644,11 +646,15 @@ async function prApply(ctx, stage) {
|
|
|
644
646
|
console.error(formatSuccess(`applied the plan ${report.digest} approved by ${(approval.approvedBy ?? []).join(", ")}`));
|
|
645
647
|
return code;
|
|
646
648
|
}
|
|
649
|
+
/** #4274: a component that published nothing is recorded by the plan digest its approval bound. */
|
|
650
|
+
function prAppliedDigests(p, members) {
|
|
651
|
+
return appliedDigestOf({ components: p.components, env: p.env, projectRoot: resolve("."), members });
|
|
652
|
+
}
|
|
647
653
|
/** chant components pr-record --base <ref> [--pr <n>] [--env <env>] [--gate <name>] [--forge <kind>] [--output <dir>] [--json] [--events-json] [--report-url <url>] */
|
|
648
654
|
export function runComponentsPrRecord(ctx) {
|
|
649
655
|
if (refusesEventsWithJson(ctx.args, "the stage's report"))
|
|
650
656
|
return Promise.resolve(1);
|
|
651
|
-
return withStageEvents("pr-record", ctx, (events) => prRecord(ctx, events));
|
|
657
|
+
return withStageEvents("pr-record", ctx, (events) => withComponentEndpoint(ctx, () => prRecord(ctx, events)));
|
|
652
658
|
}
|
|
653
659
|
/**
|
|
654
660
|
* The record stage (#4168 step 1): what a merge does unless apply on merge
|
|
@@ -1387,7 +1393,7 @@ async function prApplyWaves(ctx, p, at) {
|
|
|
1387
1393
|
outputsSoFar[name] = outputs;
|
|
1388
1394
|
}
|
|
1389
1395
|
setWave({ ...entry, status: applied.status === "applied" ? "applied" : "failed" });
|
|
1390
|
-
await recordAutoReleasesForRun(applied.run.results, p.env, at.release.runId, resolveAutoReleaseDisabled(p.config, args.noReleaseRecord), at.release.runOrigin);
|
|
1396
|
+
await recordAutoReleasesForRun(applied.run.results, p.env, at.release.runId, resolveAutoReleaseDisabled(p.config, args.noReleaseRecord), at.release.runOrigin, undefined, undefined, prAppliedDigests(p, applied.members));
|
|
1391
1397
|
if (applied.status !== "applied") {
|
|
1392
1398
|
return stop(report({ status: "failed" }), failedRunExitCode(applied.run.results), applied.run.status === "gated" ? "gated" : undefined);
|
|
1393
1399
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAgDH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAgDH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuzBlD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E/E;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAsChF;AAsCD,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BhF"}
|
|
@@ -41,6 +41,7 @@ import { approveCommand, describeGateMismatch, gateIsSealed, gitGateLedgerPort }
|
|
|
41
41
|
import { resolveCliBuildParams, parseParamFlags } from "../build-params-cli.js";
|
|
42
42
|
import { formatError, formatWarning, formatSuccess, formatBold, formatInfo } from "../format.js";
|
|
43
43
|
import { GATED_EXIT_CODE } from "./run.js";
|
|
44
|
+
import { withComponentEndpoint } from "../component-endpoint.js";
|
|
44
45
|
import { redeployLine, releaseRollbackLine, rollbackTarget, unsettledComponents } from "../../lifecycle/mixed-environment.js";
|
|
45
46
|
const PROMOTE_USAGE = "chant components promote --to <env> [--from <env>] [--allow-skip] [--release <label|digest>] [--component <name> [--digest <sha256:...>] | --digest <component>=<sha256:...> ...] [--wave-gate <gate>] [--resume <file>] [--dry-run] [--json]";
|
|
46
47
|
const ROLLBACK_USAGE = "chant components rollback <env> (--component <name> [--digest <sha256:...>] | --release <label|digest>) [--dry-run] [--json]";
|
|
@@ -315,7 +316,11 @@ function approvalLine(r) {
|
|
|
315
316
|
* which differ only in how the plan was chosen, whether the publish step runs,
|
|
316
317
|
* and which field names the earlier release on the new record.
|
|
317
318
|
*/
|
|
318
|
-
|
|
319
|
+
/** {@link deployPlanIn}, with `plan.to`'s declared endpoint applied (#4281). */
|
|
320
|
+
function deployPlan(ctx, verb, plan, project, actor, record, under) {
|
|
321
|
+
return withComponentEndpoint(ctx, () => deployPlanIn(ctx, verb, plan, project, actor, record, under), { config: project.config, environment: plan.to });
|
|
322
|
+
}
|
|
323
|
+
async function deployPlanIn(ctx, verb, plan, project, actor, record, under) {
|
|
319
324
|
const { args } = ctx;
|
|
320
325
|
if (refusesBothStreams(args))
|
|
321
326
|
return 1;
|
|
@@ -588,7 +593,7 @@ async function deployPlan(ctx, verb, plan, project, actor, record, under) {
|
|
|
588
593
|
const admission = gateAdmission(result);
|
|
589
594
|
const input = record(item, plan.to, { runId, ...(runOrigin ? { runOrigin } : {}), actor: actor, timestamp, ...(approver ? { approver } : {}), ...(admission ? { admission } : {}) });
|
|
590
595
|
const templates = templateDigests.get(item.component);
|
|
591
|
-
const { record: written } = await appendReleaseRecord(under ? { ...input, ...(templates ? { digest: templates } : {}), releaseDigest: under.release.releaseDigest } : input);
|
|
596
|
+
const { record: written } = await appendReleaseRecord(under ? { ...input, ...(templates ? { digest: templates, digestKind: "templates" } : {}), releaseDigest: under.release.releaseDigest } : input);
|
|
592
597
|
recorded.push(written);
|
|
593
598
|
}
|
|
594
599
|
if (outcome)
|
|
@@ -3,6 +3,7 @@ import { type StepRecord } from "../../op/local-executor.js";
|
|
|
3
3
|
import type { OpRunRecord } from "../../op/runtime.js";
|
|
4
4
|
import type { CommandContext } from "../registry.js";
|
|
5
5
|
import type { RunEvent } from "../../run-event.js";
|
|
6
|
+
import { type AppliedDigest } from "../../components/auto-release.js";
|
|
6
7
|
import { type DriverComponentResult } from "../../components/driver.js";
|
|
7
8
|
import { type ReleaseRecord, type RunOrigin } from "../../lifecycle/release-ledger.js";
|
|
8
9
|
/**
|
|
@@ -112,7 +113,9 @@ export declare function autoReleaseRun(localId: string): {
|
|
|
112
113
|
*/
|
|
113
114
|
export declare function recordAutoReleasesForRun(results: DriverComponentResult[], env: string, runId: string, disabled: boolean, runOrigin?: RunOrigin, releaseDigest?: string,
|
|
114
115
|
/** #4222: the digest of the templates the release records for a component in `env`, for one that publishes no artifact. */
|
|
115
|
-
templatesDigestOf?: (component: string) => string | null
|
|
116
|
+
templatesDigestOf?: (component: string) => string | null,
|
|
117
|
+
/** #4274: what a component that publishes no artifact applied (`appliedDigestOf`), so it is recorded too. */
|
|
118
|
+
appliedDigestOf?: (component: string) => AppliedDigest | null): Promise<ReleaseRecord[]>;
|
|
116
119
|
/**
|
|
117
120
|
* `chant run --components <name|all|a,b,c> [--env <env>]` (#585) — the
|
|
118
121
|
* interpret driver's CLI entrypoint, and since #2116 the only component run
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAkD,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1G,OAAO,KAAK,EAAqB,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAMpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/handlers/run.js
CHANGED
|
@@ -14,6 +14,7 @@ import { loadPlugins } from "../plugins.js";
|
|
|
14
14
|
import { recordGateApproval } from "./operator.js";
|
|
15
15
|
import { formatError, formatWarning, formatSuccess, formatBold, formatInfo } from "../format.js";
|
|
16
16
|
import { parseParamFlags } from "../build-params-cli.js";
|
|
17
|
+
import { withComponentEndpoint } from "../component-endpoint.js";
|
|
17
18
|
import { stewardBesideFor, stewardFormFor, stewardTurnLeaseName, DEFAULT_STEWARD_ENV } from "../../op/steward.js";
|
|
18
19
|
import { holdBesideLease } from "../../op/steward-beside.js";
|
|
19
20
|
import { acquireStewardTurn, STEWARD_TURN_WAIT_MS } from "../../op/operator.js";
|
|
@@ -25,11 +26,11 @@ import { renderDriverHuman, renderDriverJson } from "../../components/driver-out
|
|
|
25
26
|
import { ndjsonProgressSink } from "../../components/run-progress.js";
|
|
26
27
|
import { findStoredRun, readRunEvents } from "../../run-event-store.js";
|
|
27
28
|
import { openCliRunEvents, refusesBothStreams, stdoutLine } from "../run-events.js";
|
|
28
|
-
import { maybeRecordAutoRelease } from "../../components/auto-release.js";
|
|
29
|
+
import { appliedDigestOf, extractRunDigest, maybeRecordAutoRelease } from "../../components/auto-release.js";
|
|
29
30
|
import { maybePersistBuildManifest } from "../../components/manifest-persistence.js";
|
|
30
31
|
import { failedRunExitCode } from "../../components/driver.js";
|
|
31
32
|
import { isComponentList } from "../../components/cli-support.js";
|
|
32
|
-
import { resolveCiRun } from "../../lifecycle/release-ledger.js";
|
|
33
|
+
import { isApplyRecord, resolveCiRun } from "../../lifecycle/release-ledger.js";
|
|
33
34
|
import { gateAdmission, gateApprover } from "../../components/promote.js";
|
|
34
35
|
import { runOpGenerate } from "./run-generate.js";
|
|
35
36
|
/**
|
|
@@ -831,11 +832,15 @@ export function autoReleaseRun(localId) {
|
|
|
831
832
|
*/
|
|
832
833
|
export async function recordAutoReleasesForRun(results, env, runId, disabled, runOrigin = { forge: "local" }, releaseDigest,
|
|
833
834
|
/** #4222: the digest of the templates the release records for a component in `env`, for one that publishes no artifact. */
|
|
834
|
-
templatesDigestOf
|
|
835
|
+
templatesDigestOf,
|
|
836
|
+
/** #4274: what a component that publishes no artifact applied (`appliedDigestOf`), so it is recorded too. */
|
|
837
|
+
appliedDigestOf) {
|
|
835
838
|
const recorded = [];
|
|
836
839
|
for (const componentResult of results) {
|
|
837
840
|
if (!componentResult.ok)
|
|
838
841
|
continue;
|
|
842
|
+
// Hashed only for a component that promoted no artifact, the only one it is recorded for.
|
|
843
|
+
const applied = appliedDigestOf && !disabled && extractRunDigest(componentResult.records) === undefined ? appliedDigestOf(componentResult.component) : null;
|
|
839
844
|
const outcome = await maybeRecordAutoRelease({
|
|
840
845
|
component: componentResult.component,
|
|
841
846
|
env,
|
|
@@ -850,6 +855,7 @@ templatesDigestOf) {
|
|
|
850
855
|
// #4043: the release the deploy was made under, when `--release` named one.
|
|
851
856
|
...(releaseDigest !== undefined ? { releaseDigest } : {}),
|
|
852
857
|
...(releaseDigest !== undefined && templatesDigestOf?.(componentResult.component) ? { templatesDigest: templatesDigestOf(componentResult.component) } : {}),
|
|
858
|
+
...(applied ? { appliedDigest: applied } : {}),
|
|
853
859
|
}, { disabled });
|
|
854
860
|
if (!outcome.recorded && outcome.reason === "error") {
|
|
855
861
|
console.error(formatWarning({
|
|
@@ -909,7 +915,8 @@ templatesDigestOf) {
|
|
|
909
915
|
* rather than loaded a second time.
|
|
910
916
|
*/
|
|
911
917
|
export function runOpComponents(ctx) {
|
|
912
|
-
|
|
918
|
+
// #4281: the components run against the environment's declared endpoint.
|
|
919
|
+
return withRecordingChoice(ctx, () => withComponentEndpoint(ctx, () => runComponentSelection(ctx)));
|
|
913
920
|
}
|
|
914
921
|
/**
|
|
915
922
|
* Run `run` with recording off when `--no-record` or `CHANT_NO_RECORD` asks
|
|
@@ -1169,7 +1176,11 @@ async function runComponentSelection(ctx) {
|
|
|
1169
1176
|
// #3955: a run that records nothing has no release to report either.
|
|
1170
1177
|
const disabled = resolveAutoReleaseDisabled(config, ctx.args.noReleaseRecord) || ledgerRecordingOff();
|
|
1171
1178
|
const templatesDigestOf = underRelease ? await releaseTemplatesDigestOf(underRelease.release, env) : undefined;
|
|
1172
|
-
|
|
1179
|
+
// #4274: a component that publishes nothing is recorded by its deploy-input digest.
|
|
1180
|
+
const appliedOf = result.components ? appliedDigestOf({ components: result.components, env, projectRoot: projectPath }) : undefined;
|
|
1181
|
+
const recorded = await recordAutoReleasesForRun(result.run.results, env, release.runId, disabled, release.runOrigin, underRelease?.releaseDigest, templatesDigestOf, appliedOf);
|
|
1182
|
+
// A generated promote job promotes artifacts; an apply has none to name.
|
|
1183
|
+
const promotable = recorded.filter((r) => !isApplyRecord(r));
|
|
1173
1184
|
if (underRelease)
|
|
1174
1185
|
await warnOnArtifactMismatch(underRelease.release, recorded);
|
|
1175
1186
|
// `--digest-file` (#2602): the releases this run recorded, one
|
|
@@ -1179,7 +1190,7 @@ async function runComponentSelection(ctx) {
|
|
|
1179
1190
|
if (ctx.args.digestFile) {
|
|
1180
1191
|
const digestPath = resolve(ctx.args.digestFile);
|
|
1181
1192
|
mkdirSync(dirname(digestPath), { recursive: true });
|
|
1182
|
-
writeFileSync(digestPath,
|
|
1193
|
+
writeFileSync(digestPath, promotable.map((r) => `${r.component}=${r.digest}\n`).join(""));
|
|
1183
1194
|
}
|
|
1184
1195
|
}
|
|
1185
1196
|
// A step that refused a plan that moved since it was approved exits 3
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type ReleaseAdmission, type ReleaseRecord, type RunOrigin } from "../lifecycle/release-ledger.js";
|
|
2
|
-
import type { DriverStepRecord } from "./driver.js";
|
|
1
|
+
import { type ReleaseAdmission, type ReleaseDigestKind, type ReleaseRecord, type RunOrigin } from "../lifecycle/release-ledger.js";
|
|
2
|
+
import type { DriverComponent, DriverStepRecord } from "./driver.js";
|
|
3
3
|
/**
|
|
4
4
|
* A step output that represents a *promoted* artifact — a publish-family result
|
|
5
5
|
* (publish-image / publish-artifact / load-image-on-host), identified by the
|
|
@@ -29,6 +29,25 @@ export declare function isPromotedArtifact(output: unknown): output is {
|
|
|
29
29
|
* `runComponentDeploy`.
|
|
30
30
|
*/
|
|
31
31
|
export declare function extractRunDigest(records: DriverStepRecord[]): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* What each component of a run applied, for the ones that publish no artifact
|
|
34
|
+
* (#4274). A component with planned members (`pr-apply`'s change set) gets its
|
|
35
|
+
* plan digest: the one member's `planDigest`, or with several the
|
|
36
|
+
* change-set digest over them, the way a set's digest is taken. Any other gets
|
|
37
|
+
* its deploy-input digest from `componentInputDigests`, computed on first use.
|
|
38
|
+
*/
|
|
39
|
+
export declare function appliedDigestOf(input: {
|
|
40
|
+
/** Every component of the project, so a component's upstream digests count. */
|
|
41
|
+
components: DriverComponent[];
|
|
42
|
+
env: string;
|
|
43
|
+
projectRoot: string;
|
|
44
|
+
/** The planned members a pull request applied, when there were any. */
|
|
45
|
+
members?: ReadonlyArray<{
|
|
46
|
+
member: string;
|
|
47
|
+
component: string;
|
|
48
|
+
planDigest: string | null;
|
|
49
|
+
}>;
|
|
50
|
+
}): (component: string) => AppliedDigest | null;
|
|
32
51
|
/** Explicit reasons `maybeRecordAutoRelease` declined to write a record — never a thrown error, since "nothing to record" (or "opted out") is an expected, common outcome. */
|
|
33
52
|
export type AutoReleaseSkipReason = "opted-out" | "run-not-successful" | "no-digest" | "no-actor";
|
|
34
53
|
export type AutoReleaseResult = {
|
|
@@ -73,6 +92,18 @@ export interface AutoReleaseRunInfo {
|
|
|
73
92
|
* when the run published no artifact. Set only with `releaseDigest`.
|
|
74
93
|
*/
|
|
75
94
|
templatesDigest?: string;
|
|
95
|
+
/**
|
|
96
|
+
* What the run applied, for a component that published no artifact (#4274):
|
|
97
|
+
* its plan digest, or its deploy-input digest when nothing planned. Recorded
|
|
98
|
+
* as `digest` with `digestKind`, after an artifact digest and
|
|
99
|
+
* `templatesDigest`, so an infrastructure-only component has a record too.
|
|
100
|
+
*/
|
|
101
|
+
appliedDigest?: AppliedDigest;
|
|
102
|
+
}
|
|
103
|
+
/** A digest naming what a component applied, not an artifact (#4274). */
|
|
104
|
+
export interface AppliedDigest {
|
|
105
|
+
digest: string;
|
|
106
|
+
kind: Extract<ReleaseDigestKind, "plan" | "deploy-input">;
|
|
76
107
|
}
|
|
77
108
|
/** Opt-out + field-override knobs for auto-release recording, threaded from CLI flags/config (#597: "opt-out-able (flag/config), documented default"). */
|
|
78
109
|
export interface AutoReleaseOptions {
|
|
@@ -100,7 +131,8 @@ export interface AutoReleaseOptions {
|
|
|
100
131
|
* - `run.success` false — defensive; callers should not reach here on failure.
|
|
101
132
|
* - no digest found in the run's records — a component with no publish step
|
|
102
133
|
* has nothing to bind a release record to, unless the run was made under a
|
|
103
|
-
* release that records its templates (`templatesDigest`, #4222)
|
|
134
|
+
* release that records its templates (`templatesDigest`, #4222) or the
|
|
135
|
+
* caller names what it applied (`appliedDigest`, #4274).
|
|
104
136
|
* - no resolvable actor — mirrors `runComponentsReleaseRecord`'s hard
|
|
105
137
|
* requirement; an unattributed record defeats the ledger's purpose.
|
|
106
138
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-release.d.ts","sourceRoot":"","sources":["../../src/components/auto-release.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAkD,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-release.d.ts","sourceRoot":"","sources":["../../src/components/auto-release.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
*/
|
|
28
28
|
import { getHeadCommit, pushLifecycle, StaleLifecycleBranchError } from "../lifecycle/git.js";
|
|
29
29
|
import { appendReleaseRecord, InvalidReleaseRecordError } from "../lifecycle/release-ledger.js";
|
|
30
|
+
import { changeSetDigest } from "../change-set.js";
|
|
31
|
+
import { componentInputDigests } from "./fan-out-inputs.js";
|
|
30
32
|
/**
|
|
31
33
|
* A step output that represents a *promoted* artifact — a publish-family result
|
|
32
34
|
* (publish-image / publish-artifact / load-image-on-host), identified by the
|
|
@@ -65,6 +67,26 @@ export function extractRunDigest(records) {
|
|
|
65
67
|
}
|
|
66
68
|
return found;
|
|
67
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* What each component of a run applied, for the ones that publish no artifact
|
|
72
|
+
* (#4274). A component with planned members (`pr-apply`'s change set) gets its
|
|
73
|
+
* plan digest: the one member's `planDigest`, or with several the
|
|
74
|
+
* change-set digest over them, the way a set's digest is taken. Any other gets
|
|
75
|
+
* its deploy-input digest from `componentInputDigests`, computed on first use.
|
|
76
|
+
*/
|
|
77
|
+
export function appliedDigestOf(input) {
|
|
78
|
+
let inputs;
|
|
79
|
+
return (component) => {
|
|
80
|
+
const planned = (input.members ?? []).filter((m) => m.component === component && m.planDigest !== null);
|
|
81
|
+
if (planned.length === 1)
|
|
82
|
+
return { digest: planned[0].planDigest, kind: "plan" };
|
|
83
|
+
if (planned.length > 1)
|
|
84
|
+
return { digest: changeSetDigest(planned), kind: "plan" };
|
|
85
|
+
inputs ?? (inputs = componentInputDigests(input.components, { projectRoot: input.projectRoot, env: input.env }));
|
|
86
|
+
const digest = inputs[component];
|
|
87
|
+
return digest === undefined ? null : { digest, kind: "deploy-input" };
|
|
88
|
+
};
|
|
89
|
+
}
|
|
68
90
|
function resolveActor(override) {
|
|
69
91
|
return override ?? process.env.GITHUB_ACTOR ?? process.env.GITLAB_USER_LOGIN ?? process.env.USER;
|
|
70
92
|
}
|
|
@@ -83,7 +105,8 @@ function resolveActor(override) {
|
|
|
83
105
|
* - `run.success` false — defensive; callers should not reach here on failure.
|
|
84
106
|
* - no digest found in the run's records — a component with no publish step
|
|
85
107
|
* has nothing to bind a release record to, unless the run was made under a
|
|
86
|
-
* release that records its templates (`templatesDigest`, #4222)
|
|
108
|
+
* release that records its templates (`templatesDigest`, #4222) or the
|
|
109
|
+
* caller names what it applied (`appliedDigest`, #4274).
|
|
87
110
|
* - no resolvable actor — mirrors `runComponentsReleaseRecord`'s hard
|
|
88
111
|
* requirement; an unattributed record defeats the ledger's purpose.
|
|
89
112
|
*
|
|
@@ -103,7 +126,10 @@ export async function maybeRecordAutoRelease(run, options = {}) {
|
|
|
103
126
|
if (!run.success) {
|
|
104
127
|
return { recorded: false, reason: "run-not-successful" };
|
|
105
128
|
}
|
|
106
|
-
const
|
|
129
|
+
const artifact = run.digest ?? extractRunDigest(run.records ?? []);
|
|
130
|
+
const templates = artifact === undefined && run.releaseDigest ? run.templatesDigest : undefined;
|
|
131
|
+
const digest = artifact ?? templates ?? run.appliedDigest?.digest;
|
|
132
|
+
const digestKind = artifact !== undefined ? undefined : templates !== undefined ? "templates" : run.appliedDigest?.kind;
|
|
107
133
|
if (!digest) {
|
|
108
134
|
return { recorded: false, reason: "no-digest", detail: `component "${run.component}" published no digest-bearing artifact` };
|
|
109
135
|
}
|
|
@@ -134,6 +160,7 @@ export async function maybeRecordAutoRelease(run, options = {}) {
|
|
|
134
160
|
...(run.profileOverride ? { profileOverride: run.profileOverride } : {}),
|
|
135
161
|
...(run.inputDigest ? { inputDigest: run.inputDigest } : {}),
|
|
136
162
|
...(run.releaseDigest ? { releaseDigest: run.releaseDigest } : {}),
|
|
163
|
+
...(digestKind ? { digestKind } : {}),
|
|
137
164
|
}, { cwd: options.cwd });
|
|
138
165
|
await pushLifecycle({ cwd: options.cwd });
|
|
139
166
|
return { recorded: true, commit, record };
|
|
@@ -272,6 +272,8 @@ export interface RunComponentsResult {
|
|
|
272
272
|
run?: DriverRunResult;
|
|
273
273
|
/** Component names actually dispatched to the driver, in run order. */
|
|
274
274
|
selected: string[];
|
|
275
|
+
/** The components dispatched, as they ran (#4274): what a component's deploy-input digest is taken over. */
|
|
276
|
+
components?: DriverComponent[];
|
|
275
277
|
error?: string;
|
|
276
278
|
/** Set when the run stopped at a `gate` nobody has approved (#2119): the component it stopped at and the pending fact recorded for it. */
|
|
277
279
|
gated?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-support.d.ts","sourceRoot":"","sources":["../../src/components/cli-support.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli-support.d.ts","sourceRoot":"","sources":["../../src/components/cli-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -419,6 +419,7 @@ export async function runComponents(path, selector, options = {}) {
|
|
|
419
419
|
success: run.status === "ok",
|
|
420
420
|
run,
|
|
421
421
|
selected,
|
|
422
|
+
components: resolvedTargets,
|
|
422
423
|
buildParams: options.buildParams,
|
|
423
424
|
...(run.status === "gated" && run.gate
|
|
424
425
|
? {
|
|
@@ -477,6 +478,7 @@ export async function runComponents(path, selector, options = {}) {
|
|
|
477
478
|
success: componentResult.ok,
|
|
478
479
|
run,
|
|
479
480
|
selected,
|
|
481
|
+
components: resolvedTargets,
|
|
480
482
|
buildParams: options.buildParams,
|
|
481
483
|
...(componentResult.status === "gated" && componentResult.gate
|
|
482
484
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-units.d.ts","sourceRoot":"","sources":["../../src/components/deploy-units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,
|
|
1
|
+
{"version":3,"file":"deploy-units.d.ts","sourceRoot":"","sources":["../../src/components/deploy-units.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAoBtD,CAAC;AAEF,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,UAAU,EAAE,CA0B7E"}
|
|
@@ -21,6 +21,11 @@ export const DEPLOY_UNIT_RULES = [
|
|
|
21
21
|
// A Terraform-family root (#3049). Its unit is the root's name in
|
|
22
22
|
// `terraform.roots`, which is also the member a gated wave's digest names.
|
|
23
23
|
{ kind: "terraform-apply", field: "root", lexicon: "terraform" },
|
|
24
|
+
// An ARM template applied into one resource group (#4273). Its unit is the group.
|
|
25
|
+
{ kind: "arm-deploy", field: "resourceGroup", lexicon: "azure" },
|
|
26
|
+
// A Config Connector manifest applied over REST (#4273). Its unit is the
|
|
27
|
+
// step's `stack`, the member its plan names.
|
|
28
|
+
{ kind: "gcp-apply", field: "stack", lexicon: "gcp" },
|
|
24
29
|
];
|
|
25
30
|
/**
|
|
26
31
|
* Every distinct deploy unit a component's phases target, in declaration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/components/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/components/promote.ts"],"names":[],"mappings":"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"}
|