@telorun/cli 0.88.0 → 0.90.0

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 (80) hide show
  1. package/dist/bundle/built-layers.d.ts +36 -0
  2. package/dist/bundle/built-layers.d.ts.map +1 -0
  3. package/dist/bundle/built-layers.js +84 -0
  4. package/dist/bundle/built-layers.js.map +1 -0
  5. package/dist/bundle/module-payload.d.ts +30 -15
  6. package/dist/bundle/module-payload.d.ts.map +1 -1
  7. package/dist/bundle/module-payload.js +118 -21
  8. package/dist/bundle/module-payload.js.map +1 -1
  9. package/dist/bundle/partition-layers.d.ts +13 -6
  10. package/dist/bundle/partition-layers.d.ts.map +1 -1
  11. package/dist/bundle/partition-layers.js +49 -7
  12. package/dist/bundle/partition-layers.js.map +1 -1
  13. package/dist/bundle/payload-drift.d.ts +1 -1
  14. package/dist/bundle/payload-drift.d.ts.map +1 -1
  15. package/dist/bundle/select-files.d.ts +11 -2
  16. package/dist/bundle/select-files.d.ts.map +1 -1
  17. package/dist/bundle/select-files.js +23 -8
  18. package/dist/bundle/select-files.js.map +1 -1
  19. package/dist/bundle/staged-files.d.ts +43 -0
  20. package/dist/bundle/staged-files.d.ts.map +1 -0
  21. package/dist/bundle/staged-files.js +158 -0
  22. package/dist/bundle/staged-files.js.map +1 -0
  23. package/dist/bundle/warm-layers.d.ts +11 -6
  24. package/dist/bundle/warm-layers.d.ts.map +1 -1
  25. package/dist/bundle/warm-layers.js +26 -10
  26. package/dist/bundle/warm-layers.js.map +1 -1
  27. package/dist/commands/install.d.ts +1 -0
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +7 -1
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/module.d.ts.map +1 -1
  32. package/dist/commands/module.js +21 -7
  33. package/dist/commands/module.js.map +1 -1
  34. package/dist/commands/publish.d.ts.map +1 -1
  35. package/dist/commands/publish.js +5 -1
  36. package/dist/commands/publish.js.map +1 -1
  37. package/dist/commands/release.d.ts +8 -6
  38. package/dist/commands/release.d.ts.map +1 -1
  39. package/dist/commands/release.js +168 -69
  40. package/dist/commands/release.js.map +1 -1
  41. package/dist/commands/run.d.ts.map +1 -1
  42. package/dist/commands/run.js +14 -6
  43. package/dist/commands/run.js.map +1 -1
  44. package/dist/controller-runtime.d.ts +25 -3
  45. package/dist/controller-runtime.d.ts.map +1 -1
  46. package/dist/controller-runtime.js +39 -9
  47. package/dist/controller-runtime.js.map +1 -1
  48. package/dist/env-files.d.ts +23 -8
  49. package/dist/env-files.d.ts.map +1 -1
  50. package/dist/env-files.js +77 -17
  51. package/dist/env-files.js.map +1 -1
  52. package/dist/release/apply-plan.d.ts +2 -1
  53. package/dist/release/apply-plan.d.ts.map +1 -1
  54. package/dist/release/apply-plan.js +8 -4
  55. package/dist/release/apply-plan.js.map +1 -1
  56. package/dist/release/cargo-toml.d.ts +17 -0
  57. package/dist/release/cargo-toml.d.ts.map +1 -0
  58. package/dist/release/cargo-toml.js +253 -0
  59. package/dist/release/cargo-toml.js.map +1 -0
  60. package/dist/release/crate-inputs.d.ts +41 -0
  61. package/dist/release/crate-inputs.d.ts.map +1 -0
  62. package/dist/release/crate-inputs.js +407 -0
  63. package/dist/release/crate-inputs.js.map +1 -0
  64. package/dist/release/evidence.d.ts +13 -17
  65. package/dist/release/evidence.d.ts.map +1 -1
  66. package/dist/release/evidence.js +26 -30
  67. package/dist/release/evidence.js.map +1 -1
  68. package/dist/release/stage.d.ts +61 -0
  69. package/dist/release/stage.d.ts.map +1 -0
  70. package/dist/release/stage.js +506 -0
  71. package/dist/release/stage.js.map +1 -0
  72. package/dist/release/targets.d.ts +60 -0
  73. package/dist/release/targets.d.ts.map +1 -0
  74. package/dist/release/targets.js +94 -0
  75. package/dist/release/targets.js.map +1 -0
  76. package/dist/release/workspace.d.ts +17 -5
  77. package/dist/release/workspace.d.ts.map +1 -1
  78. package/dist/release/workspace.js +89 -13
  79. package/dist/release/workspace.js.map +1 -1
  80. package/package.json +7 -7
@@ -0,0 +1,407 @@
1
+ /**
2
+ * The build inputs of a crate-built source, as one digest.
3
+ *
4
+ * A source whose files are prebuilt from a crate in this repository names that
5
+ * crate (`build: { cargo: <dir> }`), and `telo release stage --pin` records what
6
+ * built them (`build.inputs`): the committed files of the crate and of every
7
+ * path crate it reaches transitively — through a path dependency or a `[patch]`
8
+ * entry — the `Cargo.lock` packages those crates reach, the cargo configuration
9
+ * and toolchain files that apply where the crate is built, and what the
10
+ * workspace root's `Cargo.toml` passes down. A lock entry nothing here depends
11
+ * on is not an input, so an unrelated crate's new dependency trips no source.
12
+ * `telo release check` recomputes the same digest and fails when it moved, so a
13
+ * module never ships binaries older than the code they were built from — and an
14
+ * edit to a crate every controller depends on (the SDK, the controller ABI)
15
+ * trips every source built on it.
16
+ *
17
+ * Files are what git tracks, read from the working tree: build output, ignored
18
+ * files and a scratch file nobody added are not inputs, wherever they sit.
19
+ * Cargo is never invoked, so the check needs no toolchain and builds nothing.
20
+ */
21
+ import { isModuleKind, readModuleSources, sha256Base64Url, } from "@telorun/analyzer";
22
+ import { defaultCustomTags } from "@telorun/templating";
23
+ import { execFileSync } from "node:child_process";
24
+ import * as fs from "node:fs";
25
+ import * as path from "node:path";
26
+ import { parseAllDocuments } from "yaml";
27
+ import { parseCargoToml } from "./cargo-toml.js";
28
+ /** Files that configure a build from the directory they sit in downward. */
29
+ const BUILD_CONFIG_FILES = [
30
+ ".cargo/config",
31
+ ".cargo/config.toml",
32
+ "rust-toolchain",
33
+ "rust-toolchain.toml",
34
+ ];
35
+ /** What the workspace root's `Cargo.toml` passes down to every member's build. */
36
+ const INHERITED_ROOT_KEYS = [
37
+ ["patch"],
38
+ ["replace"],
39
+ ["profile"],
40
+ ["workspace", "resolver"],
41
+ ["workspace", "package"],
42
+ ["workspace", "lints"],
43
+ ];
44
+ const isTable = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
45
+ function readManifest(dir) {
46
+ const file = path.join(dir, "Cargo.toml");
47
+ if (!fs.existsSync(file))
48
+ throw new Error(`'${dir}' holds no Cargo.toml, so it is not a crate.`);
49
+ return parseCargoToml(fs.readFileSync(file, "utf8"), file);
50
+ }
51
+ /** The directory of the workspace governing `crateDir` — the one whose
52
+ * `Cargo.lock` fixed its registry dependencies — resolved as cargo does. */
53
+ function workspaceRootOf(crateDir, manifest) {
54
+ if (isTable(manifest.workspace))
55
+ return { dir: crateDir, manifest };
56
+ const pkg = manifest.package;
57
+ if (isTable(pkg) && typeof pkg.workspace === "string") {
58
+ const dir = path.resolve(crateDir, pkg.workspace);
59
+ return { dir, manifest: readManifest(dir) };
60
+ }
61
+ for (let dir = path.dirname(crateDir);; dir = path.dirname(dir)) {
62
+ if (fs.existsSync(path.join(dir, "Cargo.toml"))) {
63
+ const candidate = readManifest(dir);
64
+ const workspace = candidate.workspace;
65
+ if (isTable(workspace)) {
66
+ const relative = path.relative(dir, crateDir).split(path.sep).join("/");
67
+ const excluded = Array.isArray(workspace.exclude) && workspace.exclude.some((entry) => typeof entry === "string" && (relative === entry.replace(/\/+$/, "") || relative.startsWith(`${entry.replace(/\/+$/, "")}/`)));
68
+ return excluded ? { dir: crateDir, manifest } : { dir, manifest: candidate };
69
+ }
70
+ }
71
+ if (path.dirname(dir) === dir)
72
+ return { dir: crateDir, manifest };
73
+ }
74
+ }
75
+ /** The directories of the path dependencies one crate's manifest declares — in
76
+ * `[dependencies]`, `[build-dependencies]` and their per-target forms, the ones
77
+ * that link into the build — with `workspace = true` resolved against the
78
+ * workspace root's `[workspace.dependencies]`. */
79
+ function pathDependencies(crateDir, manifest, root, inheritedNames) {
80
+ const tables = [manifest.dependencies, manifest["build-dependencies"]];
81
+ if (isTable(manifest.target)) {
82
+ for (const target of Object.values(manifest.target)) {
83
+ if (isTable(target))
84
+ tables.push(target.dependencies, target["build-dependencies"]);
85
+ }
86
+ }
87
+ const workspaceDeps = isTable(root.manifest.workspace) ? root.manifest.workspace.dependencies : undefined;
88
+ const out = [];
89
+ for (const table of tables) {
90
+ if (!isTable(table))
91
+ continue;
92
+ for (const [name, spec] of Object.entries(table)) {
93
+ if (!isTable(spec))
94
+ continue;
95
+ if (typeof spec.path === "string") {
96
+ out.push(path.resolve(crateDir, spec.path));
97
+ }
98
+ else if (spec.workspace === true) {
99
+ inheritedNames.add(name);
100
+ const inherited = isTable(workspaceDeps) ? workspaceDeps[name] : undefined;
101
+ if (inherited === undefined) {
102
+ throw new Error(`${path.join(crateDir, "Cargo.toml")}: dependency '${name}' sets workspace = true, but ` +
103
+ `${path.join(root.dir, "Cargo.toml")} declares no [workspace.dependencies] '${name}'.`);
104
+ }
105
+ if (isTable(inherited) && typeof inherited.path === "string") {
106
+ out.push(path.resolve(root.dir, inherited.path));
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return out;
112
+ }
113
+ /** Package name → directory of every path crate the workspace root's `[patch]`
114
+ * tables substitute for a registry or git dependency. */
115
+ function patchedPathCrates(root) {
116
+ const out = new Map();
117
+ const patch = root.manifest.patch;
118
+ if (!isTable(patch))
119
+ return out;
120
+ for (const registry of Object.values(patch)) {
121
+ if (!isTable(registry))
122
+ continue;
123
+ for (const [name, spec] of Object.entries(registry)) {
124
+ if (!isTable(spec) || typeof spec.path !== "string")
125
+ continue;
126
+ const crate = typeof spec.package === "string" ? spec.package : name;
127
+ out.set(crate, path.resolve(root.dir, spec.path));
128
+ }
129
+ }
130
+ return out;
131
+ }
132
+ /** The git work tree `dir` belongs to. Not being able to ask is a failure. */
133
+ function gitTopLevel(dir) {
134
+ return realPath(git(dir, ["rev-parse", "--show-toplevel"]).trim());
135
+ }
136
+ function git(cwd, args) {
137
+ try {
138
+ return execFileSync("git", args, { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] });
139
+ }
140
+ catch (err) {
141
+ const stderr = err.stderr;
142
+ throw new Error(`\`git ${args.join(" ")}\` failed in ${cwd}` +
143
+ `${typeof stderr === "string" && stderr.trim() !== "" ? ` (${stderr.trim()})` : ""}. ` +
144
+ `A crate's build inputs are the files git tracks, so the digest is taken in the ` +
145
+ `repository's work tree.`);
146
+ }
147
+ }
148
+ /** A path with every link resolved, in the form the OS reports it. The native
149
+ * resolver, because it is the one that expands a Windows 8.3 short name
150
+ * (`RUNNER~1`) — git names the work tree by its long name, and a path compared
151
+ * against it in the other form reads as outside the repository. */
152
+ function realPath(target) {
153
+ return fs.realpathSync.native(target);
154
+ }
155
+ /** The files git tracks in `repo`, by repository-relative `/`-separated name.
156
+ * Listed once per digest and matched in memory: a process spawn costs far more
157
+ * than the listing, above all on Windows. */
158
+ class TrackedFiles {
159
+ repo;
160
+ names;
161
+ constructor(repo) {
162
+ this.repo = repo;
163
+ this.names = new Set(git(repo, ["ls-files", "-z", "--cached"]).split("\0").filter((name) => name !== ""));
164
+ }
165
+ nameOf(file) {
166
+ return path.relative(this.repo, file).split(path.sep).join("/");
167
+ }
168
+ has(file) {
169
+ return this.names.has(this.nameOf(file));
170
+ }
171
+ /** The tracked files under `dirs`, absolute. A tracked file deleted from the
172
+ * work tree is not an input any more, so it is left out. */
173
+ under(dirs) {
174
+ const prefixes = dirs.map((dir) => this.nameOf(dir));
175
+ return [...this.names]
176
+ .filter((name) => prefixes.some((prefix) => prefix === "" || name.startsWith(`${prefix}/`)))
177
+ .map((name) => path.join(this.repo, name))
178
+ .filter((file) => fs.existsSync(file));
179
+ }
180
+ }
181
+ /** JSON with object keys sorted, so equal TOML data renders to equal text. */
182
+ function canonical(value) {
183
+ if (value === undefined)
184
+ return "null";
185
+ if (Array.isArray(value))
186
+ return `[${value.map(canonical).join(",")}]`;
187
+ if (isTable(value)) {
188
+ return `{${Object.keys(value)
189
+ .sort()
190
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
191
+ .join(",")}}`;
192
+ }
193
+ return JSON.stringify(value);
194
+ }
195
+ /**
196
+ * The `Cargo.lock` packages the given crates reach through the lock's own
197
+ * dependency graph. A dependency is written `name`, `name version` or
198
+ * `name version (source)` — as specific as the lock needs to tell packages of one
199
+ * name apart — and one that matches no package, or several, is refused rather
200
+ * than guessed.
201
+ */
202
+ function reachedLockPackages(lockfile, crateNames) {
203
+ const lock = parseCargoToml(fs.readFileSync(lockfile, "utf8"), lockfile);
204
+ const packages = [];
205
+ for (const entry of Array.isArray(lock.package) ? lock.package : []) {
206
+ if (!isTable(entry) || typeof entry.name !== "string" || typeof entry.version !== "string") {
207
+ throw new Error(`${lockfile}: a [[package]] entry has no name or version.`);
208
+ }
209
+ packages.push({
210
+ name: entry.name,
211
+ version: entry.version,
212
+ ...(typeof entry.source === "string" ? { source: entry.source } : {}),
213
+ entry,
214
+ });
215
+ }
216
+ const find = (spec, from) => {
217
+ const match = /^(\S+)(?: (\S+))?(?: \((.+)\))?$/.exec(spec);
218
+ const candidates = match
219
+ ? packages.filter((p) => p.name === match[1] &&
220
+ (match[2] === undefined || p.version === match[2]) &&
221
+ (match[3] === undefined || p.source === match[3]))
222
+ : [];
223
+ if (candidates.length !== 1) {
224
+ throw new Error(`${lockfile}: ${from} depends on '${spec}', which names ${candidates.length === 0 ? "no" : "more than one"} ` +
225
+ `[[package]] — regenerate the lockfile with \`cargo generate-lockfile\`.`);
226
+ }
227
+ return candidates[0];
228
+ };
229
+ const reached = new Set();
230
+ const queue = crateNames.map((name) => {
231
+ const local = packages.filter((p) => p.name === name && p.source === undefined);
232
+ if (local.length !== 1) {
233
+ throw new Error(`${lockfile} has ${local.length === 0 ? "no" : "more than one"} entry for the path crate '${name}' — ` +
234
+ `run \`cargo generate-lockfile\` in the workspace.`);
235
+ }
236
+ return local[0];
237
+ });
238
+ while (queue.length > 0) {
239
+ const pkg = queue.shift();
240
+ if (reached.has(pkg))
241
+ continue;
242
+ reached.add(pkg);
243
+ const deps = pkg.entry.dependencies;
244
+ for (const dep of Array.isArray(deps) ? deps : []) {
245
+ if (typeof dep !== "string")
246
+ throw new Error(`${lockfile}: '${pkg.name}' lists a non-string dependency.`);
247
+ queue.push(find(dep, `'${pkg.name} ${pkg.version}'`));
248
+ }
249
+ }
250
+ return [...reached];
251
+ }
252
+ /** The value at a dotted key path, or undefined. */
253
+ function valueAt(table, keys) {
254
+ let current = table;
255
+ for (const key of keys)
256
+ current = isTable(current) ? current[key] : undefined;
257
+ return current;
258
+ }
259
+ /**
260
+ * The digest of a crate's build inputs, `sha256-<base64url>`: one line per input,
261
+ * sorted — each tracked file of the crate and of every path crate it reaches
262
+ * (workspace-root-relative path and content digest), each `Cargo.lock` package
263
+ * those crates reach, each cargo configuration or toolchain file from the crate's
264
+ * directory up to the repository root, and from the workspace root's
265
+ * `Cargo.toml` the inherited `[workspace.dependencies]` entries plus `[patch]`,
266
+ * `[replace]`, `[profile]` and `[workspace]`'s `resolver`, `package` and `lints`.
267
+ */
268
+ export async function crateInputsDigest(crateDir) {
269
+ const manifest = readManifest(crateDir);
270
+ const root = workspaceRootOf(crateDir, manifest);
271
+ const lockfile = path.join(root.dir, "Cargo.lock");
272
+ if (!fs.existsSync(lockfile)) {
273
+ throw new Error(`${root.dir} has no Cargo.lock. The lockfile fixes every registry dependency the build ` +
274
+ `links, so it is part of the digest — generate it with \`cargo generate-lockfile\`.`);
275
+ }
276
+ const repo = gitTopLevel(crateDir);
277
+ const tracked = new TrackedFiles(repo);
278
+ const rootDir = realPath(root.dir);
279
+ const patched = patchedPathCrates(root);
280
+ const crates = new Set();
281
+ const crateNames = [];
282
+ const inheritedNames = new Set();
283
+ const walk = (start) => {
284
+ const queue = [start];
285
+ while (queue.length > 0) {
286
+ const dir = realPath(queue.shift());
287
+ if (crates.has(dir))
288
+ continue;
289
+ if (!tracked.has(path.join(dir, "Cargo.toml"))) {
290
+ throw new Error(`${path.join(dir, "Cargo.toml")} is not tracked by git. A build input is a committed ` +
291
+ `file, so an uncommitted crate has none to digest — git add the crate.`);
292
+ }
293
+ crates.add(dir);
294
+ const own = dir === realPath(crateDir) ? manifest : readManifest(dir);
295
+ const name = isTable(own.package) ? own.package.name : undefined;
296
+ if (typeof name !== "string")
297
+ throw new Error(`${path.join(dir, "Cargo.toml")} declares no [package] name.`);
298
+ crateNames.push(name);
299
+ queue.push(...pathDependencies(dir, own, root, inheritedNames));
300
+ }
301
+ };
302
+ walk(crateDir);
303
+ // A path crate the lock reaches that no path dependency named was substituted
304
+ // by `[patch]`: its files link into the build as much as any other's.
305
+ let reached = reachedLockPackages(lockfile, crateNames);
306
+ for (;;) {
307
+ const unwalked = reached.filter((p) => p.source === undefined && !crateNames.includes(p.name));
308
+ if (unwalked.length === 0)
309
+ break;
310
+ for (const pkg of unwalked) {
311
+ const dir = patched.get(pkg.name);
312
+ if (dir === undefined) {
313
+ throw new Error(`${lockfile}: the crate reaches the path package '${pkg.name}', but neither a path ` +
314
+ `dependency nor a [patch] entry of ${path.join(root.dir, "Cargo.toml")} names its directory, ` +
315
+ `so its files cannot be digested — regenerate the lockfile with \`cargo generate-lockfile\`.`);
316
+ }
317
+ walk(dir);
318
+ }
319
+ reached = reachedLockPackages(lockfile, crateNames);
320
+ }
321
+ const lines = reached.map((p) => `Cargo.lock#${p.name} ${p.version} ${p.source ?? ""}\0${canonical(p.entry)}`);
322
+ const workspace = isTable(root.manifest.workspace) ? root.manifest.workspace : {};
323
+ const workspaceDeps = isTable(workspace.dependencies) ? workspace.dependencies : {};
324
+ for (const name of inheritedNames) {
325
+ lines.push(`Cargo.toml#workspace.dependencies.${name}\0${canonical(workspaceDeps[name])}`);
326
+ }
327
+ for (const keys of INHERITED_ROOT_KEYS) {
328
+ const value = valueAt(root.manifest, keys);
329
+ if (value !== undefined)
330
+ lines.push(`Cargo.toml#${keys.join(".")}\0${canonical(value)}`);
331
+ }
332
+ const configs = [];
333
+ for (let dir = realPath(crateDir);; dir = path.dirname(dir)) {
334
+ for (const name of BUILD_CONFIG_FILES)
335
+ configs.push(path.join(dir, name));
336
+ if (dir === repo || path.dirname(dir) === dir)
337
+ break;
338
+ }
339
+ const inputs = new Set(tracked.under([...crates]));
340
+ for (const config of configs) {
341
+ if (tracked.has(config) && fs.existsSync(config))
342
+ inputs.add(config);
343
+ }
344
+ for (const file of inputs) {
345
+ const name = path.relative(rootDir, file).split(path.sep).join("/");
346
+ lines.push(`${name}\0${await sha256Base64Url(fs.readFileSync(file))}`);
347
+ }
348
+ lines.sort();
349
+ return `sha256-${await sha256Base64Url(new TextEncoder().encode([...new Set(lines)].join("\n")))}`;
350
+ }
351
+ /** Recompute every crate-built source's inputs across `modules` and report each
352
+ * one that is unrecorded or has moved. */
353
+ export async function checkCrateInputs(modules) {
354
+ const failures = [];
355
+ for (const module of modules) {
356
+ const sources = moduleSources(module);
357
+ if (sources instanceof Error) {
358
+ failures.push({ module: module.key, source: "", message: sources.message });
359
+ continue;
360
+ }
361
+ for (const source of sources) {
362
+ if (source.build === undefined)
363
+ continue;
364
+ const { cargo, inputs } = source.build;
365
+ const fail = (message) => failures.push({ module: module.key, source: source.name, message });
366
+ let actual;
367
+ try {
368
+ actual = await crateInputsDigest(path.resolve(module.dir, cargo));
369
+ }
370
+ catch (err) {
371
+ fail(`cannot digest crate '${cargo}': ${err instanceof Error ? err.message : String(err)}`);
372
+ continue;
373
+ }
374
+ if (inputs === undefined) {
375
+ fail(`builds from crate '${cargo}' but records no build.inputs — run ` +
376
+ `\`telo release stage --pin --module ${module.key}\` after rebuilding its files.`);
377
+ }
378
+ else if (inputs !== actual) {
379
+ fail(`the build inputs of crate '${cargo}' moved (recorded ${inputs}, now ${actual}): a ` +
380
+ `tracked file of the crate or of a path crate it reaches, a lock package they reach, ` +
381
+ `or a cargo configuration applying to the build changed since its files were built. ` +
382
+ `Rebuild them and run \`telo release stage --pin --module ${module.key}\`.`);
383
+ }
384
+ }
385
+ }
386
+ return failures;
387
+ }
388
+ function moduleSources(module) {
389
+ const text = fs.readFileSync(module.manifestPath, "utf8");
390
+ for (const doc of parseAllDocuments(text, { customTags: defaultCustomTags() })) {
391
+ if (doc.errors.length > 0) {
392
+ return new Error(`${module.manifestPath} does not parse, so its crate inputs cannot be checked: ` +
393
+ doc.errors[0].message);
394
+ }
395
+ const json = doc.toJSON();
396
+ if (typeof json?.kind !== "string" || !isModuleKind(json.kind))
397
+ continue;
398
+ const { sources, problems } = readModuleSources(json);
399
+ if (problems.length > 0) {
400
+ return new Error(`its sources: block cannot be read, so its crate inputs cannot be checked:\n` +
401
+ problems.map((problem) => ` ${problem.message}`).join("\n"));
402
+ }
403
+ return sources;
404
+ }
405
+ return [];
406
+ }
407
+ //# sourceMappingURL=crate-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crate-inputs.js","sourceRoot":"","sources":["../../src/release/crate-inputs.ts"],"names":[],"mappings":"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"}
@@ -15,30 +15,26 @@
15
15
  * version, which is why its guesswork had to be sound; here it decides only
16
16
  * whether a changelog line is requested.
17
17
  */
18
- import { type LayerDigests, type ModuleEvidence } from "@telorun/analyzer";
19
- import { type ModulePayload } from "../bundle/module-payload.js";
18
+ import { type LayerDigests, type ModuleEvidence, type ModuleKey } from "@telorun/analyzer";
19
+ import { ModulePayloadBuilder, type ModulePayload } from "../bundle/module-payload.js";
20
20
  import type { DiscoveredModule, Workspace } from "./workspace.js";
21
- export interface EvidenceOptions {
22
- /** `oci://host/org` the base each module's destination derives from. */
21
+ /** Where one module publishes: the resolved base, and the ref it derives. */
22
+ export interface ModuleTarget {
23
23
  readonly registry: string;
24
+ readonly destination: string;
25
+ }
26
+ export interface EvidenceOptions {
27
+ /** Per module, because a workspace may declare a base per subtree. Resolved
28
+ * by the caller, which owns the flag / env / ledger rungs of the cascade. */
29
+ readonly targets: ReadonlyMap<ModuleKey, ModuleTarget>;
24
30
  /** Git ref the changed-files reading diffs against. */
25
31
  readonly baseRef: string;
26
32
  /** Called before each module is built, so a long batch shows progress. */
27
33
  readonly onModule?: (module: DiscoveredModule, index: number, total: number) => void;
34
+ /** Reused where the caller already read the import graph through one, so the
35
+ * manifest transform is not repeated per module. */
36
+ readonly builder?: ModulePayloadBuilder;
28
37
  }
29
- /**
30
- * A module's publish destination: the registry base plus its own directory name.
31
- *
32
- * Identity is the ref, never `metadata.name` — this is the same rule the release
33
- * job has always applied, lifted out of a shell script.
34
- *
35
- * This is the ROOT destination, which is a policy rather than a derivation:
36
- * nothing in the graph can say which repo a module publishes to. The payload
37
- * builder derives a SIBLING's from it instead of re-applying this rule, so the
38
- * ref an artifact carries and the destination its dependency is pushed to are
39
- * the same string by construction.
40
- */
41
- export declare function destinationFor(registry: string, module: DiscoveredModule): string;
42
38
  /**
43
39
  * A built payload reduced to the per-layer digest map the ledger records.
44
40
  *
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/release/evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAEjF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAajF;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CAe3B;AAmED,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3E"}
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/release/evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B;kFAC8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF;yDACqD;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAajF;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CAkB3B;AAmED,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3E"}
@@ -15,28 +15,13 @@
15
15
  * version, which is why its guesswork had to be sound; here it decides only
16
16
  * whether a changelog line is requested.
17
17
  */
18
- import { MANIFEST_LAYER, layerDigestKey, } from "@telorun/analyzer";
18
+ import { MANIFEST_LAYER, layerDigestKey, matchesPatterns, } from "@telorun/analyzer";
19
19
  import { computeFilesIntegrity } from "@telorun/kernel";
20
- import { selectByPatterns } from "@telorun/glob";
20
+ import { lastMatchIndex, selectByPatterns } from "@telorun/glob";
21
21
  import { execFileSync } from "node:child_process";
22
22
  import * as fs from "node:fs";
23
23
  import * as path from "node:path";
24
24
  import { ModulePayloadBuilder } from "../bundle/module-payload.js";
25
- /**
26
- * A module's publish destination: the registry base plus its own directory name.
27
- *
28
- * Identity is the ref, never `metadata.name` — this is the same rule the release
29
- * job has always applied, lifted out of a shell script.
30
- *
31
- * This is the ROOT destination, which is a policy rather than a derivation:
32
- * nothing in the graph can say which repo a module publishes to. The payload
33
- * builder derives a SIBLING's from it instead of re-applying this rule, so the
34
- * ref an artifact carries and the destination its dependency is pushed to are
35
- * the same string by construction.
36
- */
37
- export function destinationFor(registry, module) {
38
- return `${registry.replace(/\/+$/, "")}/${path.basename(module.dir)}`;
39
- }
40
25
  /**
41
26
  * A built payload reduced to the per-layer digest map the ledger records.
42
27
  *
@@ -65,26 +50,30 @@ export async function digestPayload(payload) {
65
50
  export async function collectEvidence(workspace, options) {
66
51
  const byDir = new Map(workspace.modules.map((module) => [path.resolve(module.dir), module]));
67
52
  const changed = changedModules(workspace, options.baseRef);
68
- const builder = new ModulePayloadBuilder({ cacheRoot: path.join(workspace.root, ".telo") });
53
+ const builder = options.builder ?? new ModulePayloadBuilder({ cacheRoot: path.join(workspace.root, ".telo") });
69
54
  const evidence = [];
70
55
  for (const [index, module] of workspace.modules.entries()) {
71
56
  options.onModule?.(module, index, workspace.modules.length);
57
+ const target = options.targets.get(module.key);
58
+ if (!target)
59
+ throw new Error(`no publish destination was resolved for '${module.key}'.`);
72
60
  evidence.push(module.artifactKind === "image"
73
- ? await imageEvidence(module, changed)
74
- : await registryEvidence(workspace, module, byDir, builder, options, changed));
61
+ ? await imageEvidence(module, target, changed)
62
+ : await registryEvidence(workspace, module, byDir, builder, target, changed));
75
63
  }
76
64
  return evidence;
77
65
  }
78
66
  /**
79
67
  * A registry artifact module: the layers `telo publish` builds, digested.
80
68
  */
81
- async function registryEvidence(workspace, module, byDir, builder, options, changed) {
82
- const payload = await builder.payload(module.manifestPath, destinationFor(options.registry, module));
69
+ async function registryEvidence(workspace, module, byDir, builder, target, changed) {
70
+ const payload = await builder.payload(module.manifestPath, target.destination);
83
71
  return {
84
72
  key: module.key,
85
73
  name: module.name,
86
74
  version: module.version,
87
75
  artifactKind: "registry",
76
+ registry: target.registry,
88
77
  layers: await digestPayload(payload),
89
78
  inlines: attributeInputs(workspace, payload.buildInputs, module, byDir),
90
79
  imports: payload.relativeImports
@@ -107,12 +96,13 @@ async function registryEvidence(workspace, module, byDir, builder, options, chan
107
96
  * change reaches the deployed app regardless, and the immutable `:<version>` tag
108
97
  * is what a version move is for.
109
98
  */
110
- async function imageEvidence(module, changed) {
99
+ async function imageEvidence(module, target, changed) {
111
100
  return {
112
101
  key: module.key,
113
102
  name: module.name,
114
103
  version: module.version,
115
104
  artifactKind: "image",
105
+ registry: target.registry,
116
106
  layers: { image: await imageDigest(module) },
117
107
  inlines: new Map(),
118
108
  imports: [],
@@ -205,14 +195,19 @@ function ownerOf(file, byDir) {
205
195
  dir = parent;
206
196
  }
207
197
  }
208
- /** Paths under a module that never reach its artifact, so editing one is not a
209
- * semantic change worth a changelog line. Kept deliberately short: this rule no
210
- * longer decides a version, so a false positive costs one sentence and the old
211
- * per-language guesswork bought nothing. */
212
- const NON_ARTIFACT_PATHS = [/^docs\//, /^plans\//, /^tests\//, /^README\.md$/, /^CHANGELOG\.md$/];
213
198
  /**
214
199
  * Modules with a change of their own on this branch.
215
200
  *
201
+ * Which of a module's paths are not release-relevant is that module's resolved
202
+ * `ignore` list — the workspace's, or its entry's override, or the built-in
203
+ * default — matched module-relative and gitignore-style. It no longer decides a
204
+ * version, so a false positive costs one sentence rather than a spurious
205
+ * republish.
206
+ *
207
+ * Attribution is to the NEAREST enclosing module, matching how build inputs are
208
+ * already attributed: the shortest matching key is the wrong answer the moment a
209
+ * nested module would be judged against an enclosing entry's ignore list.
210
+ *
216
211
  * No merge base — a shallow clone, a fresh repo — means the reading cannot be
217
212
  * taken, and guessing would ask for a changelog entry at random. The digest is
218
213
  * unaffected: it compares against the ledger, not against a ref, which is why it
@@ -230,13 +225,14 @@ function changedModules(workspace, baseRef) {
230
225
  catch {
231
226
  return new Set();
232
227
  }
228
+ const nearestFirst = [...workspace.modules].sort((a, b) => b.key.length - a.key.length);
233
229
  const changed = new Set();
234
230
  for (const file of diff.split("\n").map((line) => line.trim()).filter(Boolean)) {
235
- const module = workspace.modules.find((candidate) => file.startsWith(`${candidate.key}/`));
231
+ const module = nearestFirst.find((candidate) => file.startsWith(`${candidate.key}/`));
236
232
  if (!module)
237
233
  continue;
238
234
  const rest = file.slice(module.key.length + 1);
239
- if (NON_ARTIFACT_PATHS.some((pattern) => pattern.test(rest)))
235
+ if (matchesPatterns(rest, module.settings.ignore, lastMatchIndex))
240
236
  continue;
241
237
  changed.add(module.key);
242
238
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/release/evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/release/evidence.ts"],"names":[],"mappings":"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"}