@intentius/chant 0.124.34 → 0.124.35

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.
Files changed (169) hide show
  1. package/dist/cli/handlers/graph.js +2 -2
  2. package/dist/cli/handlers/pr.d.ts.map +1 -1
  3. package/dist/cli/handlers/pr.js +147 -51
  4. package/dist/cli/handlers/promote.d.ts.map +1 -1
  5. package/dist/cli/handlers/promote.js +23 -8
  6. package/dist/cli/handlers/release.d.ts +12 -0
  7. package/dist/cli/handlers/release.d.ts.map +1 -1
  8. package/dist/cli/handlers/release.js +125 -10
  9. package/dist/cli/handlers/run.d.ts +3 -1
  10. package/dist/cli/handlers/run.d.ts.map +1 -1
  11. package/dist/cli/handlers/run.js +12 -2
  12. package/dist/cli/main.d.ts.map +1 -1
  13. package/dist/cli/main.js +19 -1
  14. package/dist/cli/parse-args.d.ts.map +1 -1
  15. package/dist/cli/parse-args.js +17 -0
  16. package/dist/cli/registry.d.ts +14 -0
  17. package/dist/cli/registry.d.ts.map +1 -1
  18. package/dist/components/auto-release.d.ts +8 -1
  19. package/dist/components/auto-release.d.ts.map +1 -1
  20. package/dist/components/auto-release.js +3 -2
  21. package/dist/components/green-cover.d.ts +77 -0
  22. package/dist/components/green-cover.d.ts.map +1 -0
  23. package/dist/components/green-cover.js +153 -0
  24. package/dist/components/pr-pipeline.d.ts +34 -0
  25. package/dist/components/pr-pipeline.d.ts.map +1 -1
  26. package/dist/components/pr-pipeline.js +39 -5
  27. package/dist/components/promote.d.ts +4 -1
  28. package/dist/components/promote.d.ts.map +1 -1
  29. package/dist/components/promote.js +6 -3
  30. package/dist/components/release-promote.d.ts +9 -0
  31. package/dist/components/release-promote.d.ts.map +1 -1
  32. package/dist/components/release-promote.js +15 -0
  33. package/dist/config.d.ts +2 -0
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/deep-observation.d.ts +11 -0
  36. package/dist/deep-observation.d.ts.map +1 -1
  37. package/dist/graph-declared.d.ts +5 -1
  38. package/dist/graph-declared.d.ts.map +1 -1
  39. package/dist/graph-declared.js +7 -2
  40. package/dist/graph-detail.d.ts.map +1 -1
  41. package/dist/graph-detail.js +30 -1
  42. package/dist/graph-ir.d.ts.map +1 -1
  43. package/dist/graph-ir.js +13 -2
  44. package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -1
  45. package/dist/lifecycle/__fixtures__/publish-fakes.js +5 -1
  46. package/dist/lifecycle/compose-refs.d.ts +52 -0
  47. package/dist/lifecycle/compose-refs.d.ts.map +1 -0
  48. package/dist/lifecycle/compose-refs.js +115 -0
  49. package/dist/lifecycle/deep-observe.d.ts.map +1 -1
  50. package/dist/lifecycle/deep-observe.js +3 -2
  51. package/dist/lifecycle/green-apply.d.ts +39 -0
  52. package/dist/lifecycle/green-apply.d.ts.map +1 -0
  53. package/dist/lifecycle/green-apply.js +51 -0
  54. package/dist/lifecycle/publish-declaration.d.ts +4 -0
  55. package/dist/lifecycle/publish-declaration.d.ts.map +1 -1
  56. package/dist/lifecycle/publish-declaration.js +15 -0
  57. package/dist/lifecycle/publish-npm.d.ts +7 -4
  58. package/dist/lifecycle/publish-npm.d.ts.map +1 -1
  59. package/dist/lifecycle/publish-npm.js +60 -13
  60. package/dist/lifecycle/release-compose.d.ts +91 -0
  61. package/dist/lifecycle/release-compose.d.ts.map +1 -0
  62. package/dist/lifecycle/release-compose.js +235 -0
  63. package/dist/lifecycle/release-cut.d.ts +8 -0
  64. package/dist/lifecycle/release-cut.d.ts.map +1 -1
  65. package/dist/lifecycle/release-cut.js +2 -0
  66. package/dist/lifecycle/release-publish.d.ts +2 -0
  67. package/dist/lifecycle/release-publish.d.ts.map +1 -1
  68. package/dist/lifecycle/release-publish.js +2 -1
  69. package/dist/lifecycle/release-store.d.ts +15 -0
  70. package/dist/lifecycle/release-store.d.ts.map +1 -1
  71. package/dist/lifecycle/release-store.js +5 -1
  72. package/dist/wave-runtime.mjs +225 -223
  73. package/dist/workspace/checks/ci-workflow.d.ts.map +1 -1
  74. package/dist/workspace/checks/ci-workflow.js +8 -1
  75. package/dist/workspace/ci-green-cli.d.ts.map +1 -1
  76. package/dist/workspace/ci-green-cli.js +5 -3
  77. package/dist/workspace/ci-green-workflow.d.ts +18 -2
  78. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  79. package/dist/workspace/ci-green-workflow.js +27 -5
  80. package/dist/workspace/ci-green.d.ts +31 -0
  81. package/dist/workspace/ci-green.d.ts.map +1 -1
  82. package/dist/workspace/ci-green.js +78 -4
  83. package/dist/workspace/ci-run.d.ts +6 -0
  84. package/dist/workspace/ci-run.d.ts.map +1 -1
  85. package/dist/workspace/ci-run.js +2 -1
  86. package/dist/workspace/ci-serve.d.ts +94 -13
  87. package/dist/workspace/ci-serve.d.ts.map +1 -1
  88. package/dist/workspace/ci-serve.js +248 -30
  89. package/dist/workspace/ci-workflow.d.ts +4 -4
  90. package/dist/workspace/ci-workflow.d.ts.map +1 -1
  91. package/dist/workspace/ci-workflow.js +2 -2
  92. package/dist/workspace/delivery-metrics.d.ts +3 -1
  93. package/dist/workspace/delivery-metrics.d.ts.map +1 -1
  94. package/dist/workspace/delivery-metrics.js +12 -3
  95. package/dist/workspace/member-commands.d.ts.map +1 -1
  96. package/dist/workspace/member-commands.js +4 -0
  97. package/dist/workspace/nested-graph.d.ts.map +1 -1
  98. package/dist/workspace/nested-graph.js +1 -0
  99. package/dist/workspace/release-candidates.d.ts +28 -0
  100. package/dist/workspace/release-candidates.d.ts.map +1 -1
  101. package/dist/workspace/release-candidates.js +38 -2
  102. package/dist/workspace/release-candidates.schema.json +51 -0
  103. package/dist/workspace/releases.schema.json +30 -0
  104. package/package.json +1 -1
  105. package/src/cli/handlers/graph.ts +2 -2
  106. package/src/cli/handlers/pr-green.test.ts +230 -0
  107. package/src/cli/handlers/pr.ts +148 -66
  108. package/src/cli/handlers/promote.test.ts +34 -0
  109. package/src/cli/handlers/promote.ts +22 -8
  110. package/src/cli/handlers/release-compose.e2e.test.ts +133 -0
  111. package/src/cli/handlers/release.ts +112 -10
  112. package/src/cli/handlers/run.ts +12 -1
  113. package/src/cli/main.ts +19 -1
  114. package/src/cli/parse-args.ts +13 -0
  115. package/src/cli/registry.ts +14 -0
  116. package/src/codegen/release-wiring.test.ts +56 -9
  117. package/src/components/auto-release.test.ts +22 -0
  118. package/src/components/auto-release.ts +9 -2
  119. package/src/components/green-cover.test.ts +170 -0
  120. package/src/components/green-cover.ts +186 -0
  121. package/src/components/pr-pipeline.test.ts +14 -4
  122. package/src/components/pr-pipeline.ts +56 -5
  123. package/src/components/promote.test.ts +7 -0
  124. package/src/components/promote.ts +9 -4
  125. package/src/components/release-promote.test.ts +24 -1
  126. package/src/components/release-promote.ts +15 -0
  127. package/src/deep-observation.ts +8 -0
  128. package/src/graph-declared.test.ts +18 -0
  129. package/src/graph-declared.ts +8 -1
  130. package/src/graph-detail.test.ts +68 -1
  131. package/src/graph-detail.ts +29 -1
  132. package/src/graph-ir.ts +12 -4
  133. package/src/lifecycle/__fixtures__/publish-fakes.ts +5 -1
  134. package/src/lifecycle/compose-refs.ts +125 -0
  135. package/src/lifecycle/deep-observe.test.ts +20 -0
  136. package/src/lifecycle/deep-observe.ts +4 -2
  137. package/src/lifecycle/green-apply.ts +71 -0
  138. package/src/lifecycle/publish-declaration.ts +15 -0
  139. package/src/lifecycle/publish-npm.ts +55 -13
  140. package/src/lifecycle/publish-targets.test.ts +45 -0
  141. package/src/lifecycle/release-compose.test.ts +125 -0
  142. package/src/lifecycle/release-compose.ts +312 -0
  143. package/src/lifecycle/release-cut.ts +6 -0
  144. package/src/lifecycle/release-publish.ts +4 -1
  145. package/src/lifecycle/release-store.ts +16 -1
  146. package/src/workspace/checks/ci-workflow.test.ts +12 -2
  147. package/src/workspace/checks/ci-workflow.ts +7 -1
  148. package/src/workspace/ci-green-cli.ts +5 -3
  149. package/src/workspace/ci-green-workflow.test.ts +52 -0
  150. package/src/workspace/ci-green-workflow.ts +34 -5
  151. package/src/workspace/ci-green.test.ts +33 -0
  152. package/src/workspace/ci-green.ts +85 -4
  153. package/src/workspace/ci-run.test.ts +18 -13
  154. package/src/workspace/ci-run.ts +8 -1
  155. package/src/workspace/ci-serve-land.e2e.test.ts +138 -0
  156. package/src/workspace/ci-serve-land.test.ts +176 -0
  157. package/src/workspace/ci-serve.test.ts +77 -43
  158. package/src/workspace/ci-serve.ts +268 -34
  159. package/src/workspace/ci-workflow.ts +4 -4
  160. package/src/workspace/delivery-metrics.ts +12 -3
  161. package/src/workspace/graph-contract.test.ts +3 -2
  162. package/src/workspace/member-commands.test.ts +11 -4
  163. package/src/workspace/member-commands.ts +3 -0
  164. package/src/workspace/nested-graph.test.ts +4 -0
  165. package/src/workspace/nested-graph.ts +1 -0
  166. package/src/workspace/release-candidates.schema.json +51 -0
  167. package/src/workspace/release-candidates.test.ts +30 -3
  168. package/src/workspace/release-candidates.ts +54 -2
  169. package/src/workspace/releases.schema.json +30 -0
@@ -20,6 +20,11 @@
20
20
  * release candidates [--env <env>] [--json]
21
21
  * the green commits of trunk a release can be cut from, each with what it
22
22
  * would ship, and what each environment runs (#4168 4.2)
23
+ * release compose <name> [--base <label|sha>] (--pr <n> | --work <id>)... [--yes] [--json]
24
+ * pick chosen trunk changes onto a base, each with a Chant-Composed-From
25
+ * trailer, on the pushed branch chant/compose/<name> (#4168 4.3); a dry
26
+ * run unless --yes. `release cut` takes a green commit of that branch,
27
+ * and `--channel <tag>` makes its publish move that tag, not latest
23
28
  * release list [--json]
24
29
  * every release of this member with its targets, its cuts and where it runs;
25
30
  * `--json` prints the read contract's `releases` document
@@ -38,7 +43,7 @@ import { existsSync } from "node:fs";
38
43
  import { resolve } from "node:path";
39
44
  import { formatBold, formatError, formatSuccess, formatWarning } from "../format.js";
40
45
  import { parseParamFlags } from "../build-params-cli.js";
41
- const USAGE = "chant release cut [<label>] [--at <sha>] [--yes] [--build <command>] [--param <k=v>] [--params-file <file>] [--src <dir>] [-o <file>] [--lexicon <name>] [--actor <name>] [--sign [<key file>]] [--json] | release publish <label|digest> [--yes] [--allow-unsigned] [--require-provenance] [--json] | release verify <label|digest> [--json] | release candidates [--env <env>] [--json] | release list [--json] | release export <label|digest> --env <env> [-o <dir>] [--json]";
46
+ const USAGE = "chant release cut [<label>] [--at <sha>] [--yes] [--build <command>] [--param <k=v>] [--params-file <file>] [--src <dir>] [-o <file>] [--lexicon <name>] [--actor <name>] [--sign [<key file>]] [--channel <tag>] [--json] | release publish <label|digest> [--yes] [--allow-unsigned] [--require-provenance] [--json] | release verify <label|digest> [--json] | release candidates [--env <env>] [--json] | release compose <name> [--base <label|sha>] (--pr <n> | --work <id>)... [--yes] [--json] | release list [--json] | release export <label|digest> --env <env> [-o <dir>] [--json]";
42
47
  /** The build inputs `release cut` and `release compile` share. */
43
48
  function compileInputs(ctx, params, projectDir = resolve("."), releaseLabel) {
44
49
  const { args } = ctx;
@@ -135,6 +140,7 @@ export async function runReleaseCut(ctx) {
135
140
  let trunk = null;
136
141
  let signers = [];
137
142
  let member = null;
143
+ let composed;
138
144
  if (args.at !== undefined && !top) {
139
145
  return fail("not-a-git-repository", "--at names a commit, and this directory is not in a git repository");
140
146
  }
@@ -150,7 +156,21 @@ export async function runReleaseCut(ctx) {
150
156
  const { releaseRuleFrom } = await import("../../workspace/identity.js");
151
157
  const source = scopeSource(cwd);
152
158
  trunk = ws.resolveTrunk(top, source.declaration?.ci?.green?.branch ?? null);
153
- ws.checkOnTrunk(top, commit, trunk);
159
+ try {
160
+ ws.checkOnTrunk(top, commit, trunk);
161
+ }
162
+ catch (err) {
163
+ // #4168 4.3: a commit of a pushed compose branch is cut too, and the cut records what it carries.
164
+ if (!(err instanceof ws.WorkstationCheckError) || err.code !== "release-commit-not-on-trunk")
165
+ throw err;
166
+ const refs = await import("../../lifecycle/compose-refs.js");
167
+ const on = refs.composeBranchContaining(top, commit, trunk.remote);
168
+ const trunkRef = `refs/remotes/${trunk.remote}/${trunk.branch}`;
169
+ const composition = on ? refs.compositionOnTrunk(top, commit, trunkRef, on.branch) : null;
170
+ if (!on || !composition)
171
+ throw err;
172
+ composed = { branch: on.branch, base: composition.base, sources: composition.sources };
173
+ }
154
174
  signers = releaseRuleFrom(source).rule.signers.signers;
155
175
  const { resolveMemberLedger } = await import("../../lifecycle/member-ledger.js");
156
176
  const ledger = await resolveMemberLedger(cwd);
@@ -191,7 +211,15 @@ export async function runReleaseCut(ctx) {
191
211
  checkout = at.checkoutCommit(top, cwd, commit);
192
212
  const cutCwd = checkout?.memberDir ?? cwd;
193
213
  const compiler = spawnTargetCompiler(compileInputs(ctx, params, cutCwd, label));
194
- const request = { cwd: cutCwd, compiler, label, actor, ...(args.sign !== undefined ? { sign: args.sign } : {}) };
214
+ const request = {
215
+ cwd: cutCwd,
216
+ compiler,
217
+ label,
218
+ actor,
219
+ ...(args.sign !== undefined ? { sign: args.sign } : {}),
220
+ ...(composed ? { composed } : {}),
221
+ ...(args.channel ? { channel: args.channel } : {}),
222
+ };
195
223
  if (dryRun) {
196
224
  const plan = await planRelease(request);
197
225
  // Under the release gate, a key the signers file at base lists for someone else is refused now, not after the build.
@@ -210,6 +238,8 @@ export async function runReleaseCut(ctx) {
210
238
  actorSource: who.source,
211
239
  run: ci ? { runId: ci.runId, runOrigin: ci.runOrigin } : { runId: null, runOrigin: { forge: "local" } },
212
240
  trunk,
241
+ composed: composed ?? null,
242
+ channel: args.channel ?? null,
213
243
  at: args.at !== undefined ? { ref: args.at, commit } : null,
214
244
  sign: args.sign !== undefined ? { key: publicKey !== null ? publicKey.split(" ")[0] : null, readable: publicKey !== null } : null,
215
245
  tag: tag ? { name: tag.name, exists: tag.state === "present" } : null,
@@ -221,7 +251,14 @@ export async function runReleaseCut(ctx) {
221
251
  return 0;
222
252
  }
223
253
  const name = plan.label ? formatBold(plan.label) : "an unlabelled release";
224
- console.log(`Dry run: cut ${name} from commit ${plan.commit.slice(0, 12)}${trunk ? ` (on ${trunk.remote}/${trunk.branch}, green)` : ""}`);
254
+ const where = composed
255
+ ? ` (on ${trunk.remote}/${composed.branch}, composed on ${composed.base.slice(0, 12)} from ${composed.sources.length} trunk commit(s), green)`
256
+ : trunk
257
+ ? ` (on ${trunk.remote}/${trunk.branch}, green)`
258
+ : "";
259
+ console.log(`Dry run: cut ${name} from commit ${plan.commit.slice(0, 12)}${where}`);
260
+ if (args.channel)
261
+ console.log(` channel ${args.channel}: a publish moves ${args.channel}, not latest`);
225
262
  if (plan.alreadyCut)
226
263
  console.log(` already cut as ${plan.alreadyCut}: the cut would record nothing new`);
227
264
  console.log(` actor ${actor} (from ${describeActorSource(who.source)})`);
@@ -282,7 +319,7 @@ export async function runReleaseCut(ctx) {
282
319
  noComponents: result.release.targets.every((t) => t.templates.every((tpl) => tpl.component === null)) && result.release.artifactDigests.length === 0,
283
320
  });
284
321
  if (args.json) {
285
- console.log(JSON.stringify({ dryRun: false, release: result.release, label: result.label, cut: result.cut, stored: result.stored, reused: result.reused, actor, actorSource: who.source, tag: tagged, next }, null, 2));
322
+ console.log(JSON.stringify({ dryRun: false, release: result.release, label: result.label, cut: result.cut, stored: result.stored, reused: result.reused, actor, actorSource: who.source, tag: tagged, composed: composed ?? null, channel: args.channel ?? null, next }, null, 2));
286
323
  }
287
324
  else {
288
325
  const name = result.label ? formatBold(result.label) : "unlabelled release";
@@ -290,7 +327,9 @@ export async function runReleaseCut(ctx) {
290
327
  console.error(formatSuccess(`Cut ${name}: ${result.release.releaseDigest}`));
291
328
  else
292
329
  console.error(formatSuccess(`Already cut${result.label ? ` as ${formatBold(result.label)}` : ""}: ${result.release.releaseDigest}`));
293
- console.error(` commit ${result.release.commit}`);
330
+ console.error(` commit ${result.release.commit}${composed ? `, composed on ${composed.base.slice(0, 12)} on ${composed.branch}` : ""}`);
331
+ if (args.channel)
332
+ console.error(` channel ${args.channel}`);
294
333
  if (result.cut)
295
334
  console.error(` ${result.cut.signature ? `signed by ${result.cut.actor}` : `not signed; actor ${result.cut.actor}`}, run ${result.cut.runId}`);
296
335
  console.error(` artifacts ${result.release.artifactDigests.length}, targets ${result.release.targets.map((t) => `${t.env} (${t.templates.length} template${t.templates.length === 1 ? "" : "s"})`).join(", ")}`);
@@ -377,7 +416,8 @@ export async function runReleasePublish(ctx) {
377
416
  console.error(formatWarning({ message: signatureWarning }));
378
417
  if (warning)
379
418
  console.error(formatWarning({ message: warning }));
380
- const pctx = publishContext(prepared, { cwd, log: (line) => (args.json ? undefined : console.error(` ${line}`)) });
419
+ // #4168 4.3: a release cut with --channel moves that tag, not latest.
420
+ const pctx = publishContext(prepared, { cwd, tag: prepared.channel, log: (line) => (args.json ? undefined : console.error(` ${line}`)) });
381
421
  // Every target is planned before any publishes, so a missing file or credential stops the publish with nothing sent.
382
422
  const progress = publishProgress(await readPublishRecords(release.releaseDigest, { cwd }).catch(() => []));
383
423
  const planned = [];
@@ -537,9 +577,15 @@ export async function runReleaseCandidates(ctx) {
537
577
  for (const c of doc.candidates) {
538
578
  const tags = [...(c.newFor.length > 0 ? [`new for ${c.newFor.join(", ")}`] : []), ...(c.cut.length > 0 ? [`cut as ${c.cut.join(", ")}`] : [])];
539
579
  console.log(`${c.commit.slice(0, 12)} ${c.subject}${tags.length > 0 ? ` (${tags.join("; ")})` : ""}`);
540
- for (const ch of c.changes) {
541
- const links = [...(ch.pr !== null ? [`#${ch.pr}`] : []), ...ch.work.map((w) => `work:${w}`)];
542
- console.log(` ${ch.commit.slice(0, 12)} ${ch.subject}${links.length > 0 ? ` [${links.join(", ")}]` : ""}`);
580
+ // #4168 4.4: by work item, then pull request, then commit.
581
+ const subjectOf = new Map(c.changes.map((ch) => [ch.commit, ch.subject]));
582
+ for (const g of c.groups) {
583
+ console.log(` ${g.work !== null ? `work:${g.work}` : "no work item"}`);
584
+ for (const p of g.pullRequests) {
585
+ console.log(` ${p.pr !== null ? `#${p.pr}` : "no pull request"}`);
586
+ for (const sha of p.commits)
587
+ console.log(` ${sha.slice(0, 12)} ${subjectOf.get(sha) ?? ""}`);
588
+ }
543
589
  }
544
590
  for (const f of c.flags)
545
591
  console.log(` flag ${f.id} (${f.member} ${f.param}) changed`);
@@ -659,3 +705,72 @@ export async function runReleaseUnknown(ctx) {
659
705
  console.error(formatError({ message: `Unknown release subcommand: ${ctx.args.path}`, hint: USAGE }));
660
706
  return 1;
661
707
  }
708
+ /**
709
+ * `release compose <name> [--base <label|sha>] (--pr <n> | --work <id>)... [--yes] [--json]`
710
+ * (#4168 4.3): pick the chosen trunk changes onto a base, on
711
+ * `chant/compose/<name>` (../../lifecycle/release-compose.ts). A dry run
712
+ * unless `--yes`, which moves the branch and pushes it so CI builds it.
713
+ */
714
+ export async function runReleaseCompose(ctx) {
715
+ const { args } = ctx;
716
+ const name = args.extraPositional;
717
+ if (!name) {
718
+ console.error(formatError({ message: "release compose needs a name for the compose branch", hint: USAGE }));
719
+ return 1;
720
+ }
721
+ const cwd = resolve(".");
722
+ const { composeRelease, ComposeError } = await import("../../lifecycle/release-compose.js");
723
+ const ws = await import("../../lifecycle/release-workstation.js");
724
+ const { scopeSource } = await import("../../workspace/write-scope.js");
725
+ const top = (() => {
726
+ try {
727
+ return execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim();
728
+ }
729
+ catch {
730
+ return null;
731
+ }
732
+ })();
733
+ if (!top) {
734
+ console.error(formatError({ message: "a compose picks commits, and this directory is not in a git repository [not-a-git-repository]" }));
735
+ return 1;
736
+ }
737
+ const trunk = ws.resolveTrunk(top, scopeSource(cwd).declaration?.ci?.green?.branch ?? null);
738
+ try {
739
+ const r = await composeRelease({
740
+ cwd,
741
+ name,
742
+ ...(args.base !== undefined ? { base: args.base } : {}),
743
+ prs: args.prs ?? [],
744
+ works: args.works ?? [],
745
+ yes: args.yes === true,
746
+ trunk,
747
+ });
748
+ if (args.json) {
749
+ console.log(JSON.stringify({ dryRun: args.yes !== true, ...r, next: r.written || r.pushed ? [`chant release cut <label> --at ${r.tip}`] : [sameWithYes(process.argv.slice(2))] }, null, 2));
750
+ return 0;
751
+ }
752
+ const verb = args.yes === true ? "Composed" : "Dry run: would compose";
753
+ console.log(`${verb} ${formatBold(r.branch)} on ${r.base.slice(0, 12)}${r.from ? `, after ${r.from.slice(0, 12)}` : ""}`);
754
+ for (const s of r.picked)
755
+ console.log(` pick ${s.commit.slice(0, 12)} ${s.subject} [${s.chosenBy.join(", ")}]`);
756
+ for (const s of r.already)
757
+ console.log(` carried already ${s.commit.slice(0, 12)} ${s.subject}`);
758
+ if (r.picked.length === 0)
759
+ console.log(" nothing new to pick");
760
+ console.log(` tip ${r.tip.slice(0, 12)}${r.pushed ? `, pushed to ${trunk.remote}` : ""}`);
761
+ if (args.yes !== true)
762
+ console.error(`Dry run: no branch was moved or pushed. Run again with --yes: ${sameWithYes(process.argv.slice(2))}`);
763
+ else
764
+ console.error(`Next: once CI tags ${r.tip.slice(0, 12)} green, cut it: chant release cut <label> --at ${r.tip} --channel <channel>`);
765
+ return 0;
766
+ }
767
+ catch (err) {
768
+ if (err instanceof ComposeError) {
769
+ if (args.json)
770
+ console.log(JSON.stringify({ error: { code: err.code, message: err.message, ...(err.conflict ? { conflict: err.conflict } : {}) } }, null, 2));
771
+ console.error(formatError({ message: `${err.message} [${err.code}]`, ...(err.fix ? { hint: err.fix } : {}) }));
772
+ return 1;
773
+ }
774
+ throw err;
775
+ }
776
+ }
@@ -110,7 +110,9 @@ export declare function autoReleaseRun(localId: string): {
110
110
  *
111
111
  * Returns the records it wrote, for `--digest-file` (#2602).
112
112
  */
113
- export declare function recordAutoReleasesForRun(results: DriverComponentResult[], env: string, runId: string, disabled: boolean, runOrigin?: RunOrigin, releaseDigest?: string): Promise<ReleaseRecord[]>;
113
+ export declare function recordAutoReleasesForRun(results: DriverComponentResult[], env: string, runId: string, disabled: boolean, runOrigin?: RunOrigin, releaseDigest?: string,
114
+ /** #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): Promise<ReleaseRecord[]>;
114
116
  /**
115
117
  * `chant run --components <name|all|a,b,c> [--env <env>]` (#585) — the
116
118
  * 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":"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"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/run.ts"],"names":[],"mappings":"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"}
@@ -829,7 +829,9 @@ export function autoReleaseRun(localId) {
829
829
  *
830
830
  * Returns the records it wrote, for `--digest-file` (#2602).
831
831
  */
832
- export async function recordAutoReleasesForRun(results, env, runId, disabled, runOrigin = { forge: "local" }, releaseDigest) {
832
+ export async function recordAutoReleasesForRun(results, env, runId, disabled, runOrigin = { forge: "local" }, releaseDigest,
833
+ /** #4222: the digest of the templates the release records for a component in `env`, for one that publishes no artifact. */
834
+ templatesDigestOf) {
833
835
  const recorded = [];
834
836
  for (const componentResult of results) {
835
837
  if (!componentResult.ok)
@@ -847,6 +849,7 @@ export async function recordAutoReleasesForRun(results, env, runId, disabled, ru
847
849
  ...(gateAdmission(componentResult) ? { admission: gateAdmission(componentResult) } : {}),
848
850
  // #4043: the release the deploy was made under, when `--release` named one.
849
851
  ...(releaseDigest !== undefined ? { releaseDigest } : {}),
852
+ ...(releaseDigest !== undefined && templatesDigestOf?.(componentResult.component) ? { templatesDigest: templatesDigestOf(componentResult.component) } : {}),
850
853
  }, { disabled });
851
854
  if (!outcome.recorded && outcome.reason === "error") {
852
855
  console.error(formatWarning({
@@ -973,6 +976,12 @@ export async function resolveRunRelease(ref, env, cwd) {
973
976
  return { releaseDigest: found.release.releaseDigest, label: found.label, release: found.release };
974
977
  }
975
978
  /** A rebuilt image need not digest as the release's own did; say so, as promote does. Never fails the run. */
979
+ /** #4222: a component's templates digest in the release's target for `env`, or null when the release has no such target. */
980
+ async function releaseTemplatesDigestOf(release, env) {
981
+ const { targetFor, releaseTemplatesDigest } = await import("../../components/release-promote.js");
982
+ const found = targetFor(release, env);
983
+ return (component) => ("target" in found ? releaseTemplatesDigest(found.target, component) : null);
984
+ }
976
985
  async function warnOnArtifactMismatch(release, recorded) {
977
986
  try {
978
987
  const { releaseArtifactMismatches } = await import("../../components/release-promote.js");
@@ -1159,7 +1168,8 @@ async function runComponentSelection(ctx) {
1159
1168
  if (result.success && result.run) {
1160
1169
  // #3955: a run that records nothing has no release to report either.
1161
1170
  const disabled = resolveAutoReleaseDisabled(config, ctx.args.noReleaseRecord) || ledgerRecordingOff();
1162
- const recorded = await recordAutoReleasesForRun(result.run.results, env, release.runId, disabled, release.runOrigin, underRelease?.releaseDigest);
1171
+ const templatesDigestOf = underRelease ? await releaseTemplatesDigestOf(underRelease.release, env) : undefined;
1172
+ const recorded = await recordAutoReleasesForRun(result.run.results, env, release.runId, disabled, release.runOrigin, underRelease?.releaseDigest, templatesDigestOf);
1163
1173
  if (underRelease)
1164
1174
  await warnOnArtifactMismatch(underRelease.release, recorded);
1165
1175
  // `--digest-file` (#2602): the releases this run recorded, one
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkB,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAa9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAs0CzC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzE;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,EA8MvC,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkB,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAa9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAs1CzC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzE;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,EAgNvC,CAAC"}
package/dist/cli/main.js CHANGED
@@ -355,7 +355,7 @@ CI:
355
355
  Releases:
356
356
  release cut [<label>] [--at <sha>] [--yes] [--build <command>] [--param <k=v>]
357
357
  [--params-file <file>] [--src <dir>] [-o <file>] [--lexicon <name>]
358
- [--actor <name>] [--sign [<key file>]] [--json]
358
+ [--actor <name>] [--sign [<key file>]] [--channel <tag>] [--json]
359
359
  A dry run of a cut of this member from HEAD, which
360
360
  must be clean, on trunk and pushed, and carry a
361
361
  ci/green tag: compile every environment in the
@@ -376,6 +376,18 @@ Releases:
376
376
  trunk from a temporary worktree instead of HEAD, so
377
377
  the checkout need not be clean. The label reaches
378
378
  every compile and build as CHANT_RELEASE_LABEL.
379
+ A green commit of a pushed chant/compose/<name>
380
+ branch is cut too, recording its base and sources.
381
+ --channel <tag> records the tag a publish moves in
382
+ place of latest.
383
+ release compose <name> [--base <label|sha>] (--pr <n> | --work <id>)...
384
+ [--yes] [--json]
385
+ Cherry-pick the chosen trunk changes, in trunk order,
386
+ onto the base, each with a Chant-Composed-From
387
+ trailer, on chant/compose/<name>. Appends to a branch
388
+ that exists; stops on a conflict, naming the change
389
+ and files, and writes nothing. A dry run unless --yes,
390
+ which moves the branch and pushes it.
379
391
  release candidates [--env <env>] [--json]
380
392
  The green commits of trunk a release can be cut from,
381
393
  newest first, each with the commits, work items, pull
@@ -997,6 +1009,10 @@ Component release ledger + status:
997
1009
  planned after the one before applied, a moved
998
1010
  wave waiting at <name>-wave-<k>, with --wave <k>
999
1011
  for one wave per CI job;
1012
+ --green: apply the green commit at HEAD, measured
1013
+ from the one last applied to --env, under the
1014
+ approved plans of the merges since, else at gate
1015
+ op green-<sha>;
1000
1016
  --events-json, both commands: the run-event
1001
1017
  stream on stdout; --report-url <s3 or file URL>,
1002
1018
  both commands: copy the report, the change set
@@ -1450,6 +1466,8 @@ export const commandRegistry = [
1450
1466
  // #4049: check a release's signature offline.
1451
1467
  { name: "release verify", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/release.js")).runReleaseVerify(ctx) },
1452
1468
  { name: "release workflow", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/release-workflow.js")).runReleaseWorkflow(ctx) },
1469
+ // #4168 4.3: mode (b), chosen changes composed onto a base on chant/compose/<name>.
1470
+ { name: "release compose", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/release.js")).runReleaseCompose(ctx) },
1453
1471
  { name: "release candidates", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/release.js")).runReleaseCandidates(ctx) },
1454
1472
  { name: "release list", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/release.js")).runReleaseList(ctx) },
1455
1473
  { name: "release export", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/release.js")).runReleaseExport(ctx) },
@@ -1 +1 @@
1
- {"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/cli/parse-args.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0F7C;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA41BpD"}
1
+ {"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/cli/parse-args.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0F7C;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAy2BpD"}
@@ -482,6 +482,14 @@ export function parseArgs(args) {
482
482
  if (!Number.isInteger(pr) || pr < 1)
483
483
  throw new Error(`--pr needs a pull or merge request number: got "${raw ?? ""}"`);
484
484
  result.pr = pr;
485
+ // `chant release compose --pr <n>...` (#4168 4.3) reads every one.
486
+ (result.prs ?? (result.prs = [])).push(pr);
487
+ }
488
+ else if (arg === "--channel") {
489
+ // `chant release cut --channel <tag>` (#4168 4.3): the tag a publish moves in place of latest.
490
+ result.channel = args[++i];
491
+ if (!result.channel || !/^[A-Za-z][A-Za-z0-9._-]*$/.test(result.channel))
492
+ throw new Error(`--channel needs a channel name, such as next or hotfix: got "${result.channel ?? ""}"`);
485
493
  }
486
494
  else if (arg === "--forge") {
487
495
  result.forge = args[++i];
@@ -519,6 +527,10 @@ export function parseArgs(args) {
519
527
  else if (arg === "--pr-loop") {
520
528
  result.prLoop = true;
521
529
  }
530
+ else if (arg === "--green") {
531
+ // `chant components pr-apply --green` (#4168 step 9): apply the green commit at HEAD.
532
+ result.green = true;
533
+ }
522
534
  else if (arg === "--apply-on-merge") {
523
535
  // `chant build --pr-loop --apply-on-merge` and `chant ci serve --apply-on-merge` (#4168): opt into applying on merge.
524
536
  result.applyOnMerge = true;
@@ -534,6 +546,10 @@ export function parseArgs(args) {
534
546
  throw new Error("--build-command needs a shell line: --build-command '<line>'");
535
547
  result.ciBuildCommand = line;
536
548
  }
549
+ else if (arg === "--land") {
550
+ // `chant ci serve --land` (#4168 4.4): fast-forward the target to a chant/land/<name> branch once its pre-merge phases pass.
551
+ result.ciLand = true;
552
+ }
537
553
  else if (arg === "--pr-build-command") {
538
554
  const line = args[++i];
539
555
  if (line === undefined || line === "")
@@ -1101,6 +1117,7 @@ export function parseArgs(args) {
1101
1117
  if (!value || value.startsWith("-"))
1102
1118
  throw new Error("--work needs a work item id: --work <id>");
1103
1119
  result.work = value;
1120
+ (result.works ?? (result.works = [])).push(value);
1104
1121
  }
1105
1122
  else if (arg === "--holder" || arg === "--ttl" || arg === "--token" || arg === "--outcome") {
1106
1123
  // `chant workspace work claim|renew|release <id>` (#2732)
@@ -301,6 +301,10 @@ export interface ParsedArgs {
301
301
  * pr-apply finds it from the commit through `--forge` when omitted.
302
302
  */
303
303
  pr?: number;
304
+ /** Every `--pr <n>`, in order: `chant release compose` (#4168 4.3) takes several. */
305
+ prs?: number[];
306
+ /** `chant release cut --channel <tag>` (#4168 4.3): the tag a publish of the release moves in place of `latest`. */
307
+ channel?: string;
304
308
  /**
305
309
  * `chant components pr-plan|pr-apply --forge github|gitlab|forgejo` (#3183)
306
310
  * — post the note and the commit status on this forge, with the client
@@ -334,10 +338,18 @@ export interface ParsedArgs {
334
338
  * #4168, in place of recording it. Opt-in: a merge deploys nothing without it.
335
339
  */
336
340
  applyOnMerge?: boolean;
341
+ /**
342
+ * `chant components pr-apply --green` (#4168 step 9): apply the green commit
343
+ * at HEAD, measured from the one last applied to the environment, under the
344
+ * approved plans of the merges between or a gate of its own.
345
+ */
346
+ green?: boolean;
337
347
  /** `chant build --pr-loop --pr-build` (#4088) — build and lint before pr-plan and pr-apply. */
338
348
  prBuild?: boolean;
339
349
  /** `chant ci serve --build-command <line>` (#4169) — the line that builds a commit a `ci/build/<sha>` tag asks for, in a worktree of it. */
340
350
  ciBuildCommand?: string;
351
+ /** `chant ci serve --land` (#4168 4.4) — fast-forward the target branch to each pushed `chant/land/<name>` branch whose `ci.green.preMerge` phases pass on it. */
352
+ ciLand?: boolean;
341
353
  /** `chant build --pr-loop --pr-build-command <line>` (#4088) — the build line to run in place of `chant build --env <env>`. */
342
354
  prBuildCommand?: string;
343
355
  /**
@@ -699,6 +711,8 @@ export interface ParsedArgs {
699
711
  holder?: string;
700
712
  /** `chant run <op> --work <id>` (#2748): the work item an Op with a work lease runs under. `chant workspace check --changes --work <id>` (#2773): the work item in hand. */
701
713
  work?: string;
714
+ /** Every `--work <id>`, in order: `chant release compose` (#4168 4.3) takes several. */
715
+ works?: string[];
702
716
  /** `chant workspace work claim|renew <id> --ttl <seconds|duration>` (#2732): how long the lease lasts unless renewed. */
703
717
  ttl?: string;
704
718
  /** `chant workspace work renew|release <id> --token <token>` (#2732): the fencing token the caller holds. */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,12 @@ export interface AutoReleaseRunInfo {
67
67
  inputDigest?: string;
68
68
  /** The release the deploy was made under (#4043), recorded as the release record's `releaseDigest`. Set only when the caller named a release; never inferred. */
69
69
  releaseDigest?: string;
70
+ /**
71
+ * The digest of the templates the release records for this component in
72
+ * this environment (#4222, `releaseTemplatesDigest`), recorded as `digest`
73
+ * when the run published no artifact. Set only with `releaseDigest`.
74
+ */
75
+ templatesDigest?: string;
70
76
  }
71
77
  /** Opt-out + field-override knobs for auto-release recording, threaded from CLI flags/config (#597: "opt-out-able (flag/config), documented default"). */
72
78
  export interface AutoReleaseOptions {
@@ -93,7 +99,8 @@ export interface AutoReleaseOptions {
93
99
  * - `options.disabled` — the opt-out flag/config was set.
94
100
  * - `run.success` false — defensive; callers should not reach here on failure.
95
101
  * - no digest found in the run's records — a component with no publish step
96
- * has nothing to bind a release record to.
102
+ * has nothing to bind a release record to, unless the run was made under a
103
+ * release that records its templates (`templatesDigest`, #4222).
97
104
  * - no resolvable actor — mirrors `runComponentsReleaseRecord`'s hard
98
105
  * requirement; an unattributed record defeats the ledger's purpose.
99
106
  *
@@ -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;AACxJ,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAE9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,GAAG,SAAS,CAShF;AAED,8KAA8K;AAC9K,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,oBAAoB,GACpB,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GACzD;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,uIAAuI;IACvI,OAAO,EAAE,OAAO,CAAC;IACjB,2LAA2L;IAC3L,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4JAA4J;IAC5J,KAAK,EAAE,MAAM,CAAC;IACd,yLAAyL;IACzL,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qMAAqM;IACrM,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,sMAAsM;IACtM,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oQAAoQ;IACpQ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iKAAiK;IACjK,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,0JAA0J;AAC1J,MAAM,WAAW,kBAAkB;IACjC,iIAAiI;IACjI,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sHAAsH;IACtH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qIAAqI;IACrI,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,kBAAkB,EACvB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}
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;AACxJ,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAE9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,GAAG,SAAS,CAShF;AAED,8KAA8K;AAC9K,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,oBAAoB,GACpB,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GACzD;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,uIAAuI;IACvI,OAAO,EAAE,OAAO,CAAC;IACjB,2LAA2L;IAC3L,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4JAA4J;IAC5J,KAAK,EAAE,MAAM,CAAC;IACd,yLAAyL;IACzL,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qMAAqM;IACrM,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,sMAAsM;IACtM,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oQAAoQ;IACpQ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iKAAiK;IACjK,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,0JAA0J;AAC1J,MAAM,WAAW,kBAAkB;IACjC,iIAAiI;IACjI,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sHAAsH;IACtH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qIAAqI;IACrI,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,kBAAkB,EACvB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}
@@ -82,7 +82,8 @@ function resolveActor(override) {
82
82
  * - `options.disabled` — the opt-out flag/config was set.
83
83
  * - `run.success` false — defensive; callers should not reach here on failure.
84
84
  * - no digest found in the run's records — a component with no publish step
85
- * has nothing to bind a release record to.
85
+ * has nothing to bind a release record to, unless the run was made under a
86
+ * release that records its templates (`templatesDigest`, #4222).
86
87
  * - no resolvable actor — mirrors `runComponentsReleaseRecord`'s hard
87
88
  * requirement; an unattributed record defeats the ledger's purpose.
88
89
  *
@@ -102,7 +103,7 @@ export async function maybeRecordAutoRelease(run, options = {}) {
102
103
  if (!run.success) {
103
104
  return { recorded: false, reason: "run-not-successful" };
104
105
  }
105
- const digest = run.digest ?? extractRunDigest(run.records ?? []);
106
+ const digest = run.digest ?? extractRunDigest(run.records ?? []) ?? (run.releaseDigest ? run.templatesDigest : undefined);
106
107
  if (!digest) {
107
108
  return { recorded: false, reason: "no-digest", detail: `component "${run.component}" published no digest-bearing artifact` };
108
109
  }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Apply on merge per green commit (#4168 step 9): whether the change sets
3
+ * approved for the merges since the last applied green commit cover the plan
4
+ * at the green one.
5
+ *
6
+ * Each member of the fresh plan is checked against the newest approved change
7
+ * set that planned it, with the same rule `pr-apply` uses for one pull request
8
+ * (`planCoveredBy`, ./pr-run.ts). A member with nothing to do is covered by
9
+ * nothing. Any member left uncovered sends the whole plan to a gate of its own,
10
+ * bound to the combined digest.
11
+ */
12
+ import type { ChangeSetDocument } from "../change-set.js";
13
+ import type { GateLedgerPort } from "../op/gate.js";
14
+ /** One merge's approved change set, with who approved it. */
15
+ export interface ApprovedMerge {
16
+ commit: string;
17
+ pr?: number;
18
+ doc: ChangeSetDocument;
19
+ approvedBy: readonly string[];
20
+ }
21
+ export interface GreenCover {
22
+ covered: boolean;
23
+ /** Why each uncovered member is not covered, one line each. */
24
+ uncovered: string[];
25
+ /** The approvers of the change sets that covered a member, sorted. */
26
+ approvedBy: string[];
27
+ /** The merges whose approval covered a member, in trunk order. */
28
+ coveredBy: string[];
29
+ }
30
+ /**
31
+ * Check `fresh` against `merges`, given oldest first, as the first-parent
32
+ * history between the last applied green commit and this one runs.
33
+ */
34
+ export declare function coverByMerges(fresh: ChangeSetDocument, merges: readonly ApprovedMerge[]): GreenCover;
35
+ /** The green commit `pr-apply --green` applies, what it is measured from, and the approved merges between. */
36
+ export interface GreenTarget {
37
+ commit: string;
38
+ /** The last green commit applied to the environment, else `--base`, else the green commit before this one, else its parent. */
39
+ base: string;
40
+ /** Where `base` came from. */
41
+ baseFrom: "applied" | "flag" | "previous-green" | "parent";
42
+ /** The first-parent commits after `base` up to `commit`, oldest first. */
43
+ merges: string[];
44
+ /** Their pull requests, from the merge records, in trunk order. */
45
+ prs: number[];
46
+ /** The merges whose approved change set still stands, oldest first. */
47
+ approved: ApprovedMerge[];
48
+ }
49
+ export type GreenTargetResult = {
50
+ status: "target";
51
+ target: GreenTarget;
52
+ }
53
+ /** The checkout is the green commit last applied. */
54
+ | {
55
+ status: "applied";
56
+ commit: string;
57
+ } | {
58
+ status: "error";
59
+ message: string;
60
+ hint?: string;
61
+ };
62
+ /**
63
+ * Resolve the green target for `env` at `cwd`'s HEAD (#4168 step 9). HEAD must
64
+ * carry a counting `ci/green` tag and no `ci/revoked` one, judged by the
65
+ * declaration's `ci.green` as `release cut` judges them. Reads the local tags
66
+ * and `chant/lifecycle` and never fetches.
67
+ */
68
+ export declare function resolveGreenTarget(req: {
69
+ cwd: string;
70
+ env: string;
71
+ base?: string;
72
+ gate: string;
73
+ ledger?: GateLedgerPort;
74
+ }): Promise<GreenTargetResult>;
75
+ /** The op a green commit's own gate is recorded under: `green-<sha>`, or `green-<sha>-<member>` for a workspace member. */
76
+ export declare function greenOp(commit: string, member?: string): string;
77
+ //# sourceMappingURL=green-cover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"green-cover.d.ts","sourceRoot":"","sources":["../../src/components/green-cover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,iBAAiB,CAAC;IACvB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sEAAsE;IACtE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAUD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,UAAU,CAyBpG;AAED,8GAA8G;AAC9G,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,+HAA+H;IAC/H,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,gBAAgB,GAAG,QAAQ,CAAC;IAC3D,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mEAAmE;IACnE,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,uEAAuE;IACvE,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE;AAC3C,qDAAqD;GACnD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAUxD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuE5J;AAED,2HAA2H;AAC3H,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/D"}