@telorun/cli 0.87.0 → 0.89.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.
- package/dist/bundle/module-payload.d.ts +16 -5
- package/dist/bundle/module-payload.d.ts.map +1 -1
- package/dist/bundle/module-payload.js +42 -7
- package/dist/bundle/module-payload.js.map +1 -1
- package/dist/commands/module.d.ts.map +1 -1
- package/dist/commands/module.js +10 -2
- package/dist/commands/module.js.map +1 -1
- package/dist/commands/release.d.ts +6 -5
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +104 -65
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -6
- package/dist/commands/run.js.map +1 -1
- package/dist/env-files.d.ts +23 -8
- package/dist/env-files.d.ts.map +1 -1
- package/dist/env-files.js +77 -17
- package/dist/env-files.js.map +1 -1
- package/dist/release/apply-plan.d.ts +2 -1
- package/dist/release/apply-plan.d.ts.map +1 -1
- package/dist/release/apply-plan.js +8 -4
- package/dist/release/apply-plan.js.map +1 -1
- package/dist/release/evidence.d.ts +13 -17
- package/dist/release/evidence.d.ts.map +1 -1
- package/dist/release/evidence.js +26 -30
- package/dist/release/evidence.js.map +1 -1
- package/dist/release/targets.d.ts +60 -0
- package/dist/release/targets.d.ts.map +1 -0
- package/dist/release/targets.js +94 -0
- package/dist/release/targets.js.map +1 -0
- package/dist/release/workspace.d.ts +17 -5
- package/dist/release/workspace.d.ts.map +1 -1
- package/dist/release/workspace.js +89 -13
- package/dist/release/workspace.js.map +1 -1
- package/package.json +6 -6
package/dist/release/evidence.js
CHANGED
|
@@ -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,
|
|
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,
|
|
82
|
-
const payload = await builder.payload(module.manifestPath,
|
|
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 =
|
|
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 (
|
|
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":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/release/evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where each module publishes, resolved.
|
|
3
|
+
*
|
|
4
|
+
* The cascade is per module, because a workspace may declare a base per subtree:
|
|
5
|
+
* the entry's `registry:` → the `release:` block's → `--registry` →
|
|
6
|
+
* `TELO_OCI_REGISTRY` → the base that module's own ledger entry recorded.
|
|
7
|
+
*
|
|
8
|
+
* **The ledger is last, and that is a change.** It used to win over the flag and
|
|
9
|
+
* the variable, and a disagreement threw before any evidence was collected. A
|
|
10
|
+
* workspace that authors its destination has said where it publishes, and a
|
|
11
|
+
* cache of a past answer must not outrank it — so the ledger keeps its rung as a
|
|
12
|
+
* record for a workspace that authors nothing, and a disagreement between the
|
|
13
|
+
* two is reported per module by the planner rather than aborting the run.
|
|
14
|
+
*/
|
|
15
|
+
import { type Ledger, type ModuleKey, type ReleaseDiagnostic } from "@telorun/analyzer";
|
|
16
|
+
import type { ModulePayloadBuilder } from "../bundle/module-payload.js";
|
|
17
|
+
import type { ModuleTarget } from "./evidence.js";
|
|
18
|
+
import type { DiscoveredModule, Workspace } from "./workspace.js";
|
|
19
|
+
export interface RegistryRungs {
|
|
20
|
+
/** `--registry`. */
|
|
21
|
+
readonly flag?: string;
|
|
22
|
+
/** `TELO_OCI_REGISTRY`. */
|
|
23
|
+
readonly env?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ResolvedTargets {
|
|
26
|
+
readonly targets: ReadonlyMap<ModuleKey, ModuleTarget>;
|
|
27
|
+
readonly diagnostics: readonly ReleaseDiagnostic[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A module's publish destination: its 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 — and where those two answers disagree,
|
|
40
|
+
* `checkImportDestinations` says so before a payload is built.
|
|
41
|
+
*/
|
|
42
|
+
export declare function destinationFor(registry: string, module: DiscoveredModule): string;
|
|
43
|
+
export declare function resolveTargets(workspace: Workspace, ledger: Ledger, rungs: RegistryRungs): ResolvedTargets;
|
|
44
|
+
export interface ImportGraph {
|
|
45
|
+
/** In-repo modules each module imports by relative path. */
|
|
46
|
+
readonly imports: ReadonlyMap<ModuleKey, readonly ModuleKey[]>;
|
|
47
|
+
readonly diagnostics: readonly ReleaseDiagnostic[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The in-repo import edges, and whether every one of them agrees about where its
|
|
51
|
+
* target publishes.
|
|
52
|
+
*
|
|
53
|
+
* Reads manifest TEXT and nothing else — no payload, no claim on the shared
|
|
54
|
+
* builder. Both properties are load-bearing rather than incidental: the claim is
|
|
55
|
+
* what the payload builder refuses on, so a check that ran after one would never
|
|
56
|
+
* be reached, and its message speaks about a manifest published to two places
|
|
57
|
+
* rather than about the workspace file that said so.
|
|
58
|
+
*/
|
|
59
|
+
export declare function readImportGraph(workspace: Workspace, targets: ReadonlyMap<ModuleKey, ModuleTarget>, builder: ModulePayloadBuilder): Promise<ImportGraph>;
|
|
60
|
+
//# sourceMappingURL=targets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/release/targets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAEjF;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,eAAe,CA4BjB;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACpD;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,EAC7C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where each module publishes, resolved.
|
|
3
|
+
*
|
|
4
|
+
* The cascade is per module, because a workspace may declare a base per subtree:
|
|
5
|
+
* the entry's `registry:` → the `release:` block's → `--registry` →
|
|
6
|
+
* `TELO_OCI_REGISTRY` → the base that module's own ledger entry recorded.
|
|
7
|
+
*
|
|
8
|
+
* **The ledger is last, and that is a change.** It used to win over the flag and
|
|
9
|
+
* the variable, and a disagreement threw before any evidence was collected. A
|
|
10
|
+
* workspace that authors its destination has said where it publishes, and a
|
|
11
|
+
* cache of a past answer must not outrank it — so the ledger keeps its rung as a
|
|
12
|
+
* record for a workspace that authors nothing, and a disagreement between the
|
|
13
|
+
* two is reported per module by the planner rather than aborting the run.
|
|
14
|
+
*/
|
|
15
|
+
import { checkDestinationCollisions, checkImportDestinations, } from "@telorun/analyzer";
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
/**
|
|
18
|
+
* A module's publish destination: its registry base plus its own directory name.
|
|
19
|
+
*
|
|
20
|
+
* Identity is the ref, never `metadata.name` — this is the same rule the release
|
|
21
|
+
* job has always applied, lifted out of a shell script.
|
|
22
|
+
*
|
|
23
|
+
* This is the ROOT destination, which is a policy rather than a derivation:
|
|
24
|
+
* nothing in the graph can say which repo a module publishes to. The payload
|
|
25
|
+
* builder derives a SIBLING's from it instead of re-applying this rule, so the
|
|
26
|
+
* ref an artifact carries and the destination its dependency is pushed to are
|
|
27
|
+
* the same string by construction — and where those two answers disagree,
|
|
28
|
+
* `checkImportDestinations` says so before a payload is built.
|
|
29
|
+
*/
|
|
30
|
+
export function destinationFor(registry, module) {
|
|
31
|
+
return `${registry.replace(/\/+$/, "")}/${path.basename(module.dir)}`;
|
|
32
|
+
}
|
|
33
|
+
export function resolveTargets(workspace, ledger, rungs) {
|
|
34
|
+
const targets = new Map();
|
|
35
|
+
const diagnostics = [];
|
|
36
|
+
for (const module of workspace.modules) {
|
|
37
|
+
const registry = module.settings.registry ?? rungs.flag ?? rungs.env ?? ledger.modules.get(module.key)?.registry;
|
|
38
|
+
if (!registry) {
|
|
39
|
+
diagnostics.push({
|
|
40
|
+
severity: "error",
|
|
41
|
+
code: "NO_DESTINATION_KNOWN",
|
|
42
|
+
message: `${module.key} has no publish destination. Nothing has been published from it, its ` +
|
|
43
|
+
`entry declares no 'registry:' and neither does the 'release:' block — so declare one ` +
|
|
44
|
+
`in telo-workspace.yaml, pass --registry oci://host/org, or set TELO_OCI_REGISTRY.`,
|
|
45
|
+
});
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const base = registry.replace(/\/+$/, "");
|
|
49
|
+
targets.set(module.key, { registry: base, destination: destinationFor(base, module) });
|
|
50
|
+
}
|
|
51
|
+
diagnostics.push(...checkDestinationCollisions([...targets].map(([key, target]) => ({ key, destination: target.destination }))));
|
|
52
|
+
return { targets, diagnostics };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The in-repo import edges, and whether every one of them agrees about where its
|
|
56
|
+
* target publishes.
|
|
57
|
+
*
|
|
58
|
+
* Reads manifest TEXT and nothing else — no payload, no claim on the shared
|
|
59
|
+
* builder. Both properties are load-bearing rather than incidental: the claim is
|
|
60
|
+
* what the payload builder refuses on, so a check that ran after one would never
|
|
61
|
+
* be reached, and its message speaks about a manifest published to two places
|
|
62
|
+
* rather than about the workspace file that said so.
|
|
63
|
+
*/
|
|
64
|
+
export async function readImportGraph(workspace, targets, builder) {
|
|
65
|
+
const byDir = new Map(workspace.modules.map((module) => [path.resolve(module.dir), module]));
|
|
66
|
+
const imports = new Map();
|
|
67
|
+
const edges = [];
|
|
68
|
+
for (const module of workspace.modules) {
|
|
69
|
+
const target = targets.get(module.key);
|
|
70
|
+
if (!target || module.artifactKind === "image") {
|
|
71
|
+
imports.set(module.key, []);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const reached = [];
|
|
75
|
+
for (const entry of await builder.relativeImportsOf(module.manifestPath, target.destination)) {
|
|
76
|
+
const sibling = byDir.get(path.resolve(path.dirname(entry.manifestPath)));
|
|
77
|
+
if (!sibling || sibling.key === module.key)
|
|
78
|
+
continue;
|
|
79
|
+
reached.push(sibling.key);
|
|
80
|
+
const assigned = targets.get(sibling.key);
|
|
81
|
+
if (assigned) {
|
|
82
|
+
edges.push({
|
|
83
|
+
from: module.key,
|
|
84
|
+
to: sibling.key,
|
|
85
|
+
derived: entry.ref,
|
|
86
|
+
assigned: assigned.destination,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
imports.set(module.key, reached);
|
|
91
|
+
}
|
|
92
|
+
return { imports, diagnostics: checkImportDestinations(edges) };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=targets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/release/targets.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Finding the workspace, and the modules inside it.
|
|
3
3
|
*
|
|
4
4
|
* The Node half of `telo-workspace.yaml`: walking up from the cwd to find the
|
|
5
|
-
* marker, and filtering its
|
|
6
|
-
* marker is `workspace-marker.ts`'s — its location is a
|
|
7
|
-
* release concept — and parsing it is the analyzer's
|
|
5
|
+
* marker, and filtering the subtrees its `release.modules` names down to actual
|
|
6
|
+
* modules. Finding the marker is `workspace-marker.ts`'s — its location is a
|
|
7
|
+
* general anchor, not a release concept — and parsing it is the analyzer's
|
|
8
8
|
* (`release/workspace-config.ts`), so the editor reads the same file the same
|
|
9
9
|
* way.
|
|
10
10
|
*
|
|
@@ -19,8 +19,14 @@
|
|
|
19
19
|
* `version: 1.0.0` as a second module — and a listed directory holding no
|
|
20
20
|
* manifest simply is not one, which is how `apps/hub-web` and `apps/studio`
|
|
21
21
|
* fall out.
|
|
22
|
+
*
|
|
23
|
+
* **Selection and attribution are ONE decision.** The entry list is evaluated
|
|
24
|
+
* last-match-wins, so the entry that decides whether a directory is a module is
|
|
25
|
+
* the same entry whose settings that module resolves — which is why this reads
|
|
26
|
+
* the deciding index rather than asking for a filtered set and then guessing
|
|
27
|
+
* which pattern produced it.
|
|
22
28
|
*/
|
|
23
|
-
import { type ArtifactKind, type ModuleKey, type
|
|
29
|
+
import { type ArtifactKind, type ModuleKey, type ModuleSettings, type ReleaseDiagnostic, type ReleaseSettings } from "@telorun/analyzer";
|
|
24
30
|
export interface DiscoveredModule {
|
|
25
31
|
readonly key: ModuleKey;
|
|
26
32
|
/** Absolute path of the module's directory. */
|
|
@@ -31,12 +37,18 @@ export interface DiscoveredModule {
|
|
|
31
37
|
readonly name: string;
|
|
32
38
|
readonly version: string;
|
|
33
39
|
readonly artifactKind: ArtifactKind;
|
|
40
|
+
/** What the `release.modules` entry that claimed this module settles: the
|
|
41
|
+
* authored registry base (before the flag / env / ledger rungs) and the
|
|
42
|
+
* ignore list in force. */
|
|
43
|
+
readonly settings: ModuleSettings;
|
|
34
44
|
}
|
|
35
45
|
export interface Workspace {
|
|
36
46
|
/** Absolute path of the directory holding `telo-workspace.yaml` — the anchor
|
|
37
47
|
* every key, ledger entry and fragment path is relative to. */
|
|
38
48
|
readonly root: string;
|
|
39
|
-
readonly
|
|
49
|
+
readonly release: ReleaseSettings;
|
|
50
|
+
/** What the marker itself got wrong, in the plan's own vocabulary. */
|
|
51
|
+
readonly diagnostics: readonly ReleaseDiagnostic[];
|
|
40
52
|
readonly modules: readonly DiscoveredModule[];
|
|
41
53
|
}
|
|
42
54
|
export declare class WorkspaceNotFoundError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/release/workspace.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/release/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAY3B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC;;gCAE4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,SAAS;IACxB;oEACgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAsB,GAAG,SAAS,CA8BrE;AAoHD;;cAEc;AACd,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiBjF"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Finding the workspace, and the modules inside it.
|
|
3
3
|
*
|
|
4
4
|
* The Node half of `telo-workspace.yaml`: walking up from the cwd to find the
|
|
5
|
-
* marker, and filtering its
|
|
6
|
-
* marker is `workspace-marker.ts`'s — its location is a
|
|
7
|
-
* release concept — and parsing it is the analyzer's
|
|
5
|
+
* marker, and filtering the subtrees its `release.modules` names down to actual
|
|
6
|
+
* modules. Finding the marker is `workspace-marker.ts`'s — its location is a
|
|
7
|
+
* general anchor, not a release concept — and parsing it is the analyzer's
|
|
8
8
|
* (`release/workspace-config.ts`), so the editor reads the same file the same
|
|
9
9
|
* way.
|
|
10
10
|
*
|
|
@@ -19,9 +19,16 @@
|
|
|
19
19
|
* `version: 1.0.0` as a second module — and a listed directory holding no
|
|
20
20
|
* manifest simply is not one, which is how `apps/hub-web` and `apps/studio`
|
|
21
21
|
* fall out.
|
|
22
|
+
*
|
|
23
|
+
* **Selection and attribution are ONE decision.** The entry list is evaluated
|
|
24
|
+
* last-match-wins, so the entry that decides whether a directory is a module is
|
|
25
|
+
* the same entry whose settings that module resolves — which is why this reads
|
|
26
|
+
* the deciding index rather than asking for a filtered set and then guessing
|
|
27
|
+
* which pattern produced it.
|
|
22
28
|
*/
|
|
23
|
-
import { DEFAULT_MANIFEST_FILENAME, WORKSPACE_FILENAME, normalizeModuleKey,
|
|
24
|
-
import { GLOB_PRUNE_DIRS,
|
|
29
|
+
import { DEFAULT_MANIFEST_FILENAME, WORKSPACE_FILENAME, normalizeModuleKey, readManifestVersion, readWorkspaceConfig, requireReleaseSettings, settingsForModule, } from "@telorun/analyzer";
|
|
30
|
+
import { GLOB_PRUNE_DIRS, lastMatchIndex } from "@telorun/glob";
|
|
31
|
+
import { DiagnosticSeverity, workspaceDiagnostics, } from "@telorun/ide-support";
|
|
25
32
|
import { findWorkspaceRoot } from "../workspace-marker.js";
|
|
26
33
|
import * as fs from "node:fs";
|
|
27
34
|
import * as path from "node:path";
|
|
@@ -40,11 +47,76 @@ export function loadWorkspace(from = process.cwd()) {
|
|
|
40
47
|
if (!root) {
|
|
41
48
|
throw new WorkspaceNotFoundError(`No ${WORKSPACE_FILENAME} found in '${path.resolve(from)}' or any parent directory. ` +
|
|
42
49
|
`\`telo release\` works over a declared workspace — create one at the repo root naming ` +
|
|
43
|
-
`the subtrees that hold modules:\n\n modules:\n
|
|
50
|
+
`the subtrees that hold modules:\n\n release:\n modules:\n - modules/*\n - apps/*\n`);
|
|
44
51
|
}
|
|
45
52
|
const file = path.join(root, WORKSPACE_FILENAME);
|
|
46
|
-
const
|
|
47
|
-
|
|
53
|
+
const text = fs.readFileSync(file, "utf8");
|
|
54
|
+
const read = readWorkspaceConfig(text, WORKSPACE_FILENAME);
|
|
55
|
+
const release = requireReleaseSettings(read, WORKSPACE_FILENAME);
|
|
56
|
+
const manifestDirs = findManifestDirs(root);
|
|
57
|
+
return {
|
|
58
|
+
root,
|
|
59
|
+
release,
|
|
60
|
+
// The repo-shaped checks run HERE, not only in the editor. They exist to
|
|
61
|
+
// name the failure a four-way workspace split hid for months — an entry that
|
|
62
|
+
// discovers nothing — and a check that squiggles in VS Code while CI stays
|
|
63
|
+
// silent is the editor and the checker disagreeing, which is the one thing
|
|
64
|
+
// this repo does not let a surface do.
|
|
65
|
+
diagnostics: workspaceDiagnostics(text, {
|
|
66
|
+
match: lastMatchIndex,
|
|
67
|
+
moduleDirectories: () => manifestDirs,
|
|
68
|
+
directories: () => directoriesUnder(root),
|
|
69
|
+
enclosingMarkers: () => enclosingMarkers(root),
|
|
70
|
+
}).map(asReleaseDiagnostic),
|
|
71
|
+
modules: discoverModules(root, release, manifestDirs),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** A marker diagnostic in the vocabulary the release plan already reports in, so
|
|
75
|
+
* one printer renders both. */
|
|
76
|
+
function asReleaseDiagnostic(diagnostic) {
|
|
77
|
+
return {
|
|
78
|
+
severity: diagnostic.severity === DiagnosticSeverity.Error ? "error" : "warning",
|
|
79
|
+
code: diagnostic.code,
|
|
80
|
+
message: `${WORKSPACE_FILENAME}: ${diagnostic.message}`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Workspace-relative directories, pruned the way discovery prunes — the same
|
|
84
|
+
* set `env.roots` patterns are matched against at run time. */
|
|
85
|
+
function directoriesUnder(root) {
|
|
86
|
+
const found = [];
|
|
87
|
+
const walk = (dir) => {
|
|
88
|
+
let entries;
|
|
89
|
+
try {
|
|
90
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
if (!entry.isDirectory() || GLOB_PRUNE_DIRS.has(entry.name))
|
|
97
|
+
continue;
|
|
98
|
+
const child = path.join(dir, entry.name);
|
|
99
|
+
found.push(path.relative(root, child).split(path.sep).join("/"));
|
|
100
|
+
walk(child);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
walk(root);
|
|
104
|
+
return found;
|
|
105
|
+
}
|
|
106
|
+
/** Markers above this one — each gives everything beneath it a different cache
|
|
107
|
+
* root, different module keys and a different release scope. */
|
|
108
|
+
function enclosingMarkers(root) {
|
|
109
|
+
const found = [];
|
|
110
|
+
let dir = path.dirname(root);
|
|
111
|
+
for (;;) {
|
|
112
|
+
if (fs.existsSync(path.join(dir, WORKSPACE_FILENAME)))
|
|
113
|
+
found.push(dir);
|
|
114
|
+
const parent = path.dirname(dir);
|
|
115
|
+
if (parent === dir)
|
|
116
|
+
break;
|
|
117
|
+
dir = parent;
|
|
118
|
+
}
|
|
119
|
+
return found;
|
|
48
120
|
}
|
|
49
121
|
/**
|
|
50
122
|
* Every directory under a named subtree that holds a versioned module manifest.
|
|
@@ -56,11 +128,12 @@ export function loadWorkspace(from = process.cwd()) {
|
|
|
56
128
|
* manifests under `**\/.telo/manifests/` out — each of those is a published
|
|
57
129
|
* module's `telo.yaml` and would otherwise read as a module of this workspace.
|
|
58
130
|
*/
|
|
59
|
-
function discoverModules(root,
|
|
60
|
-
const candidates = findManifestDirs(root);
|
|
61
|
-
const matched = new Set(selectByPatterns(candidates, [...config.modules], { applyDefaultIgnore: false }));
|
|
131
|
+
function discoverModules(root, release, manifestDirs) {
|
|
62
132
|
const modules = [];
|
|
63
|
-
for (const key of [...
|
|
133
|
+
for (const key of [...manifestDirs].sort()) {
|
|
134
|
+
const settings = settingsForModule(release, key, lastMatchIndex);
|
|
135
|
+
if (!settings)
|
|
136
|
+
continue;
|
|
64
137
|
const dir = path.join(root, key);
|
|
65
138
|
const manifestPath = path.join(dir, DEFAULT_MANIFEST_FILENAME);
|
|
66
139
|
const text = fs.readFileSync(manifestPath, "utf8");
|
|
@@ -74,6 +147,7 @@ function discoverModules(root, config) {
|
|
|
74
147
|
name: readModuleName(text) ?? path.basename(dir),
|
|
75
148
|
version,
|
|
76
149
|
artifactKind: fs.existsSync(path.join(dir, "Dockerfile")) ? "image" : "registry",
|
|
150
|
+
settings,
|
|
77
151
|
});
|
|
78
152
|
}
|
|
79
153
|
return modules;
|
|
@@ -122,6 +196,8 @@ export function requireModule(workspace, key) {
|
|
|
122
196
|
? ` A module is named by its workspace-relative path — did you mean ${suffixMatches
|
|
123
197
|
.map((module) => `'${module.key}'`)
|
|
124
198
|
.join(" or ")}?`
|
|
125
|
-
: ` Modules are discovered under ${workspace.
|
|
199
|
+
: ` Modules are discovered under ${workspace.release.modules
|
|
200
|
+
.map((entry) => entry.path)
|
|
201
|
+
.join(", ")}.`));
|
|
126
202
|
}
|
|
127
203
|
//# sourceMappingURL=workspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/release/workspace.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/release/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telorun/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.89.0",
|
|
4
4
|
"description": "Telo CLI - Command-line interface for the Telo runtime.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"telo",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@telorun/analyzer": "0.
|
|
38
|
-
"@telorun/glob": "0.
|
|
39
|
-
"@telorun/ide-support": "0.
|
|
40
|
-
"@telorun/kernel": "0.
|
|
37
|
+
"@telorun/analyzer": "0.73.0",
|
|
38
|
+
"@telorun/glob": "0.3.0",
|
|
39
|
+
"@telorun/ide-support": "0.20.0",
|
|
40
|
+
"@telorun/kernel": "0.89.0",
|
|
41
41
|
"@telorun/sdk": "0.87.0",
|
|
42
|
-
"@telorun/templating": "0.
|
|
42
|
+
"@telorun/templating": "0.20.0",
|
|
43
43
|
"dotenv": "^17.4.0",
|
|
44
44
|
"packageurl-js": "^2.0.1",
|
|
45
45
|
"semver": "^7.7.3",
|