@xemahq/xema 0.31.2 → 0.33.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/commands/biome.js +1 -1
- package/dist/commands/biome.js.map +1 -1
- package/dist/commands/edition.d.ts.map +1 -1
- package/dist/commands/edition.js +3 -1
- package/dist/commands/edition.js.map +1 -1
- package/dist/commands/installation.js +3 -3
- package/dist/commands/installation.js.map +1 -1
- package/dist/commands/objects.js +1 -1
- package/dist/commands/objects.js.map +1 -1
- package/dist/dev/forked-worker.d.ts.map +1 -1
- package/dist/dev/forked-worker.js +9 -6
- package/dist/dev/forked-worker.js.map +1 -1
- package/dist/edition/verify-image-evidence.bundle.mjs +243 -160
- package/dist/edition/verify-image-evidence.bundle.provenance.json +50 -38
- package/dist/lib/control-plane.js +2 -2
- package/dist/lib/control-plane.js.map +1 -1
- package/dist/lib/plan-format.js.map +1 -1
- package/dist/lib/promise-from-sync.d.ts +2 -0
- package/dist/lib/promise-from-sync.d.ts.map +1 -0
- package/dist/lib/promise-from-sync.js +9 -0
- package/dist/lib/promise-from-sync.js.map +1 -0
- package/dist/runtime/biome-local-install.js +1 -1
- package/dist/runtime/biome-local-install.js.map +1 -1
- package/dist/runtime/boot-graph-loader.js.map +1 -1
- package/dist/runtime/config/sources-config.js.map +1 -1
- package/dist/runtime/edition/verb-map.d.ts +3 -1
- package/dist/runtime/edition/verb-map.d.ts.map +1 -1
- package/dist/runtime/edition/verb-map.js +4 -0
- package/dist/runtime/edition/verb-map.js.map +1 -1
- package/dist/runtime/infra/infra-catalog.d.ts +3 -1
- package/dist/runtime/infra/infra-catalog.d.ts.map +1 -1
- package/dist/runtime/infra/infra-catalog.js.map +1 -1
- package/dist/runtime/installation/lifecycle.d.ts.map +1 -1
- package/dist/runtime/installation/lifecycle.js +7 -6
- package/dist/runtime/installation/lifecycle.js.map +1 -1
- package/dist/runtime/installation/state-store.d.ts.map +1 -1
- package/dist/runtime/installation/state-store.js +2 -1
- package/dist/runtime/installation/state-store.js.map +1 -1
- package/dist/runtime/read-only-no-follow-flags.d.ts +2 -0
- package/dist/runtime/read-only-no-follow-flags.d.ts.map +1 -0
- package/dist/runtime/read-only-no-follow-flags.js +6 -0
- package/dist/runtime/read-only-no-follow-flags.js.map +1 -0
- package/dist/runtime/roster.d.ts.map +1 -1
- package/dist/runtime/roster.js +3 -5
- package/dist/runtime/roster.js.map +1 -1
- package/dist/runtime/run-manifest.d.ts.map +1 -1
- package/dist/runtime/run-manifest.js +1 -3
- package/dist/runtime/run-manifest.js.map +1 -1
- package/dist/runtime/secrets/managed-local-files.d.ts.map +1 -1
- package/dist/runtime/secrets/managed-local-files.js +2 -1
- package/dist/runtime/secrets/managed-local-files.js.map +1 -1
- package/dist/runtime/secrets/managed-local-key-provider.d.ts.map +1 -1
- package/dist/runtime/secrets/managed-local-key-provider.js +13 -10
- package/dist/runtime/secrets/managed-local-key-provider.js.map +1 -1
- package/dist/runtime/secrets/resolver.d.ts.map +1 -1
- package/dist/runtime/secrets/resolver.js +2 -1
- package/dist/runtime/secrets/resolver.js.map +1 -1
- package/dist/runtime/sources/credentials.d.ts.map +1 -1
- package/dist/runtime/sources/credentials.js +6 -9
- package/dist/runtime/sources/credentials.js.map +1 -1
- package/dist/runtime/store-client.d.ts.map +1 -1
- package/dist/runtime/store-client.js.map +1 -1
- package/dist/runtime/supervisor.js +2 -2
- package/dist/runtime/supervisor.js.map +1 -1
- package/edition/README.md +23 -0
- package/edition/build-ledger-completeness.mjs +67 -0
- package/edition/build-ledger.mjs +107 -0
- package/edition/checkout-indexed-source-repositories.mjs +57 -2
- package/edition/customer-definition.mjs +8 -0
- package/edition/develop-snapshot-inputs.mjs +4 -15
- package/edition/dist-check.mjs +11 -7
- package/edition/edition-biome-manifests.mjs +3 -2
- package/edition/edition-pin-verbs.mjs +183 -0
- package/edition/edition-pin.mjs +17 -0
- package/edition/edition-pinned-inputs.mjs +116 -0
- package/edition/edition-source-pins.mjs +209 -0
- package/edition/edition-unpin.mjs +16 -0
- package/edition/image-evidence.mjs +13 -7
- package/edition/indexes-at-pins.mjs +29 -0
- package/edition/release-catalogue.mjs +9 -8
- package/edition/release-edition-artifact.mjs +3 -2
- package/edition/resolve-distribution.mjs +16 -25
- package/edition/resolve-images.mjs +25 -11
- package/edition/seal-image-digests.mjs +12 -5
- package/edition/source-authority.mjs +8 -21
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/runtime/sources/credentials.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB,QAA8C,CAAC;AA2B5E,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,MAAyB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BhG;AAaD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAyB,GAC9B,IAAI,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/runtime/sources/credentials.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB,QAA8C,CAAC;AA2B5E,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,MAAyB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BhG;AAaD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAyB,GAC9B,IAAI,CAoDN;AAMD,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;gBAGrC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACrD,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAUzC,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAmB9C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUtC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAejF,OAAO,CAAC,MAAM;CAWf"}
|
|
@@ -53,19 +53,16 @@ function writeCredential(name, value, path = exports.CREDENTIALS_FILE) {
|
|
|
53
53
|
loadCredentialsFile(path);
|
|
54
54
|
const lines = existing.length === 0 ? [] : existing.split('\n');
|
|
55
55
|
const rendered = `${name}=${value}`;
|
|
56
|
-
|
|
57
|
-
const next = lines.map((raw) => {
|
|
56
|
+
const assignsName = (raw) => {
|
|
58
57
|
const line = raw.trim();
|
|
59
58
|
if (line.length === 0 || line.startsWith('#')) {
|
|
60
|
-
return
|
|
59
|
+
return false;
|
|
61
60
|
}
|
|
62
61
|
const eq = line.indexOf('=');
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return rendered;
|
|
68
|
-
});
|
|
62
|
+
return eq > 0 && line.slice(0, eq).trim() === name;
|
|
63
|
+
};
|
|
64
|
+
const replaced = lines.some(assignsName);
|
|
65
|
+
const next = lines.map((raw) => (assignsName(raw) ? rendered : raw));
|
|
69
66
|
if (!replaced) {
|
|
70
67
|
if (next.length > 0 && next[next.length - 1]?.trim() === '') {
|
|
71
68
|
next.pop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/runtime/sources/credentials.ts"],"names":[],"mappings":";;;AA6CA,kDA2BC;AAaD,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/runtime/sources/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-client.d.ts","sourceRoot":"","sources":["../../src/runtime/store-client.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU5E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAM3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAID,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAGD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAGD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"store-client.d.ts","sourceRoot":"","sources":["../../src/runtime/store-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-client.js","sourceRoot":"","sources":["../../src/runtime/store-client.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"store-client.js","sourceRoot":"","sources":["../../src/runtime/store-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ class Supervisor {
|
|
|
66
66
|
const mandatoryFailures = results.flatMap((result, index) => {
|
|
67
67
|
const member = wave.members[index];
|
|
68
68
|
if (member === undefined ||
|
|
69
|
-
result
|
|
69
|
+
result.status !== 'rejected' ||
|
|
70
70
|
member.tier !== MANDATORY_TIER) {
|
|
71
71
|
return [];
|
|
72
72
|
}
|
|
@@ -80,7 +80,7 @@ class Supervisor {
|
|
|
80
80
|
const cleanupFailures = results.flatMap((result, index) => {
|
|
81
81
|
const member = wave.members[index];
|
|
82
82
|
if (member === undefined ||
|
|
83
|
-
result
|
|
83
|
+
result.status !== 'rejected' ||
|
|
84
84
|
!(result.reason instanceof forked_worker_1.PreReadyCleanupError)) {
|
|
85
85
|
return [];
|
|
86
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/runtime/supervisor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/runtime/supervisor.ts"],"names":[],"mappings":"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"}
|
package/edition/README.md
CHANGED
|
@@ -100,6 +100,29 @@ The CLI is coupled to the kernel's edition protocol, not to the kernel package.
|
|
|
100
100
|
- `xema edition evidence statement entitlement stage` writes entitlement predicate v2 (`lockDigest`, `catalogueDigest`, read from the edition's committed locks), so it takes `--editions-root` besides `--data-root` and `--kernel`.
|
|
101
101
|
- The runtime image source index is v2 and carries operator-stated `producerWorkflowPins` (the workflow commit a producer certificate must be signed from, per repository). `xema edition index runtime-image-source [--producer-workflow-pin <owner/repo>=<40-hex>]...` preserves the committed pins exactly; each flag sets one repository's pin (repeatable; a repeated or non-GitHub `owner/repo` is refused; only `--trusted-write` writes an index, so the flag with any other mode, `--check-sources` included, is refused); a bootstrap index with none writes `[]`. A v1 index is refused, never migrated: delete it and bootstrap a new one with `--kernel-commit`.
|
|
102
102
|
|
|
103
|
+
## Build ledger completeness
|
|
104
|
+
|
|
105
|
+
`build-ledger.json` schema 2 records, per repository, the commits that published images and each `imageRef:contentHash` with its platforms and digest (schema 1, a bare commit list, is still read and is removed once the data root is re-projected). With a v2 ledger, `resolve-images` (and so `dist:check` and an exact-commit `--at` pin) refuses an edition when any resolved subject lacks its contentHash or one of that edition's required platforms in the ledger, listing every missing coordinate with the repository pin that produced it. There is no override; a v1 ledger gets no check.
|
|
106
|
+
|
|
107
|
+
## Per-edition source pins
|
|
108
|
+
|
|
109
|
+
A vendor edition's `xema-distribution.json` may carry the CLI-owned key `sourcePins: [{ "repo": "repos/<name>", "ref": "<40-hex commit>", "until": "<exit condition>" }]`: the edition resolves that repository at the exact commit instead of the data root's shared `repositoryPins`. The key is strict (non-empty array, exactly `{repo, ref, until}`, a graph repository, an exact lowercase commit, a non-empty `until`, no repository twice), is removed before the kernel parse, and is refused in a customer definition. The kernel contract repository cannot be held: its authority stays data-root-wide.
|
|
110
|
+
|
|
111
|
+
Holds are sparse overrides: an entry exists only for a repository the edition holds back, so an entry equal to the shared `repositoryPin` is refused ("not a hold"). Each entry carries its exit condition in `until`, and the parser refuses an entry without one. Do not edit `sourcePins` by hand; the verbs are the supported way:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
xema edition pin <edition> <repo> <ref> --until "<exit condition>" --data-root <dir> --editions-root <dir> --sources-root <dir> --kernel <dir>
|
|
115
|
+
xema edition unpin <edition> [<repo>] --data-root <dir> --editions-root <dir> --sources-root <dir> --kernel <dir>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`pin` applies the checks below (and the graph, kernel and not-a-hold rules) before it writes, adds or replaces the entry in the edition's `xema-distribution.json` keeping the file's formatting and key order, and re-resolves the edition; a failed re-resolve restores the edition directory (definition and locks) byte for byte and rethrows. `unpin` removes one hold (or all of the edition's), drops the key when none is left, and re-resolves. `xema edition check` prints every active hold, informationally: `[dist:check] hold: <edition> <repo> @<ref12> until: <exit condition>`, then `N hold(s) active` or `no holds`.
|
|
119
|
+
|
|
120
|
+
A held commit is authorized, never trusted, and nothing overrides it: the commit exists in the source checkout; it is contained in `refs/remotes/origin/main` (a missing ref refuses); and it is a built commit (in the build ledger or the repository's evidence tree; a repository neither knows publishes no images and needs containment only). Every refusal is listed at once.
|
|
121
|
+
|
|
122
|
+
`edition-pinned-inputs.mjs` is the one per-edition source of the three indexes and the pins: an edition holding nothing reads the committed data-root files unchanged; a holding edition has them rebuilt at its effective pins by the release builders (`indexes-at-pins.mjs`, the builders a develop snapshot uses). Resolve, images, check, seal, catalogue, artifact and biome manifests all read through it, so `images.lock.json` `sourceCommit`, the content hashes and the catalogue rows carry the held commit and `xema edition check` reports a held edition stale exactly when a fresh resolve at its own pins differs. Index currency checks and the index builders stay on the shared pins. The evidence reader (`xema edition locks`, the verifier) grades each subject against the edition's effective pins, so the evidence verifier bundle changes and the data root repins evidence trust when it adopts this CLI. No lock schema changes.
|
|
123
|
+
|
|
124
|
+
`sourcePins` are not inherited and do not apply on the develop channel: a snapshot replaces every pin. `checkout-indexed-source-repositories.mjs --editions-root <dir>` additionally fetches every edition's held commits and the main history of the held repositories, so containment can be checked in CI.
|
|
125
|
+
|
|
103
126
|
## Customer editions
|
|
104
127
|
|
|
105
128
|
A customer edition is resolved against a catalogue pinned in `catalogue.pin.json` beside the definition file. The catalogue is the ceiling: it supplies availability, pins and digests and never adds a component. It also names the kernel: `kernel` is `{name, version, integrity}` (`@xemahq/contracts`, an exact `x.y.z`, the npm `sha512-` integrity of that tarball), and a catalogue without it is refused.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Release-lane completeness: with a v2 ledger, every resolved subject's
|
|
2
|
+
// `imageRef:contentHash` must be published with every platform its edition
|
|
3
|
+
// requires. Seal stays the final registry check; this refuses earlier, and
|
|
4
|
+
// names everything missing in one error.
|
|
5
|
+
import { platformIdentity } from './verify-image-platforms.mjs';
|
|
6
|
+
|
|
7
|
+
export class BuildLedgerIncompleteError extends Error {
|
|
8
|
+
constructor(distributionId, missing) {
|
|
9
|
+
const lines = missing.map(
|
|
10
|
+
(entry) =>
|
|
11
|
+
` ${entry.imageRef}:${entry.contentHash} lacks ${entry.platform} (repo ${entry.repo} pinned at ${entry.sourceCommit})`,
|
|
12
|
+
);
|
|
13
|
+
super(
|
|
14
|
+
`edition "${distributionId}" names ${missing.length} image coordinate(s) the build ledger ` +
|
|
15
|
+
`does not show published with every required platform:\n${lines.join('\n')}\n` +
|
|
16
|
+
`Build or re-project those images, or pin a repository commit whose images are complete.`,
|
|
17
|
+
);
|
|
18
|
+
this.name = 'BuildLedgerIncompleteError';
|
|
19
|
+
this.missing = missing;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class BuildLedgerMissingError extends Error {
|
|
24
|
+
constructor(distributionId, expectedAt) {
|
|
25
|
+
super(
|
|
26
|
+
`edition "${distributionId}" is resolved on the release lane, which needs the build ledger, but ` +
|
|
27
|
+
`${expectedAt} does not exist. Project the ledger into the data root; an absent ledger is not ` +
|
|
28
|
+
`read as "nothing to check".`,
|
|
29
|
+
);
|
|
30
|
+
this.name = 'BuildLedgerMissingError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* `ledger` is the parsed ledger (`readBuildLedger`); null means it is absent and is REFUSED.
|
|
36
|
+
* A v1 ledger records no per-image facts, so nothing is checked (transitional, like the v1 parser branch).
|
|
37
|
+
*/
|
|
38
|
+
export function assertBuildLedgerComplete({
|
|
39
|
+
ledger,
|
|
40
|
+
distributionId,
|
|
41
|
+
subjects,
|
|
42
|
+
requiredPlatforms,
|
|
43
|
+
expectedAt,
|
|
44
|
+
}) {
|
|
45
|
+
if (ledger === null) {throw new BuildLedgerMissingError(distributionId, expectedAt);}
|
|
46
|
+
if (ledger.schemaVersion !== 2) {return;}
|
|
47
|
+
const required = requiredPlatforms.map(platformIdentity);
|
|
48
|
+
const missing = [];
|
|
49
|
+
for (const subject of subjects) {
|
|
50
|
+
const repository = ledger.repositories[subject.repo];
|
|
51
|
+
const published =
|
|
52
|
+
repository?.images?.[subject.imageRef]?.contentHashes?.[subject.contentHash];
|
|
53
|
+
const have = new Set(published?.platforms ?? []);
|
|
54
|
+
for (const platform of required) {
|
|
55
|
+
if (!have.has(platform)) {
|
|
56
|
+
missing.push({
|
|
57
|
+
repo: subject.repo,
|
|
58
|
+
sourceCommit: subject.sourceCommit,
|
|
59
|
+
imageRef: subject.imageRef,
|
|
60
|
+
contentHash: subject.contentHash,
|
|
61
|
+
platform,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (missing.length > 0) {throw new BuildLedgerIncompleteError(distributionId, missing);}
|
|
67
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// The committed build ledger (`build-ledger.json`): which commits of each source
|
|
2
|
+
// repository published images, and (schema v2) which `imageRef:contentHash`
|
|
3
|
+
// coordinates are published with which platforms.
|
|
4
|
+
//
|
|
5
|
+
// `node:` builtins plus the workspace locator only, so `source-authority.mjs`
|
|
6
|
+
// (which resolves from a bare checkout) can read it.
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
|
|
10
|
+
import { dataRoot } from './edition-workspace.mjs';
|
|
11
|
+
|
|
12
|
+
export const BUILD_LEDGER_FILE = 'build-ledger.json';
|
|
13
|
+
|
|
14
|
+
export class BuildLedgerError extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(`${BUILD_LEDGER_FILE} is malformed: ${message}`);
|
|
17
|
+
this.name = 'BuildLedgerError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const SHA1_PATTERN = /^[0-9a-f]{40}$/u;
|
|
22
|
+
const SHA256_PATTERN = /^[0-9a-f]{64}$/u;
|
|
23
|
+
const DIGEST_PATTERN = /^sha256:[0-9a-f]{64}$/u;
|
|
24
|
+
const PLATFORM_PATTERN = /^[a-z0-9]+\/[a-z0-9]+(\/[a-z0-9]+)?$/u;
|
|
25
|
+
|
|
26
|
+
const isRecord = (value) =>
|
|
27
|
+
value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
28
|
+
|
|
29
|
+
function parseImages(repo, images) {
|
|
30
|
+
if (!isRecord(images)) {
|
|
31
|
+
throw new BuildLedgerError(`repositories["${repo}"].images must be an object`);
|
|
32
|
+
}
|
|
33
|
+
for (const [imageRef, image] of Object.entries(images)) {
|
|
34
|
+
const where = `repositories["${repo}"].images["${imageRef}"]`;
|
|
35
|
+
if (!isRecord(image) || !isRecord(image.contentHashes)) {
|
|
36
|
+
throw new BuildLedgerError(`${where}.contentHashes must be an object`);
|
|
37
|
+
}
|
|
38
|
+
for (const [hash, entry] of Object.entries(image.contentHashes)) {
|
|
39
|
+
const at = `${where}.contentHashes["${hash}"]`;
|
|
40
|
+
if (!SHA256_PATTERN.test(hash)) {
|
|
41
|
+
throw new BuildLedgerError(`${at}: key is not 64 lowercase hex characters`);
|
|
42
|
+
}
|
|
43
|
+
if (
|
|
44
|
+
!isRecord(entry) ||
|
|
45
|
+
!Array.isArray(entry.platforms) ||
|
|
46
|
+
entry.platforms.length === 0 ||
|
|
47
|
+
entry.platforms.some(
|
|
48
|
+
(platform) => typeof platform !== 'string' || !PLATFORM_PATTERN.test(platform),
|
|
49
|
+
) ||
|
|
50
|
+
new Set(entry.platforms).size !== entry.platforms.length
|
|
51
|
+
) {
|
|
52
|
+
throw new BuildLedgerError(
|
|
53
|
+
`${at}.platforms must be a non-empty list of distinct "os/arch" strings`,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
if (typeof entry.digest !== 'string' || !DIGEST_PATTERN.test(entry.digest)) {
|
|
57
|
+
throw new BuildLedgerError(`${at}.digest must be "sha256:<64 hex>"`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Parse a ledger document strictly. Returns `{ schemaVersion, repositories }`
|
|
65
|
+
* where each repository is `{ commits, images }`; `images` is null for v1.
|
|
66
|
+
*/
|
|
67
|
+
export function parseBuildLedger(raw) {
|
|
68
|
+
if (
|
|
69
|
+
!isRecord(raw) ||
|
|
70
|
+
(raw.schemaVersion !== 1 && raw.schemaVersion !== 2) ||
|
|
71
|
+
!isRecord(raw.repositories)
|
|
72
|
+
) {
|
|
73
|
+
throw new BuildLedgerError('expected schemaVersion 1 or 2 with a repositories object');
|
|
74
|
+
}
|
|
75
|
+
const repositories = {};
|
|
76
|
+
for (const [repo, value] of Object.entries(raw.repositories)) {
|
|
77
|
+
// v1 is removed once the data root is re-projected at v2.
|
|
78
|
+
if (raw.schemaVersion === 1) {
|
|
79
|
+
if (!Array.isArray(value)) {
|
|
80
|
+
throw new BuildLedgerError(`repositories["${repo}"] must be a commit list`);
|
|
81
|
+
}
|
|
82
|
+
repositories[repo] = { commits: value, images: null };
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (!isRecord(value) || !Array.isArray(value.commits)) {
|
|
86
|
+
throw new BuildLedgerError(`repositories["${repo}"].commits must be a list`);
|
|
87
|
+
}
|
|
88
|
+
if (value.commits.some((commit) => typeof commit !== 'string' || !SHA1_PATTERN.test(commit))) {
|
|
89
|
+
throw new BuildLedgerError(`repositories["${repo}"].commits holds a non-40-hex entry`);
|
|
90
|
+
}
|
|
91
|
+
parseImages(repo, value.images);
|
|
92
|
+
repositories[repo] = { commits: value.commits, images: value.images };
|
|
93
|
+
}
|
|
94
|
+
return { schemaVersion: raw.schemaVersion, repositories };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** The parsed ledger of a data root, or null when none is projected. Malformed THROWS. */
|
|
98
|
+
export function readBuildLedger(distributionsDir = dataRoot()) {
|
|
99
|
+
let raw;
|
|
100
|
+
try {
|
|
101
|
+
raw = JSON.parse(readFileSync(join(distributionsDir, BUILD_LEDGER_FILE), 'utf8'));
|
|
102
|
+
} catch (error) {
|
|
103
|
+
if (error?.code === 'ENOENT') {return null;}
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
return parseBuildLedger(raw);
|
|
107
|
+
}
|
|
@@ -4,8 +4,10 @@ import { execFileSync } from 'node:child_process';
|
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
5
5
|
import { dirname, resolve } from 'node:path';
|
|
6
6
|
|
|
7
|
+
import { discoverDistributionIds } from './distribution-paths.mjs';
|
|
7
8
|
import { editionWorkspaceConfig } from './edition-config.mjs';
|
|
8
|
-
import {
|
|
9
|
+
import { readEditionSourcePins } from './edition-source-pins.mjs';
|
|
10
|
+
import { WorkspaceRoot, configureEditionWorkspaceFromProcess, configuredWorkspace, editionsRoot, isEntryModule, platformServiceIndexPath, runtimeImageSourceIndexPath, sourcesRoot } from './edition-workspace.mjs';
|
|
9
11
|
import { holdSource, withSourceGitEnv } from './git-source-auth.mjs';
|
|
10
12
|
import { applyPinSource, snapshotPinSource } from './pin-source.mjs';
|
|
11
13
|
import { readStrictJsonFile } from './strict-json.mjs';
|
|
@@ -74,11 +76,49 @@ export function platformServiceExtraCommits(plan, platformServiceIndex) {
|
|
|
74
76
|
return new Map([...extra].map(([repo, commits]) => [repo, [...commits]]));
|
|
75
77
|
}
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
/**
|
|
80
|
+
* The commits each checkout must also hold for the editions that hold a
|
|
81
|
+
* repository (`sourcePins`): per repository, the distinct held commits other
|
|
82
|
+
* than the repository's own pin. A held repository is also one whose published
|
|
83
|
+
* history is needed, so containment in `origin/main` can be shown: those repos
|
|
84
|
+
* are in the returned map even when every held commit is the pin itself.
|
|
85
|
+
* A held repository without a repository pin is refused: there is no checkout
|
|
86
|
+
* to fetch into.
|
|
87
|
+
*
|
|
88
|
+
* @param {{ repo: string, sourceCommit: string }[]} plan
|
|
89
|
+
* @param {Map<string, { repo: string, ref: string }[]>} sourcePinsByEdition
|
|
90
|
+
* @returns {Map<string, string[]>}
|
|
91
|
+
*/
|
|
92
|
+
export function editionHeldCommits(plan, sourcePinsByEdition) {
|
|
93
|
+
const pinned = new Map(plan.map((entry) => [entry.repo, entry.sourceCommit]));
|
|
94
|
+
const held = new Map();
|
|
95
|
+
for (const [id, sourcePins] of sourcePinsByEdition) {
|
|
96
|
+
for (const { repo, ref } of sourcePins) {
|
|
97
|
+
if (!pinned.has(repo)) {
|
|
98
|
+
throw new Error(`edition "${id}" holds ${repo}, which has no repository pin in the runtime image source index`);
|
|
99
|
+
}
|
|
100
|
+
if (!held.has(repo)) {held.set(repo, new Set());}
|
|
101
|
+
if (ref !== pinned.get(repo)) {held.get(repo).add(ref);}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return new Map([...held].map(([repo, commits]) => [repo, [...commits]]));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** The `sourcePins` of every edition under the configured editions root. */
|
|
108
|
+
export function readEditionsSourcePins() {
|
|
109
|
+
return new Map(
|
|
110
|
+
discoverDistributionIds(editionsRoot())
|
|
111
|
+
.map((id) => [id, readEditionSourcePins(id)])
|
|
112
|
+
.filter(([, sourcePins]) => sourcePins.length > 0),
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function checkoutIndexedSources({ workspaceRoot, index, platformServiceIndex, editionSourcePins = new Map(), env = process.env, runGit = git }) {
|
|
78
117
|
if (!workspaceRoot) {throw new Error('workspaceRoot is required');}
|
|
79
118
|
const workspace = editionWorkspaceConfig();
|
|
80
119
|
const plan = sourceCheckoutPlan(index, workspace);
|
|
81
120
|
const extraCommits = platformServiceExtraCommits(plan, platformServiceIndex);
|
|
121
|
+
const heldCommits = editionHeldCommits(plan, editionSourcePins);
|
|
82
122
|
for (const entry of plan) {holdSource({ name: entry.repo, url: entry.repositoryUrl }, workspace, env);}
|
|
83
123
|
for (const entry of plan) {
|
|
84
124
|
const target = resolve(workspaceRoot, entry.repo);
|
|
@@ -102,6 +142,15 @@ export function checkoutIndexedSources({ workspaceRoot, index, platformServiceIn
|
|
|
102
142
|
runGit(['-C', target, 'fetch', '--quiet', '--depth=1', 'origin', commit], gitEnv);
|
|
103
143
|
console.log(`[source-checkout] ${entry.repo} also holds platform-service commit ${commit}`);
|
|
104
144
|
}
|
|
145
|
+
// A repository an edition holds: its main history (containment in origin/main is checked from it,
|
|
146
|
+
// with no depth), then each held commit.
|
|
147
|
+
if (heldCommits.has(entry.repo)) {
|
|
148
|
+
runGit(['-C', target, 'fetch', '--quiet', 'origin', '+refs/heads/main:refs/remotes/origin/main'], gitEnv);
|
|
149
|
+
for (const commit of heldCommits.get(entry.repo)) {
|
|
150
|
+
runGit(['-C', target, 'fetch', '--quiet', '--depth=1', 'origin', commit], gitEnv);
|
|
151
|
+
console.log(`[source-checkout] ${entry.repo} also holds edition-held commit ${commit}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
105
154
|
});
|
|
106
155
|
console.log(`[source-checkout] ${entry.repo} @ ${entry.sourceCommit}`);
|
|
107
156
|
}
|
|
@@ -126,10 +175,16 @@ export function indexForCheckout(committedIndex, argv) {
|
|
|
126
175
|
if (isEntryModule(import.meta.url)) {
|
|
127
176
|
try {
|
|
128
177
|
configureEditionWorkspaceFromProcess([WorkspaceRoot.Data, WorkspaceRoot.Sources]);
|
|
178
|
+
// `--editions-root` is optional: given, the plan also holds every edition's held commits.
|
|
179
|
+
const withEditions = configuredWorkspace()[WorkspaceRoot.Editions] !== undefined;
|
|
180
|
+
if (withEditions && process.argv.length > 2) {
|
|
181
|
+
throw new Error('--editions-root and --snapshot-pins do not combine: a snapshot replaces every pin, so no edition holds a repository');
|
|
182
|
+
}
|
|
129
183
|
const index = indexForCheckout(JSON.parse(readFileSync(runtimeImageSourceIndexPath(), 'utf8')), process.argv.slice(2));
|
|
130
184
|
const count = checkoutIndexedSources({
|
|
131
185
|
workspaceRoot: sourcesRoot(),
|
|
132
186
|
index,
|
|
187
|
+
editionSourcePins: withEditions ? readEditionsSourcePins() : new Map(),
|
|
133
188
|
platformServiceIndex: JSON.parse(readFileSync(platformServiceIndexPath(), 'utf8')),
|
|
134
189
|
});
|
|
135
190
|
console.log(`[source-checkout] materialized ${count} indexed repositories at exact commits`);
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// configuration the kernel document does not carry.
|
|
8
8
|
|
|
9
9
|
import { SOURCE_IMAGE_FLAG } from './customer-flags.mjs';
|
|
10
|
+
import { SOURCE_PINS_KEY } from './edition-source-pins.mjs';
|
|
10
11
|
|
|
11
12
|
export class CustomerDefinitionError extends Error {
|
|
12
13
|
constructor(message, options) {
|
|
@@ -41,6 +42,13 @@ export function parseCustomerDefinition(schemas, raw) {
|
|
|
41
42
|
if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
42
43
|
throw new CustomerDefinitionError('a customer definition must be a JSON object');
|
|
43
44
|
}
|
|
45
|
+
// `sourcePins` holds a first-party repository of the VENDOR graph at a commit; a customer builds none.
|
|
46
|
+
if (Object.hasOwn(raw, SOURCE_PINS_KEY)) {
|
|
47
|
+
throw new CustomerDefinitionError(
|
|
48
|
+
`customer definition "${raw.id}": "${SOURCE_PINS_KEY}" is a vendor-edition key and is refused here; ` +
|
|
49
|
+
'a customer pins an external source with sources[].ref',
|
|
50
|
+
);
|
|
51
|
+
}
|
|
44
52
|
const { [MIRROR_KEY]: mirror, ...document } = raw;
|
|
45
53
|
for (const source of Array.isArray(document.sources) ? document.sources : []) {
|
|
46
54
|
const stated = ['imageRegistry', 'imageNamePrefix'].find((key) => source !== null && typeof source === 'object' && key in source);
|
|
@@ -17,13 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
import { execFileSync } from 'node:child_process';
|
|
19
19
|
|
|
20
|
-
import { buildValidatedPlatformServiceIndex } from './build-platform-service-index.mjs';
|
|
21
|
-
import { buildTrustedIndex, validateRuntimeImageSourceIndex } from './build-runtime-image-source-index.mjs';
|
|
22
20
|
import { dataRoot, deployRoot, editionsRoot, kernelRepoDir, runtimeImageSourceIndexPath } from './edition-workspace.mjs';
|
|
23
|
-
import {
|
|
24
|
-
buildBiomeIndex,
|
|
25
|
-
distributionBiomeSourceRepositories,
|
|
26
|
-
} from './lib.mjs';
|
|
21
|
+
import { buildIndexesAtPins } from './indexes-at-pins.mjs';
|
|
27
22
|
import {
|
|
28
23
|
dataPinKey,
|
|
29
24
|
EDITIONS_ROOT_PIN_KEY,
|
|
@@ -34,7 +29,6 @@ import {
|
|
|
34
29
|
validateSnapshotPins,
|
|
35
30
|
} from './pin-source.mjs';
|
|
36
31
|
import { composeEdition } from './resolve-distribution.mjs';
|
|
37
|
-
import { createPinnedSourceAuthority } from './source-authority.mjs';
|
|
38
32
|
import { readStrictJsonFile } from './strict-json.mjs';
|
|
39
33
|
|
|
40
34
|
function git(dir, args) {
|
|
@@ -91,14 +85,9 @@ export async function buildSnapshotInputs({ id, pins, schemas }) {
|
|
|
91
85
|
declaredSourceNames: composed.declaredSourceNames,
|
|
92
86
|
editionsRootExternal: editionsRoot() !== dataRoot(),
|
|
93
87
|
});
|
|
94
|
-
const
|
|
95
|
-
|
|
88
|
+
const { platformServiceIndex, biomeIndex, runtimeImageSourceIndex } = await buildIndexesAtPins({
|
|
89
|
+
schemas,
|
|
90
|
+
repositoryPins: applyPinSource(committedIndex, pinSource).repositoryPins,
|
|
96
91
|
});
|
|
97
|
-
const platformServiceIndex = buildValidatedPlatformServiceIndex(schemas, sourceAuthority);
|
|
98
|
-
const biomeIndex = await buildBiomeIndex(platformServiceIndex, distributionBiomeSourceRepositories(), sourceAuthority);
|
|
99
|
-
const runtimeImageSourceIndex = schemas.parseRuntimeImageSourceIndex(
|
|
100
|
-
await buildTrustedIndex(schemas, sourceAuthority, undefined, undefined, { biomeIndex, platformServiceIndex }),
|
|
101
|
-
);
|
|
102
|
-
await validateRuntimeImageSourceIndex(runtimeImageSourceIndex, schemas, { biomeIndex, platformServiceIndex });
|
|
103
92
|
return { pinSource, composed, platformServiceIndex, biomeIndex, runtimeImageSourceIndex };
|
|
104
93
|
}
|
package/edition/dist-check.mjs
CHANGED
|
@@ -46,7 +46,9 @@ import {
|
|
|
46
46
|
checkEditionChartSet,
|
|
47
47
|
} from './edition-chart-set.mjs';
|
|
48
48
|
import { editionWorkspaceConfig } from './edition-config.mjs';
|
|
49
|
+
import { editionPinnedInputs } from './edition-pinned-inputs.mjs';
|
|
49
50
|
import { assertKernelEditionProtocol } from './edition-protocol.mjs';
|
|
51
|
+
import { describeEditionHolds } from './edition-source-pins.mjs';
|
|
50
52
|
import { WorkspaceRoot, biomeIndexPath, configureEditionWorkspaceFromProcess, editionsRoot, isEntryModule, kernelPackageDir, platformServiceIndexPath, runtimeImageSourceIndexPath, workspaceArgv } from './edition-workspace.mjs';
|
|
51
53
|
import { checkEvidenceTrustPolicy } from './evidence-trust-policy.mjs';
|
|
52
54
|
import {
|
|
@@ -73,7 +75,7 @@ import {
|
|
|
73
75
|
sourceTreeLocator,
|
|
74
76
|
} from './resolve-images.mjs';
|
|
75
77
|
import { withoutSealedDigests } from './seal-image-digests.mjs';
|
|
76
|
-
import {
|
|
78
|
+
import { createPinnedSourceAuthority } from './source-authority.mjs';
|
|
77
79
|
|
|
78
80
|
if (isEntryModule(import.meta.url)) {
|
|
79
81
|
configureEditionWorkspaceFromProcess([WorkspaceRoot.Data, WorkspaceRoot.Editions, WorkspaceRoot.Sources, WorkspaceRoot.Kernel, WorkspaceRoot.Deploy, WorkspaceRoot.Cache]);
|
|
@@ -149,7 +151,7 @@ async function compareCommittedLock(lockPath, fresh) {
|
|
|
149
151
|
* edition's source-walked ones) on green, `null` otherwise — the authorization
|
|
150
152
|
* check below looks the lock's biomes up in that same index.
|
|
151
153
|
*/
|
|
152
|
-
async function checkDistributionLock(id) {
|
|
154
|
+
export async function checkDistributionLock(id) {
|
|
153
155
|
const lockPath = join(editionsRoot(), id, 'distribution.lock.json');
|
|
154
156
|
try {
|
|
155
157
|
const { lock: fresh, index } = await resolveDistributionWithIndex(id);
|
|
@@ -282,9 +284,9 @@ export async function checkImagesLock(id, checkSourceEvidence) {
|
|
|
282
284
|
),
|
|
283
285
|
),
|
|
284
286
|
);
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
287
|
+
// The EDITION's indexes: the committed ones, or rebuilt at the repositories it holds.
|
|
288
|
+
const pinned = await editionPinnedInputs(id, { schemas });
|
|
289
|
+
const runtimeSourceIndex = pinned.runtimeImageSourceIndex;
|
|
288
290
|
const requiredPlatforms = resolveDistributionRequiredPlatforms(schemas, id);
|
|
289
291
|
// The composed-process subjects are read from each producing repository's
|
|
290
292
|
// DECLARATION at the pinned commit — the one structural input not in the
|
|
@@ -298,7 +300,7 @@ export async function checkImagesLock(id, checkSourceEvidence) {
|
|
|
298
300
|
schemas,
|
|
299
301
|
requiredPlatforms,
|
|
300
302
|
resolveDistributionDeclaredSources(schemas, id),
|
|
301
|
-
{ biomeIndex:
|
|
303
|
+
{ biomeIndex: pinned.biomeIndex },
|
|
302
304
|
),
|
|
303
305
|
schemas,
|
|
304
306
|
requiredPlatforms,
|
|
@@ -867,7 +869,7 @@ export async function checkBiomeContentHashes(id) {
|
|
|
867
869
|
const imageLock = schemas.parseImageLock(
|
|
868
870
|
JSON.parse(readFileSync(join(editionsRoot(), id, 'images.lock.json'), 'utf8')),
|
|
869
871
|
);
|
|
870
|
-
const authority = createPinnedSourceAuthority({ pins:
|
|
872
|
+
const authority = createPinnedSourceAuthority({ pins: (await editionPinnedInputs(id, { schemas })).repositoryPins });
|
|
871
873
|
await verifyBiomeContentHashes({
|
|
872
874
|
schemas,
|
|
873
875
|
lock,
|
|
@@ -927,6 +929,8 @@ async function main() {
|
|
|
927
929
|
|
|
928
930
|
const distributionIds = discoverDistributionIds();
|
|
929
931
|
|
|
932
|
+
for (const line of describeEditionHolds(distributionIds)) {console.log(line);}
|
|
933
|
+
|
|
930
934
|
if (!checkConfinementScope(distributionIds)) {failed = true;}
|
|
931
935
|
|
|
932
936
|
// 1b. Capability-domain reservation table (see checkOwnershipInvariant).
|
|
@@ -18,6 +18,7 @@ import { join } from 'node:path';
|
|
|
18
18
|
|
|
19
19
|
import { pinnedBiomeManifests } from './biome-content.mjs';
|
|
20
20
|
import { assertCanonicalDistributionId } from './distribution-paths.mjs';
|
|
21
|
+
import { editionPinnedInputs } from './edition-pinned-inputs.mjs';
|
|
21
22
|
import {
|
|
22
23
|
WorkspaceRoot,
|
|
23
24
|
configureEditionWorkspaceFromArgv,
|
|
@@ -26,7 +27,7 @@ import {
|
|
|
26
27
|
} from './edition-workspace.mjs';
|
|
27
28
|
import { loadKernelDistributionSchemas, serializeJson } from './lib.mjs';
|
|
28
29
|
import { externalSourceTrees, sourceTreeLocator } from './resolve-images.mjs';
|
|
29
|
-
import {
|
|
30
|
+
import { createPinnedSourceAuthority } from './source-authority.mjs';
|
|
30
31
|
|
|
31
32
|
export const EDITION_BIOME_MANIFESTS_SCHEMA = 'xema.edition-biome-manifests/v1';
|
|
32
33
|
|
|
@@ -45,7 +46,7 @@ export async function editionBiomeManifests({ distributionId, schemas }) {
|
|
|
45
46
|
assertCanonicalDistributionId(distributionId);
|
|
46
47
|
const lock = schemas.parseDistributionLock(readLock(distributionId, 'distribution.lock.json'));
|
|
47
48
|
const imageLock = schemas.parseImageLock(readLock(distributionId, 'images.lock.json'));
|
|
48
|
-
const authority = createPinnedSourceAuthority({ pins:
|
|
49
|
+
const authority = createPinnedSourceAuthority({ pins: (await editionPinnedInputs(distributionId, { schemas })).repositoryPins });
|
|
49
50
|
return {
|
|
50
51
|
schema: EDITION_BIOME_MANIFESTS_SCHEMA,
|
|
51
52
|
distributionId,
|