@xemahq/xema 0.59.0 → 0.60.1
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/README.md +1 -2
- package/dist/appliance-owner.d.ts.map +1 -1
- package/dist/appliance-owner.js +6 -6
- package/dist/appliance-owner.js.map +1 -1
- package/dist/assets/appliance-base/authorization.lock.json +5186 -0
- package/dist/assets/appliance-base/distribution.lock.json +760 -279
- package/dist/assets/appliance-base/images.lock.json +576 -513
- package/dist/assets/appliance-lean/authorization.lock.json +4648 -0
- package/dist/assets/appliance-lean/distribution.lock.json +641 -186
- package/dist/assets/appliance-lean/images.lock.json +574 -512
- package/dist/assets/boot-graph.json +33 -14
- package/dist/assets/distribution-assets.manifest.json +23 -20
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/biome-dev.d.ts.map +1 -1
- package/dist/commands/biome-dev.js +41 -137
- package/dist/commands/biome-dev.js.map +1 -1
- package/dist/commands/biome-lifecycle.d.ts +24 -0
- package/dist/commands/biome-lifecycle.d.ts.map +1 -0
- package/dist/commands/biome-lifecycle.js +253 -0
- package/dist/commands/biome-lifecycle.js.map +1 -0
- package/dist/commands/biome.d.ts +2 -4
- package/dist/commands/biome.d.ts.map +1 -1
- package/dist/commands/biome.js +61 -46
- package/dist/commands/biome.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +96 -8
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +13 -20
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +14 -21
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +6 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/installation-tenancy.d.ts +11 -0
- package/dist/commands/installation-tenancy.d.ts.map +1 -0
- package/dist/commands/installation-tenancy.js +308 -0
- package/dist/commands/installation-tenancy.js.map +1 -0
- package/dist/commands/installation.d.ts.map +1 -1
- package/dist/commands/installation.js +19 -5
- package/dist/commands/installation.js.map +1 -1
- package/dist/commands/logs.d.ts +2 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +41 -8
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/{dev.d.ts → mirror.d.ts} +1 -1
- package/dist/commands/mirror.d.ts.map +1 -0
- package/dist/commands/mirror.js +132 -0
- package/dist/commands/mirror.js.map +1 -0
- package/dist/commands/source.d.ts.map +1 -1
- package/dist/commands/source.js +3 -2
- package/dist/commands/source.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +40 -21
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +36 -4
- package/dist/commands/up.js.map +1 -1
- package/dist/dev/infra-preflight.d.ts.map +1 -1
- package/dist/dev/infra-preflight.js +0 -4
- package/dist/dev/infra-preflight.js.map +1 -1
- package/dist/lib/confirm.d.ts +3 -0
- package/dist/lib/confirm.d.ts.map +1 -0
- package/dist/lib/confirm.js +19 -0
- package/dist/lib/confirm.js.map +1 -0
- package/dist/lib/output-format.d.ts +6 -0
- package/dist/lib/output-format.d.ts.map +1 -0
- package/dist/lib/output-format.js +20 -0
- package/dist/lib/output-format.js.map +1 -0
- package/dist/mirror/config/mirror-config-document.d.ts +18 -0
- package/dist/mirror/config/mirror-config-document.d.ts.map +1 -0
- package/dist/mirror/config/mirror-config-document.js +57 -0
- package/dist/mirror/config/mirror-config-document.js.map +1 -0
- package/dist/mirror/config/mirror-config-schema.d.ts +54 -0
- package/dist/mirror/config/mirror-config-schema.d.ts.map +1 -0
- package/dist/mirror/config/mirror-config-schema.js +80 -0
- package/dist/mirror/config/mirror-config-schema.js.map +1 -0
- package/dist/mirror/kit/delta.d.ts +4 -0
- package/dist/mirror/kit/delta.d.ts.map +1 -0
- package/dist/mirror/kit/delta.js +41 -0
- package/dist/mirror/kit/delta.js.map +1 -0
- package/dist/mirror/kit/export-kit.d.ts +16 -0
- package/dist/mirror/kit/export-kit.d.ts.map +1 -0
- package/dist/mirror/kit/export-kit.js +112 -0
- package/dist/mirror/kit/export-kit.js.map +1 -0
- package/dist/mirror/kit/import-kit.d.ts +9 -0
- package/dist/mirror/kit/import-kit.d.ts.map +1 -0
- package/dist/mirror/kit/import-kit.js +166 -0
- package/dist/mirror/kit/import-kit.js.map +1 -0
- package/dist/mirror/kit/kit-archive.d.ts +4 -0
- package/dist/mirror/kit/kit-archive.d.ts.map +1 -0
- package/dist/mirror/kit/kit-archive.js +38 -0
- package/dist/mirror/kit/kit-archive.js.map +1 -0
- package/dist/mirror/kit/kit-layout.d.ts +10 -0
- package/dist/mirror/kit/kit-layout.d.ts.map +1 -0
- package/dist/mirror/kit/kit-layout.js +19 -0
- package/dist/mirror/kit/kit-layout.js.map +1 -0
- package/dist/mirror/kit/kit-sums.d.ts +5 -0
- package/dist/mirror/kit/kit-sums.d.ts.map +1 -0
- package/dist/mirror/kit/kit-sums.js +63 -0
- package/dist/mirror/kit/kit-sums.js.map +1 -0
- package/dist/mirror/kit/layout-sync.d.ts +8 -0
- package/dist/mirror/kit/layout-sync.d.ts.map +1 -0
- package/dist/mirror/kit/layout-sync.js +58 -0
- package/dist/mirror/kit/layout-sync.js.map +1 -0
- package/dist/mirror/plan/bundle-content.d.ts +10 -0
- package/dist/mirror/plan/bundle-content.d.ts.map +1 -0
- package/dist/mirror/plan/bundle-content.js +61 -0
- package/dist/mirror/plan/bundle-content.js.map +1 -0
- package/dist/mirror/plan/declaration-file.d.ts +9 -0
- package/dist/mirror/plan/declaration-file.d.ts.map +1 -0
- package/dist/mirror/plan/declaration-file.js +27 -0
- package/dist/mirror/plan/declaration-file.js.map +1 -0
- package/dist/mirror/plan/edition-inputs.d.ts +57 -0
- package/dist/mirror/plan/edition-inputs.d.ts.map +1 -0
- package/dist/mirror/plan/edition-inputs.js +44 -0
- package/dist/mirror/plan/edition-inputs.js.map +1 -0
- package/dist/mirror/plan/edition-reader.d.ts +9 -0
- package/dist/mirror/plan/edition-reader.d.ts.map +1 -0
- package/dist/mirror/plan/edition-reader.js +47 -0
- package/dist/mirror/plan/edition-reader.js.map +1 -0
- package/dist/mirror/plan/image-content.d.ts +30 -0
- package/dist/mirror/plan/image-content.d.ts.map +1 -0
- package/dist/mirror/plan/image-content.js +120 -0
- package/dist/mirror/plan/image-content.js.map +1 -0
- package/dist/mirror/plan/npm-lockfile.d.ts +12 -0
- package/dist/mirror/plan/npm-lockfile.d.ts.map +1 -0
- package/dist/mirror/plan/npm-lockfile.js +106 -0
- package/dist/mirror/plan/npm-lockfile.js.map +1 -0
- package/dist/mirror/plan/oci-reads.d.ts +22 -0
- package/dist/mirror/plan/oci-reads.d.ts.map +1 -0
- package/dist/mirror/plan/oci-reads.js +43 -0
- package/dist/mirror/plan/oci-reads.js.map +1 -0
- package/dist/mirror/plan/plan-command.d.ts +22 -0
- package/dist/mirror/plan/plan-command.d.ts.map +1 -0
- package/dist/mirror/plan/plan-command.js +81 -0
- package/dist/mirror/plan/plan-command.js.map +1 -0
- package/dist/mirror/plan/plan-file.d.ts +13 -0
- package/dist/mirror/plan/plan-file.d.ts.map +1 -0
- package/dist/mirror/plan/plan-file.js +63 -0
- package/dist/mirror/plan/plan-file.js.map +1 -0
- package/dist/mirror/plan/resolve-content-set.d.ts +16 -0
- package/dist/mirror/plan/resolve-content-set.d.ts.map +1 -0
- package/dist/mirror/plan/resolve-content-set.js +90 -0
- package/dist/mirror/plan/resolve-content-set.js.map +1 -0
- package/dist/mirror/preflight/glob.d.ts +2 -0
- package/dist/mirror/preflight/glob.d.ts.map +1 -0
- package/dist/mirror/preflight/glob.js +59 -0
- package/dist/mirror/preflight/glob.js.map +1 -0
- package/dist/mirror/preflight/harbor-api.d.ts +27 -0
- package/dist/mirror/preflight/harbor-api.d.ts.map +1 -0
- package/dist/mirror/preflight/harbor-api.js +39 -0
- package/dist/mirror/preflight/harbor-api.js.map +1 -0
- package/dist/mirror/preflight/preflight.d.ts +18 -0
- package/dist/mirror/preflight/preflight.d.ts.map +1 -0
- package/dist/mirror/preflight/preflight.js +41 -0
- package/dist/mirror/preflight/preflight.js.map +1 -0
- package/dist/mirror/preflight/tag-moves.d.ts +16 -0
- package/dist/mirror/preflight/tag-moves.d.ts.map +1 -0
- package/dist/mirror/preflight/tag-moves.js +28 -0
- package/dist/mirror/preflight/tag-moves.js.map +1 -0
- package/dist/mirror/preflight/write-probe.d.ts +10 -0
- package/dist/mirror/preflight/write-probe.d.ts.map +1 -0
- package/dist/mirror/preflight/write-probe.js +36 -0
- package/dist/mirror/preflight/write-probe.js.map +1 -0
- package/dist/mirror/target/extras.d.ts +16 -0
- package/dist/mirror/target/extras.d.ts.map +1 -0
- package/dist/mirror/target/extras.js +47 -0
- package/dist/mirror/target/extras.js.map +1 -0
- package/dist/mirror/target/npm-registry.d.ts +20 -0
- package/dist/mirror/target/npm-registry.d.ts.map +1 -0
- package/dist/mirror/target/npm-registry.js +67 -0
- package/dist/mirror/target/npm-registry.js.map +1 -0
- package/dist/mirror/target/npm-sync.d.ts +15 -0
- package/dist/mirror/target/npm-sync.d.ts.map +1 -0
- package/dist/mirror/target/npm-sync.js +44 -0
- package/dist/mirror/target/npm-sync.js.map +1 -0
- package/dist/mirror/target/oci-items.d.ts +27 -0
- package/dist/mirror/target/oci-items.d.ts.map +1 -0
- package/dist/mirror/target/oci-items.js +79 -0
- package/dist/mirror/target/oci-items.js.map +1 -0
- package/dist/mirror/target/oci-sync.d.ts +20 -0
- package/dist/mirror/target/oci-sync.d.ts.map +1 -0
- package/dist/mirror/target/oci-sync.js +93 -0
- package/dist/mirror/target/oci-sync.js.map +1 -0
- package/dist/mirror/target/receipt-store.d.ts +13 -0
- package/dist/mirror/target/receipt-store.d.ts.map +1 -0
- package/dist/mirror/target/receipt-store.js +61 -0
- package/dist/mirror/target/receipt-store.js.map +1 -0
- package/dist/mirror/target/receipt.d.ts +13 -0
- package/dist/mirror/target/receipt.d.ts.map +1 -0
- package/dist/mirror/target/receipt.js +25 -0
- package/dist/mirror/target/receipt.js.map +1 -0
- package/dist/mirror/target/seed-push.d.ts +15 -0
- package/dist/mirror/target/seed-push.d.ts.map +1 -0
- package/dist/mirror/target/seed-push.js +20 -0
- package/dist/mirror/target/seed-push.js.map +1 -0
- package/dist/mirror/target/target-access.d.ts +7 -0
- package/dist/mirror/target/target-access.d.ts.map +1 -0
- package/dist/mirror/target/target-access.js +17 -0
- package/dist/mirror/target/target-access.js.map +1 -0
- package/dist/mirror/target/target-commands.d.ts +21 -0
- package/dist/mirror/target/target-commands.d.ts.map +1 -0
- package/dist/mirror/target/target-commands.js +134 -0
- package/dist/mirror/target/target-commands.js.map +1 -0
- package/dist/mirror/target/target-context.d.ts +11 -0
- package/dist/mirror/target/target-context.d.ts.map +1 -0
- package/dist/mirror/target/target-context.js +31 -0
- package/dist/mirror/target/target-context.js.map +1 -0
- package/dist/mirror/target/target-ports.d.ts +18 -0
- package/dist/mirror/target/target-ports.d.ts.map +1 -0
- package/dist/mirror/target/target-ports.js +49 -0
- package/dist/mirror/target/target-ports.js.map +1 -0
- package/dist/mirror/target/target-state.d.ts +22 -0
- package/dist/mirror/target/target-state.d.ts.map +1 -0
- package/dist/mirror/target/target-state.js +41 -0
- package/dist/mirror/target/target-state.js.map +1 -0
- package/dist/runtime/biome-dev.d.ts +0 -16
- package/dist/runtime/biome-dev.d.ts.map +1 -1
- package/dist/runtime/biome-dev.js +0 -53
- package/dist/runtime/biome-dev.js.map +1 -1
- package/dist/runtime/biome-host/biome-directory-packer.d.ts +3 -0
- package/dist/runtime/biome-host/biome-directory-packer.d.ts.map +1 -0
- package/dist/runtime/biome-host/biome-directory-packer.js +12 -0
- package/dist/runtime/biome-host/biome-directory-packer.js.map +1 -0
- package/dist/runtime/biome-host/bundle-packer.d.ts +8 -0
- package/dist/runtime/biome-host/bundle-packer.d.ts.map +1 -0
- package/dist/runtime/biome-host/bundle-packer.js +3 -0
- package/dist/runtime/biome-host/bundle-packer.js.map +1 -0
- package/dist/runtime/biome-host/from-spec.d.ts +33 -0
- package/dist/runtime/biome-host/from-spec.d.ts.map +1 -0
- package/dist/runtime/biome-host/from-spec.js +70 -0
- package/dist/runtime/biome-host/from-spec.js.map +1 -0
- package/dist/runtime/biome-host/lifecycle-client.d.ts +20 -0
- package/dist/runtime/biome-host/lifecycle-client.d.ts.map +1 -0
- package/dist/runtime/biome-host/lifecycle-client.js +197 -0
- package/dist/runtime/biome-host/lifecycle-client.js.map +1 -0
- package/dist/runtime/biome-host/lifecycle-contract.d.ts +95 -0
- package/dist/runtime/biome-host/lifecycle-contract.d.ts.map +1 -0
- package/dist/runtime/biome-host/lifecycle-contract.js +61 -0
- package/dist/runtime/biome-host/lifecycle-contract.js.map +1 -0
- package/dist/runtime/biome-host/lifecycle-flow.d.ts +29 -0
- package/dist/runtime/biome-host/lifecycle-flow.d.ts.map +1 -0
- package/dist/runtime/biome-host/lifecycle-flow.js +106 -0
- package/dist/runtime/biome-host/lifecycle-flow.js.map +1 -0
- package/dist/runtime/biome-host/plan-sources.d.ts +4 -0
- package/dist/runtime/biome-host/plan-sources.d.ts.map +1 -0
- package/dist/runtime/biome-host/plan-sources.js +26 -0
- package/dist/runtime/biome-host/plan-sources.js.map +1 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.d.ts +12 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.js +76 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.js.map +1 -0
- package/dist/runtime/biome-host/relay/declared-scheme.d.ts +3 -0
- package/dist/runtime/biome-host/relay/declared-scheme.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/declared-scheme.js +14 -0
- package/dist/runtime/biome-host/relay/declared-scheme.js.map +1 -0
- package/dist/runtime/biome-host/relay/npm-token.d.ts +4 -0
- package/dist/runtime/biome-host/relay/npm-token.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/npm-token.js +16 -0
- package/dist/runtime/biome-host/relay/npm-token.js.map +1 -0
- package/dist/runtime/biome-host/relay/relay-flow.d.ts +16 -0
- package/dist/runtime/biome-host/relay/relay-flow.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/relay-flow.js +48 -0
- package/dist/runtime/biome-host/relay/relay-flow.js.map +1 -0
- package/dist/runtime/biome-host/source-staging.d.ts +17 -0
- package/dist/runtime/biome-host/source-staging.d.ts.map +1 -0
- package/dist/runtime/biome-host/source-staging.js +80 -0
- package/dist/runtime/biome-host/source-staging.js.map +1 -0
- package/dist/runtime/biome-host/sse.d.ts +2 -0
- package/dist/runtime/biome-host/sse.d.ts.map +1 -0
- package/dist/runtime/biome-host/sse.js +33 -0
- package/dist/runtime/biome-host/sse.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/browser-origins.d.ts +9 -0
- package/dist/runtime/browser-origins.d.ts.map +1 -1
- package/dist/runtime/browser-origins.js +10 -0
- package/dist/runtime/browser-origins.js.map +1 -1
- package/dist/runtime/config/config-document.d.ts +10 -0
- package/dist/runtime/config/config-document.d.ts.map +1 -0
- package/dist/runtime/config/config-document.js +56 -0
- package/dist/runtime/config/config-document.js.map +1 -0
- package/dist/runtime/config/config-migrations.d.ts +21 -0
- package/dist/runtime/config/config-migrations.d.ts.map +1 -0
- package/dist/runtime/config/config-migrations.js +102 -0
- package/dist/runtime/config/config-migrations.js.map +1 -0
- package/dist/runtime/config/config-paths.d.ts +3 -0
- package/dist/runtime/config/config-paths.d.ts.map +1 -0
- package/dist/runtime/config/config-paths.js +9 -0
- package/dist/runtime/config/config-paths.js.map +1 -0
- package/dist/runtime/config/dev-mode.d.ts +0 -1
- package/dist/runtime/config/dev-mode.d.ts.map +1 -1
- package/dist/runtime/config/dev-mode.js +11 -27
- package/dist/runtime/config/dev-mode.js.map +1 -1
- package/dist/runtime/config/init-presets.js +5 -9
- package/dist/runtime/config/init-presets.js.map +1 -1
- package/dist/runtime/config/launch-config-help.d.ts +4 -0
- package/dist/runtime/config/launch-config-help.d.ts.map +1 -0
- package/dist/runtime/config/launch-config-help.js +42 -0
- package/dist/runtime/config/launch-config-help.js.map +1 -0
- package/dist/runtime/config/launch-config.d.ts +60 -0
- package/dist/runtime/config/launch-config.d.ts.map +1 -0
- package/dist/runtime/config/launch-config.js +123 -0
- package/dist/runtime/config/launch-config.js.map +1 -0
- package/dist/runtime/config/launch-schema.d.ts +18 -0
- package/dist/runtime/config/launch-schema.d.ts.map +1 -0
- package/dist/runtime/config/launch-schema.js +31 -0
- package/dist/runtime/config/launch-schema.js.map +1 -0
- package/dist/runtime/config/loader.d.ts.map +1 -1
- package/dist/runtime/config/loader.js +4 -14
- package/dist/runtime/config/loader.js.map +1 -1
- package/dist/runtime/config/schema.d.ts +43 -38
- package/dist/runtime/config/schema.d.ts.map +1 -1
- package/dist/runtime/config/schema.js +17 -46
- package/dist/runtime/config/schema.js.map +1 -1
- package/dist/runtime/config/sources-config.d.ts +0 -2
- package/dist/runtime/config/sources-config.d.ts.map +1 -1
- package/dist/runtime/config/sources-config.js +10 -29
- package/dist/runtime/config/sources-config.js.map +1 -1
- package/dist/runtime/config/versioned-document.d.ts +26 -0
- package/dist/runtime/config/versioned-document.d.ts.map +1 -0
- package/dist/runtime/config/versioned-document.js +87 -0
- package/dist/runtime/config/versioned-document.js.map +1 -0
- package/dist/runtime/directory-changes.d.ts +12 -0
- package/dist/runtime/directory-changes.d.ts.map +1 -0
- package/dist/runtime/directory-changes.js +62 -0
- package/dist/runtime/directory-changes.js.map +1 -0
- package/dist/runtime/foreground.d.ts +2 -0
- package/dist/runtime/foreground.d.ts.map +1 -1
- package/dist/runtime/foreground.js +5 -20
- package/dist/runtime/foreground.js.map +1 -1
- package/dist/runtime/infra/infra-runner.js +5 -5
- package/dist/runtime/infra/infra-runner.js.map +1 -1
- package/dist/runtime/infra/keycloak-realm.d.ts +3 -19
- package/dist/runtime/infra/keycloak-realm.d.ts.map +1 -1
- package/dist/runtime/infra/keycloak-realm.js +12 -133
- package/dist/runtime/infra/keycloak-realm.js.map +1 -1
- package/dist/runtime/installation/current-launcher-renderer.js.map +1 -1
- package/dist/runtime/installation/from-current-config.d.ts.map +1 -1
- package/dist/runtime/installation/from-current-config.js +24 -47
- package/dist/runtime/installation/from-current-config.js.map +1 -1
- package/dist/runtime/installation/index.d.ts +1 -0
- package/dist/runtime/installation/index.d.ts.map +1 -1
- package/dist/runtime/installation/index.js +1 -0
- package/dist/runtime/installation/index.js.map +1 -1
- package/dist/runtime/installation/installation-file.d.ts +3 -0
- package/dist/runtime/installation/installation-file.d.ts.map +1 -0
- package/dist/runtime/installation/installation-file.js +9 -0
- package/dist/runtime/installation/installation-file.js.map +1 -0
- package/dist/runtime/installation/readiness.d.ts +6 -7
- package/dist/runtime/installation/readiness.d.ts.map +1 -1
- package/dist/runtime/installation/readiness.js +82 -132
- package/dist/runtime/installation/readiness.js.map +1 -1
- package/dist/runtime/installation/state-store.d.ts +4 -0
- package/dist/runtime/installation/state-store.d.ts.map +1 -1
- package/dist/runtime/installation/state-store.js +22 -1
- package/dist/runtime/installation/state-store.js.map +1 -1
- package/dist/runtime/installation/to-current-config.d.ts +4 -1
- package/dist/runtime/installation/to-current-config.d.ts.map +1 -1
- package/dist/runtime/installation/to-current-config.js +10 -36
- package/dist/runtime/installation/to-current-config.js.map +1 -1
- package/dist/runtime/launch-plan-format.d.ts.map +1 -1
- package/dist/runtime/launch-plan-format.js +31 -6
- package/dist/runtime/launch-plan-format.js.map +1 -1
- package/dist/runtime/launch-result.d.ts +15 -0
- package/dist/runtime/launch-result.d.ts.map +1 -0
- package/dist/runtime/launch-result.js +3 -0
- package/dist/runtime/launch-result.js.map +1 -0
- package/dist/runtime/launch.d.ts +16 -5
- package/dist/runtime/launch.d.ts.map +1 -1
- package/dist/runtime/launch.js +151 -315
- package/dist/runtime/launch.js.map +1 -1
- package/dist/runtime/license/helm-pull-secret.d.ts +1 -1
- package/dist/runtime/license/helm-pull-secret.d.ts.map +1 -1
- package/dist/runtime/license/helm-pull-secret.js +2 -2
- package/dist/runtime/license/helm-pull-secret.js.map +1 -1
- package/dist/runtime/lifecycle-progress/index.d.ts +9 -0
- package/dist/runtime/lifecycle-progress/index.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/index.js +30 -0
- package/dist/runtime/lifecycle-progress/index.js.map +1 -0
- package/dist/runtime/lifecycle-progress/json-renderer.d.ts +3 -0
- package/dist/runtime/lifecycle-progress/json-renderer.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/json-renderer.js +27 -0
- package/dist/runtime/lifecycle-progress/json-renderer.js.map +1 -0
- package/dist/runtime/lifecycle-progress/text-renderer.d.ts +5 -0
- package/dist/runtime/lifecycle-progress/text-renderer.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/text-renderer.js +83 -0
- package/dist/runtime/lifecycle-progress/text-renderer.js.map +1 -0
- package/dist/runtime/lifecycle-progress/types.d.ts +79 -0
- package/dist/runtime/lifecycle-progress/types.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/types.js +32 -0
- package/dist/runtime/lifecycle-progress/types.js.map +1 -0
- package/dist/runtime/lock-loader.d.ts +13 -3
- package/dist/runtime/lock-loader.d.ts.map +1 -1
- package/dist/runtime/lock-loader.js +28 -8
- package/dist/runtime/lock-loader.js.map +1 -1
- package/dist/runtime/paths.d.ts +2 -0
- package/dist/runtime/paths.d.ts.map +1 -1
- package/dist/runtime/paths.js +17 -4
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/roster.d.ts +6 -5
- package/dist/runtime/roster.d.ts.map +1 -1
- package/dist/runtime/roster.js +0 -21
- package/dist/runtime/roster.js.map +1 -1
- package/dist/runtime/runner/container-preflight.d.ts +3 -2
- package/dist/runtime/runner/container-preflight.d.ts.map +1 -1
- package/dist/runtime/runner/container-preflight.js +5 -5
- package/dist/runtime/runner/container-preflight.js.map +1 -1
- package/dist/runtime/runner/container-runner.d.ts +0 -22
- package/dist/runtime/runner/container-runner.d.ts.map +1 -1
- package/dist/runtime/runner/container-runner.js +0 -112
- package/dist/runtime/runner/container-runner.js.map +1 -1
- package/dist/runtime/runner/docker-cli.d.ts +1 -0
- package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
- package/dist/runtime/runner/docker-cli.js +19 -0
- package/dist/runtime/runner/docker-cli.js.map +1 -1
- package/dist/runtime/runner/helm-cli.d.ts +1 -0
- package/dist/runtime/runner/helm-cli.d.ts.map +1 -1
- package/dist/runtime/runner/helm-cli.js +5 -1
- package/dist/runtime/runner/helm-cli.js.map +1 -1
- package/dist/runtime/runner/helm-pre-install.d.ts +3 -2
- package/dist/runtime/runner/helm-pre-install.d.ts.map +1 -1
- package/dist/runtime/runner/helm-pre-install.js +3 -3
- package/dist/runtime/runner/helm-pre-install.js.map +1 -1
- package/dist/runtime/runner/helm-runner.d.ts +29 -4
- package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
- package/dist/runtime/runner/helm-runner.js +44 -14
- package/dist/runtime/runner/helm-runner.js.map +1 -1
- package/dist/runtime/runner/kube-cli.d.ts +1 -0
- package/dist/runtime/runner/kube-cli.d.ts.map +1 -1
- package/dist/runtime/runner/kube-cli.js +24 -2
- package/dist/runtime/runner/kube-cli.js.map +1 -1
- package/dist/runtime/secrets/managed-local-key-provider.d.ts +2 -0
- package/dist/runtime/secrets/managed-local-key-provider.d.ts.map +1 -1
- package/dist/runtime/secrets/managed-local-key-provider.js +17 -8
- package/dist/runtime/secrets/managed-local-key-provider.js.map +1 -1
- package/dist/runtime/seed/closure-container.d.ts +8 -0
- package/dist/runtime/seed/closure-container.d.ts.map +1 -0
- package/dist/runtime/seed/closure-container.js +23 -0
- package/dist/runtime/seed/closure-container.js.map +1 -0
- package/dist/runtime/seed/closure-helm.d.ts +9 -0
- package/dist/runtime/seed/closure-helm.d.ts.map +1 -0
- package/dist/runtime/seed/closure-helm.js +16 -0
- package/dist/runtime/seed/closure-helm.js.map +1 -0
- package/dist/runtime/seed/closure-names.d.ts +4 -0
- package/dist/runtime/seed/closure-names.d.ts.map +1 -0
- package/dist/runtime/seed/closure-names.js +29 -0
- package/dist/runtime/seed/closure-names.js.map +1 -0
- package/dist/runtime/seed/closure-native.d.ts +3 -0
- package/dist/runtime/seed/closure-native.d.ts.map +1 -0
- package/dist/runtime/seed/closure-native.js +18 -0
- package/dist/runtime/seed/closure-native.js.map +1 -0
- package/dist/runtime/seed/installation-tar.d.ts +5 -0
- package/dist/runtime/seed/installation-tar.d.ts.map +1 -0
- package/dist/runtime/seed/installation-tar.js +30 -0
- package/dist/runtime/seed/installation-tar.js.map +1 -0
- package/dist/runtime/seed/launch-env.d.ts +42 -0
- package/dist/runtime/seed/launch-env.d.ts.map +1 -0
- package/dist/runtime/seed/launch-env.js +150 -0
- package/dist/runtime/seed/launch-env.js.map +1 -0
- package/dist/runtime/seed/seed-container.d.ts +13 -0
- package/dist/runtime/seed/seed-container.d.ts.map +1 -0
- package/dist/runtime/seed/seed-container.js +175 -0
- package/dist/runtime/seed/seed-container.js.map +1 -0
- package/dist/runtime/seed/seed-delivery-env.d.ts +39 -0
- package/dist/runtime/seed/seed-delivery-env.d.ts.map +1 -0
- package/dist/runtime/seed/seed-delivery-env.js +47 -0
- package/dist/runtime/seed/seed-delivery-env.js.map +1 -0
- package/dist/runtime/seed/seed-down.d.ts +2 -0
- package/dist/runtime/seed/seed-down.d.ts.map +1 -0
- package/dist/runtime/seed/seed-down.js +52 -0
- package/dist/runtime/seed/seed-down.js.map +1 -0
- package/dist/runtime/seed/seed-env-file.d.ts +3 -0
- package/dist/runtime/seed/seed-env-file.d.ts.map +1 -0
- package/dist/runtime/seed/seed-env-file.js +24 -0
- package/dist/runtime/seed/seed-env-file.js.map +1 -0
- package/dist/runtime/seed/seed-env-secret.d.ts +18 -0
- package/dist/runtime/seed/seed-env-secret.d.ts.map +1 -0
- package/dist/runtime/seed/seed-env-secret.js +62 -0
- package/dist/runtime/seed/seed-env-secret.js.map +1 -0
- package/dist/runtime/seed/seed-environment.d.ts +12 -0
- package/dist/runtime/seed/seed-environment.d.ts.map +1 -0
- package/dist/runtime/seed/seed-environment.js +66 -0
- package/dist/runtime/seed/seed-environment.js.map +1 -0
- package/dist/runtime/seed/seed-facts.d.ts +22 -0
- package/dist/runtime/seed/seed-facts.d.ts.map +1 -0
- package/dist/runtime/seed/seed-facts.js +40 -0
- package/dist/runtime/seed/seed-facts.js.map +1 -0
- package/dist/runtime/seed/seed-helm.d.ts +10 -0
- package/dist/runtime/seed/seed-helm.d.ts.map +1 -0
- package/dist/runtime/seed/seed-helm.js +74 -0
- package/dist/runtime/seed/seed-helm.js.map +1 -0
- package/dist/runtime/seed/seed-image-user.d.ts +6 -0
- package/dist/runtime/seed/seed-image-user.d.ts.map +1 -0
- package/dist/runtime/seed/seed-image-user.js +14 -0
- package/dist/runtime/seed/seed-image-user.js.map +1 -0
- package/dist/runtime/seed/seed-installation-files.d.ts +23 -0
- package/dist/runtime/seed/seed-installation-files.d.ts.map +1 -0
- package/dist/runtime/seed/seed-installation-files.js +51 -0
- package/dist/runtime/seed/seed-installation-files.js.map +1 -0
- package/dist/runtime/seed/seed-installation.d.ts +20 -0
- package/dist/runtime/seed/seed-installation.d.ts.map +1 -0
- package/dist/runtime/seed/seed-installation.js +36 -0
- package/dist/runtime/seed/seed-installation.js.map +1 -0
- package/dist/runtime/seed/seed-launcher.d.ts +14 -0
- package/dist/runtime/seed/seed-launcher.d.ts.map +1 -0
- package/dist/runtime/seed/seed-launcher.js +155 -0
- package/dist/runtime/seed/seed-launcher.js.map +1 -0
- package/dist/runtime/seed/seed-options.d.ts +22 -0
- package/dist/runtime/seed/seed-options.d.ts.map +1 -0
- package/dist/runtime/seed/seed-options.js +57 -0
- package/dist/runtime/seed/seed-options.js.map +1 -0
- package/dist/runtime/seed/seed-platform-endpoints.d.ts +8 -0
- package/dist/runtime/seed/seed-platform-endpoints.d.ts.map +1 -0
- package/dist/runtime/seed/seed-platform-endpoints.js +55 -0
- package/dist/runtime/seed/seed-platform-endpoints.js.map +1 -0
- package/dist/runtime/seed/seed-process.d.ts +22 -0
- package/dist/runtime/seed/seed-process.d.ts.map +1 -0
- package/dist/runtime/seed/seed-process.js +79 -0
- package/dist/runtime/seed/seed-process.js.map +1 -0
- package/dist/runtime/seed/seed-record.d.ts +101 -0
- package/dist/runtime/seed/seed-record.d.ts.map +1 -0
- package/dist/runtime/seed/seed-record.js +141 -0
- package/dist/runtime/seed/seed-record.js.map +1 -0
- package/dist/runtime/seed/seed-resolved-deployment.d.ts +14 -0
- package/dist/runtime/seed/seed-resolved-deployment.d.ts.map +1 -0
- package/dist/runtime/seed/seed-resolved-deployment.js +52 -0
- package/dist/runtime/seed/seed-resolved-deployment.js.map +1 -0
- package/dist/runtime/seed/substrate-facts.d.ts +52 -0
- package/dist/runtime/seed/substrate-facts.d.ts.map +1 -0
- package/dist/runtime/seed/substrate-facts.js +92 -0
- package/dist/runtime/seed/substrate-facts.js.map +1 -0
- package/dist/runtime/seed/supervisor-contract.d.ts +9 -0
- package/dist/runtime/seed/supervisor-contract.d.ts.map +1 -0
- package/dist/runtime/seed/supervisor-contract.js +68 -0
- package/dist/runtime/seed/supervisor-contract.js.map +1 -0
- package/dist/runtime/seed/workload-identity-facts.d.ts +17 -0
- package/dist/runtime/seed/workload-identity-facts.d.ts.map +1 -0
- package/dist/runtime/seed/workload-identity-facts.js +53 -0
- package/dist/runtime/seed/workload-identity-facts.js.map +1 -0
- package/dist/runtime/sources/schema.d.ts +2 -0
- package/dist/runtime/sources/schema.d.ts.map +1 -1
- package/dist/runtime/sources/schema.js +10 -9
- package/dist/runtime/sources/schema.js.map +1 -1
- package/dist/runtime/store-client.d.ts +0 -10
- package/dist/runtime/store-client.d.ts.map +1 -1
- package/dist/runtime/store-client.js +0 -5
- package/dist/runtime/store-client.js.map +1 -1
- package/dist/runtime/tenancy/identity-installer.d.ts +11 -0
- package/dist/runtime/tenancy/identity-installer.d.ts.map +1 -0
- package/dist/runtime/tenancy/identity-installer.js +39 -0
- package/dist/runtime/tenancy/identity-installer.js.map +1 -0
- package/dist/runtime/tenancy/import-cache.d.ts +5 -0
- package/dist/runtime/tenancy/import-cache.d.ts.map +1 -0
- package/dist/runtime/tenancy/import-cache.js +27 -0
- package/dist/runtime/tenancy/import-cache.js.map +1 -0
- package/dist/runtime/tenancy/openfga.d.ts +4 -0
- package/dist/runtime/tenancy/openfga.d.ts.map +1 -0
- package/dist/runtime/tenancy/openfga.js +29 -0
- package/dist/runtime/tenancy/openfga.js.map +1 -0
- package/dist/runtime/tenancy/servers.d.ts +18 -0
- package/dist/runtime/tenancy/servers.d.ts.map +1 -0
- package/dist/runtime/tenancy/servers.js +102 -0
- package/dist/runtime/tenancy/servers.js.map +1 -0
- package/dist/runtime/tenancy/session.d.ts +19 -0
- package/dist/runtime/tenancy/session.d.ts.map +1 -0
- package/dist/runtime/tenancy/session.js +79 -0
- package/dist/runtime/tenancy/session.js.map +1 -0
- package/dist/runtime/tenancy/specs.d.ts +27 -0
- package/dist/runtime/tenancy/specs.d.ts.map +1 -0
- package/dist/runtime/tenancy/specs.js +129 -0
- package/dist/runtime/tenancy/specs.js.map +1 -0
- package/examples/01-local-native.yaml +1 -3
- package/examples/02-local-container-full.yaml +0 -2
- package/examples/03-byo-infra.yaml +1 -5
- package/examples/06-biome-sources.yaml +1 -3
- package/package.json +32 -37
- package/xema.config.example.yaml +1 -10
- package/dist/assets/keycloak/realm-xema.json +0 -397
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -196
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/edition.d.ts +0 -3
- package/dist/commands/edition.d.ts.map +0 -1
- package/dist/commands/edition.js +0 -54
- package/dist/commands/edition.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -3
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -114
- package/dist/commands/serve.js.map +0 -1
- package/dist/dev/carved-installs.d.ts +0 -3
- package/dist/dev/carved-installs.d.ts.map +0 -1
- package/dist/dev/carved-installs.js +0 -63
- package/dist/dev/carved-installs.js.map +0 -1
- package/dist/dev/env-defaults.d.ts +0 -15
- package/dist/dev/env-defaults.d.ts.map +0 -1
- package/dist/dev/env-defaults.js +0 -178
- package/dist/dev/env-defaults.js.map +0 -1
- package/dist/dev/forked-worker-bootstrap-protocol.d.ts +0 -17
- package/dist/dev/forked-worker-bootstrap-protocol.d.ts.map +0 -1
- package/dist/dev/forked-worker-bootstrap-protocol.js +0 -35
- package/dist/dev/forked-worker-bootstrap-protocol.js.map +0 -1
- package/dist/dev/forked-worker-bootstrap.d.ts +0 -18
- package/dist/dev/forked-worker-bootstrap.d.ts.map +0 -1
- package/dist/dev/forked-worker-bootstrap.js +0 -84
- package/dist/dev/forked-worker-bootstrap.js.map +0 -1
- package/dist/dev/forked-worker.d.ts +0 -43
- package/dist/dev/forked-worker.d.ts.map +0 -1
- package/dist/dev/forked-worker.js +0 -358
- package/dist/dev/forked-worker.js.map +0 -1
- package/dist/edition/verify-image-evidence.bundle.mjs +0 -70456
- package/dist/edition/verify-image-evidence.bundle.provenance.json +0 -3957
- package/dist/runtime/backing-registration.d.ts +0 -11
- package/dist/runtime/backing-registration.d.ts.map +0 -1
- package/dist/runtime/backing-registration.js +0 -94
- package/dist/runtime/backing-registration.js.map +0 -1
- package/dist/runtime/edition/run-entry.d.ts +0 -9
- package/dist/runtime/edition/run-entry.d.ts.map +0 -1
- package/dist/runtime/edition/run-entry.js +0 -36
- package/dist/runtime/edition/run-entry.js.map +0 -1
- package/dist/runtime/edition/verb-map.d.ts +0 -70
- package/dist/runtime/edition/verb-map.d.ts.map +0 -1
- package/dist/runtime/edition/verb-map.js +0 -166
- package/dist/runtime/edition/verb-map.js.map +0 -1
- package/dist/runtime/env-seeder.d.ts +0 -26
- package/dist/runtime/env-seeder.d.ts.map +0 -1
- package/dist/runtime/env-seeder.js +0 -340
- package/dist/runtime/env-seeder.js.map +0 -1
- package/dist/runtime/port-map.d.ts +0 -3
- package/dist/runtime/port-map.d.ts.map +0 -1
- package/dist/runtime/port-map.js +0 -25
- package/dist/runtime/port-map.js.map +0 -1
- package/dist/runtime/run-manifest.d.ts +0 -52
- package/dist/runtime/run-manifest.d.ts.map +0 -1
- package/dist/runtime/run-manifest.js +0 -585
- package/dist/runtime/run-manifest.js.map +0 -1
- package/dist/runtime/runner/native-runner.d.ts +0 -13
- package/dist/runtime/runner/native-runner.d.ts.map +0 -1
- package/dist/runtime/runner/native-runner.js +0 -94
- package/dist/runtime/runner/native-runner.js.map +0 -1
- package/dist/runtime/runner/service-runner.d.ts +0 -28
- package/dist/runtime/runner/service-runner.d.ts.map +0 -1
- package/dist/runtime/runner/service-runner.js +0 -10
- package/dist/runtime/runner/service-runner.js.map +0 -1
- package/dist/runtime/secrets/generated-platform-secrets.d.ts +0 -16
- package/dist/runtime/secrets/generated-platform-secrets.d.ts.map +0 -1
- package/dist/runtime/secrets/generated-platform-secrets.js +0 -115
- package/dist/runtime/secrets/generated-platform-secrets.js.map +0 -1
- package/dist/runtime/secrets/resolver.d.ts +0 -23
- package/dist/runtime/secrets/resolver.d.ts.map +0 -1
- package/dist/runtime/secrets/resolver.js +0 -266
- package/dist/runtime/secrets/resolver.js.map +0 -1
- package/dist/runtime/supervisor.d.ts +0 -67
- package/dist/runtime/supervisor.d.ts.map +0 -1
- package/dist/runtime/supervisor.js +0 -227
- package/dist/runtime/supervisor.js.map +0 -1
- package/edition/README.md +0 -293
- package/edition/adapter-bundled-versions.mjs +0 -108
- package/edition/adapter-host-versions.mjs +0 -41
- package/edition/assemble-producer-input.mjs +0 -1414
- package/edition/assemble-third-party-input.mjs +0 -336
- package/edition/authored-source-check.mjs +0 -135
- package/edition/authorization-base.mjs +0 -357
- package/edition/biome-content.mjs +0 -327
- package/edition/build-biome-index.mjs +0 -180
- package/edition/build-ledger-completeness.mjs +0 -67
- package/edition/build-ledger.mjs +0 -107
- package/edition/build-platform-service-index.mjs +0 -292
- package/edition/build-runtime-image-source-index.mjs +0 -1187
- package/edition/built-verifier.mjs +0 -55
- package/edition/candidate-edition.mjs +0 -697
- package/edition/canonical-evidence-json.mjs +0 -82
- package/edition/canonical-repository-url.mjs +0 -47
- package/edition/catalogue-edition.mjs +0 -49
- package/edition/catalogue-evidence.mjs +0 -228
- package/edition/catalogue-fetch.mjs +0 -124
- package/edition/catalogue-lock-field.mjs +0 -41
- package/edition/catalogue-pin.mjs +0 -71
- package/edition/catalogue.mjs +0 -223
- package/edition/chart-set-source-commit.mjs +0 -97
- package/edition/check-committed-image-evidence.mjs +0 -412
- package/edition/checkout-indexed-source-repositories.mjs +0 -283
- package/edition/collected-refusals.mjs +0 -59
- package/edition/comment-blanker.mjs +0 -75
- package/edition/connector-source-authority.mjs +0 -60
- package/edition/contract-authority.mjs +0 -122
- package/edition/cosign-certificate-constraints.mjs +0 -50
- package/edition/cross-repo-build-inputs.mjs +0 -158
- package/edition/customer-definition.mjs +0 -174
- package/edition/customer-edition-verbs.mjs +0 -617
- package/edition/customer-flags.mjs +0 -15
- package/edition/develop-catalogue-free-resolve.mjs +0 -280
- package/edition/develop-chart-roster.mjs +0 -96
- package/edition/develop-chart-set.mjs +0 -147
- package/edition/develop-coverage-readers.mjs +0 -217
- package/edition/develop-coverage-run.mjs +0 -50
- package/edition/develop-coverage-verdict.mjs +0 -153
- package/edition/develop-coverage.mjs +0 -131
- package/edition/develop-current-resolution.mjs +0 -29
- package/edition/develop-edition-invariants.mjs +0 -142
- package/edition/develop-edition-resolve.mjs +0 -211
- package/edition/develop-edition.mjs +0 -379
- package/edition/develop-engine-image.mjs +0 -95
- package/edition/develop-follow.mjs +0 -491
- package/edition/develop-freeze.mjs +0 -289
- package/edition/develop-git-bundles.mjs +0 -255
- package/edition/develop-graph.mjs +0 -28
- package/edition/develop-image-coordinate.mjs +0 -54
- package/edition/develop-image-probe.mjs +0 -120
- package/edition/develop-image-record.mjs +0 -194
- package/edition/develop-record-ancestry.mjs +0 -144
- package/edition/develop-record-verify.mjs +0 -216
- package/edition/develop-resolve-report.mjs +0 -159
- package/edition/develop-select-records.mjs +0 -172
- package/edition/develop-selection-line.mjs +0 -30
- package/edition/develop-selection-pins.mjs +0 -36
- package/edition/develop-snapshot-inputs.mjs +0 -93
- package/edition/develop-verify-image-record.mjs +0 -109
- package/edition/dispatched-runtime-components.mjs +0 -172
- package/edition/dist-check.mjs +0 -1137
- package/edition/distribution-evidence-set.mjs +0 -1064
- package/edition/distribution-paths.mjs +0 -191
- package/edition/edition-artifact.mjs +0 -529
- package/edition/edition-biome-manifests.mjs +0 -85
- package/edition/edition-ceiling.mjs +0 -180
- package/edition/edition-channel.mjs +0 -20
- package/edition/edition-chart-set.mjs +0 -104
- package/edition/edition-config.mjs +0 -374
- package/edition/edition-constants.mjs +0 -110
- package/edition/edition-contract-parse.mjs +0 -179
- package/edition/edition-contract.json +0 -100
- package/edition/edition-image-seal.mjs +0 -110
- package/edition/edition-kind.mjs +0 -10
- package/edition/edition-list.mjs +0 -35
- package/edition/edition-locks.mjs +0 -79
- package/edition/edition-pin-verbs.mjs +0 -183
- package/edition/edition-pin.mjs +0 -17
- package/edition/edition-pinned-inputs.mjs +0 -116
- package/edition/edition-protocol.mjs +0 -277
- package/edition/edition-publisher.mjs +0 -21
- package/edition/edition-seal.mjs +0 -257
- package/edition/edition-source-pins.mjs +0 -211
- package/edition/edition-unpin.mjs +0 -16
- package/edition/edition-workspace.mjs +0 -204
- package/edition/evidence-checkout.mjs +0 -439
- package/edition/evidence-grammars.mjs +0 -18
- package/edition/evidence-input-mode.mjs +0 -136
- package/edition/evidence-trust-pin.mjs +0 -380
- package/edition/evidence-trust-policy.mjs +0 -374
- package/edition/external-source-walk.mjs +0 -485
- package/edition/first-party-source-ids.mjs +0 -62
- package/edition/fleet-coordinate-finality.mjs +0 -363
- package/edition/fulcio-certificate-extensions.mjs +0 -231
- package/edition/git-json.mjs +0 -54
- package/edition/git-source-auth.mjs +0 -131
- package/edition/image-delivery-entitlement-descriptor.mjs +0 -106
- package/edition/image-evidence-replay-state.mjs +0 -242
- package/edition/image-evidence.mjs +0 -1404
- package/edition/image-lock-service-rows.mjs +0 -26
- package/edition/image-subject-identity.mjs +0 -24
- package/edition/images-from-record.mjs +0 -298
- package/edition/indexes-at-pins.mjs +0 -13
- package/edition/kernel-capability-domain.mjs +0 -30
- package/edition/kernel-contract-authority.mjs +0 -517
- package/edition/kernel-contract-source-path-set.mjs +0 -94
- package/edition/kernel-package.mjs +0 -206
- package/edition/kernel-protocol-choice.mjs +0 -239
- package/edition/kernel-signer-kind.mjs +0 -23
- package/edition/lib.mjs +0 -3303
- package/edition/locked-bundle-signer.mjs +0 -297
- package/edition/map-with-concurrency.mjs +0 -19
- package/edition/no-follow-file.mjs +0 -94
- package/edition/oci-evidence-verbs.mjs +0 -419
- package/edition/oci-image-source-evidence.mjs +0 -364
- package/edition/operation-grant-admission.mjs +0 -285
- package/edition/operation-requirements.mjs +0 -282
- package/edition/oras-process.mjs +0 -35
- package/edition/oras.mjs +0 -742
- package/edition/pin-source.mjs +0 -242
- package/edition/pinned-cosign.mjs +0 -70
- package/edition/plan-image-evidence-refresh.mjs +0 -427
- package/edition/platform-lock-readability.mjs +0 -901
- package/edition/platform-service-class.mjs +0 -85
- package/edition/platform-service-ownership.mjs +0 -88
- package/edition/platform-service-source-authority.mjs +0 -105
- package/edition/positive-closure.mjs +0 -162
- package/edition/previous-seal-registry.mjs +0 -149
- package/edition/produce-distribution-completeness-evidence.mjs +0 -318
- package/edition/produce-edition-catalogue-evidence.mjs +0 -252
- package/edition/produce-image-delivery-entitlement-evidence.mjs +0 -304
- package/edition/produce-image-source-evidence.mjs +0 -788
- package/edition/producer-evidence-bundle.mjs +0 -201
- package/edition/producer-evidence-index-file.mjs +0 -4
- package/edition/record-refused.mjs +0 -12
- package/edition/registry-credentials.mjs +0 -225
- package/edition/release-catalogue.mjs +0 -47
- package/edition/release-channel-guard.mjs +0 -108
- package/edition/release-edition-artifact.mjs +0 -152
- package/edition/release-edition.mjs +0 -54
- package/edition/remedy-command.mjs +0 -89
- package/edition/repin-evidence-trust.mjs +0 -109
- package/edition/required-resource-provider.mjs +0 -58
- package/edition/resolve-chart-set.mjs +0 -376
- package/edition/resolve-customer-edition.mjs +0 -374
- package/edition/resolve-distribution.mjs +0 -2639
- package/edition/resolve-edition.mjs +0 -192
- package/edition/resolve-images.mjs +0 -2294
- package/edition/seal-image-digests.mjs +0 -954
- package/edition/sealed-distribution-lock.mjs +0 -22
- package/edition/sealed-evidence-accept.mjs +0 -82
- package/edition/shallow-checkout.mjs +0 -18
- package/edition/sigstore-bundle-media-type.mjs +0 -4
- package/edition/source-authority.mjs +0 -713
- package/edition/source-closure.mjs +0 -115
- package/edition/store-publisher-trust.mjs +0 -40
- package/edition/strict-json.mjs +0 -121
- package/edition/string-order.mjs +0 -5
- package/edition/third-party-admission.mjs +0 -91
- package/edition/third-party-bundle-registry.mjs +0 -242
- package/edition/third-party-certificate-extensions.mjs +0 -21
- package/edition/third-party-image-pins.mjs +0 -41
- package/edition/third-party-pins-trusted.mjs +0 -24
- package/edition/third-party-producer-evidence.mjs +0 -76
- package/edition/third-party-source-check.mjs +0 -28
- package/edition/third-party-source-context.mjs +0 -41
- package/edition/third-party-source-evidence.mjs +0 -287
- package/edition/third-party-source-flags.mjs +0 -134
- package/edition/third-party-source-pins.mjs +0 -259
- package/edition/third-party-source-uniqueness.mjs +0 -54
- package/edition/third-party-source-walk.mjs +0 -115
- package/edition/third-party-source-writer.mjs +0 -213
- package/edition/third-party-subjects.mjs +0 -128
- package/edition/trust-policy-arming-verb.mjs +0 -60
- package/edition/trust-policy-arming.mjs +0 -144
- package/edition/trust-policy-image-ownership.mjs +0 -85
- package/edition/trusted-executable.mjs +0 -166
- package/edition/verifier-binding.mjs +0 -45
- package/edition/verifier-files.mjs +0 -8
- package/edition/verifier-kernel-schemas.mjs +0 -22
- package/edition/verifier-provenance.mjs +0 -64
- package/edition/verify-catalogue-evidence.mjs +0 -247
- package/edition/verify-image-evidence.mjs +0 -475
- package/edition/verify-image-platforms.mjs +0 -523
- package/edition/why.mjs +0 -56
- package/edition/workspace-sections.mjs +0 -276
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schema": "xema.edition-contract/v3",
|
|
3
|
-
"vendoring": "This file is the single source of the edition artifact coordinates and names. A consumer vendors it BYTE-IDENTICAL from a stated xema-cli commit and never edits it. It reads both repository namespace segments (repositories.<channel>.namespaceSegment) and the repository prefix (repositoryPrefix) only from this file, and refuses a contract that has no `repositories`.",
|
|
4
|
-
"artifactType": "application/vnd.xema.edition.v1+json",
|
|
5
|
-
"repositoryPrefix": "xema-edition-",
|
|
6
|
-
"repositories": {
|
|
7
|
-
"release": {
|
|
8
|
-
"namespaceSegment": "editions"
|
|
9
|
-
},
|
|
10
|
-
"develop": {
|
|
11
|
-
"namespaceSegment": "develop-editions"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"descriptorFile": "xema-edition.json",
|
|
15
|
-
"descriptorSchema": "xema.edition/v2",
|
|
16
|
-
"descriptorKinds": [
|
|
17
|
-
"resolved",
|
|
18
|
-
"sealed"
|
|
19
|
-
],
|
|
20
|
-
"sealOf": {
|
|
21
|
-
"pattern": "^[a-z0-9.-]+(:[0-9]+)?(/[a-z0-9._-]+)+@sha256:[0-9a-f]{64}$",
|
|
22
|
-
"names": "the digest-pinned ref (<registry>/<path>@sha256:<64 hex>) of the one resolved edition a sealed edition seals; a sealed descriptor carries it and no other descriptor does. A consumer reads the pattern from here (a JavaScript RegExp source, anchored) and restates it nowhere",
|
|
23
|
-
"repository": "beyond the pattern: the repository of sealOf (everything before @) is an edition repository, <registry root>/<repositories.<channel>.namespaceSegment>/<repositoryPrefix><distributionId>, whose channel is sealOf.channel and whose distributionId is the sealed descriptor's distributionId",
|
|
24
|
-
"channel": "release",
|
|
25
|
-
"sealedEdition": "a seal is release-only: only a resolved edition of sealOf.channel is sealed (a resolved edition of any other channel is refused), and the sealed edition is pushed to the repository of that channel (repositories.<sealOf.channel>) and records provenance.channel sealOf.channel"
|
|
26
|
-
},
|
|
27
|
-
"locks": [
|
|
28
|
-
"distribution.lock.json",
|
|
29
|
-
"images.lock.json",
|
|
30
|
-
"authorization.lock.json",
|
|
31
|
-
"chart-set.lock.json"
|
|
32
|
-
],
|
|
33
|
-
"offeringLayers": {
|
|
34
|
-
"catalogue": "catalogue.json"
|
|
35
|
-
},
|
|
36
|
-
"provenancePins": {
|
|
37
|
-
"catalogue": "the sha256 digest (sha256:<64 hex>) of the offering artifact a customer edition was resolved against",
|
|
38
|
-
"definition": "the sha256 digest (sha256:<64 hex>) of the canonical JSON of the customer definition a customer edition was resolved from (vendor selection, image registry mirror, Store publisher anchors, sources); every other pin is a 40-hex commit",
|
|
39
|
-
"customerForms": {
|
|
40
|
-
"names": "a customer edition is one whose pins carry the definition pin. It records its vendor side in exactly one form, closed per kind and channel: the catalogue form, or the catalogue-free form. Every other edition carries neither form's marker: no catalogue pin. The kinds and channels each form admits are enforced by the writers and this CLI's readers (the descriptor parse); the catalogue-free form being develop only also rests on only the develop resolve identity being able to sign one. The deploy root's admission does not enforce the forms: it re-vendors this contract and reads neither provenancePins nor the forms",
|
|
41
|
-
"catalogue": {
|
|
42
|
-
"pins": "the catalogue pin, the definition pin, and a sources/<name> commit per source the definition declares; nothing else. The distribution lock names the catalogue artifact by catalogueDigest, never by catalogueContentDigest",
|
|
43
|
-
"kinds": {
|
|
44
|
-
"resolved": ["develop", "release"],
|
|
45
|
-
"sealed": ["release"]
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
"catalogue-free": {
|
|
49
|
-
"pins": "no catalogue pin: the vendor side was resolved from the vendor members in the same call, so the edition records the vendor member pins (keys matching vendorMemberPinPattern, at least one) as 40-hex commits, beside the definition pin, the \"definition-repository\" commit (the commit of the customer definition repository the definition was read at), the sources/<name> commits and the other 40-hex pins of the resolve. The catalogue the vendor step wrote is named in the distribution lock only, by catalogueContentDigest (sha256 of its exact catalogue.json bytes, kernel edition protocol v37), never by catalogueDigest: no catalogue artifact exists",
|
|
50
|
-
"kinds": {
|
|
51
|
-
"resolved": ["develop"]
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"vendorMemberPinPattern": "^(?:repos|submodules)/[a-z0-9][a-z0-9-]*$"
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"imageNamespaceSegment": "dev",
|
|
58
|
-
"evidenceTrust": {
|
|
59
|
-
"states": {
|
|
60
|
-
"armed": "the data root declares an evidence trust policy that is pinned and ARMED on the channel of the edition",
|
|
61
|
-
"not-armed": "a RESOLVED edition of the develop channel only (vendor or customer): its data root declares no policy, or one that is UNARMED on the develop channel. A customer develop edition always records it while a develop catalogue carries no edition-catalogue (E4) evidence. A sealed edition, and a resolved edition of any other channel, never records not-armed"
|
|
62
|
-
},
|
|
63
|
-
"statesByKind": {
|
|
64
|
-
"resolved": {
|
|
65
|
-
"develop": [
|
|
66
|
-
"armed",
|
|
67
|
-
"not-armed"
|
|
68
|
-
],
|
|
69
|
-
"release": [
|
|
70
|
-
"armed"
|
|
71
|
-
]
|
|
72
|
-
},
|
|
73
|
-
"sealed": {
|
|
74
|
-
"release": [
|
|
75
|
-
"armed"
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
"refusal": {
|
|
80
|
-
"code": "EVIDENCE_TRUST_REQUIRED_UNARMED",
|
|
81
|
-
"when": "an edition is written while the data root's evidence trust policy is not armed on the channel of the edition (none declared, or declared but UNARMED or PARTIALLY ARMED there) and statesByKind admits only armed for its kind on that channel (every sealed edition; a resolved edition of any channel but develop): no descriptor or artifact is written, and no configuration key admits one. A resolved develop edition records not-armed instead, except under a policy PARTIALLY ARMED on develop, which is refused for every edition"
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
"signers": {
|
|
85
|
-
"oidcIssuer": "https://token.actions.githubusercontent.com",
|
|
86
|
-
"identity": "the exact keyless certificate identity of a publisher is https://github.com/<repository>/<workflow>@<ref>, issued by oidcIssuer and by nothing else; no wildcard, and no identity signs both kinds",
|
|
87
|
-
"publishers": {
|
|
88
|
-
"values": "the publisher of an edition of each kind on each channel is data root data, never this contract's: <data root>/edition-workspace.json editionPublishers.<kind>.<channel>, each exactly publishers.shape; a publisher the data root does not declare is refused by name, with no default and no fallback",
|
|
89
|
-
"channelsByKind": {
|
|
90
|
-
"resolved": ["develop", "release"],
|
|
91
|
-
"sealed": ["release"]
|
|
92
|
-
},
|
|
93
|
-
"shape": {
|
|
94
|
-
"repository": "^[A-Za-z0-9][A-Za-z0-9-]*/[A-Za-z0-9._-]+$",
|
|
95
|
-
"workflow": "^\\.github/workflows/[A-Za-z0-9._-]+\\.ya?ml$",
|
|
96
|
-
"ref": "^refs/heads/[A-Za-z0-9._/-]+$"
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
// edition-image-seal — seal image subjects against the repositories of one channel.
|
|
2
|
-
//
|
|
3
|
-
// The vendor release sealer verifies `<imageRef>:<contentHash>` and writes the digest
|
|
4
|
-
// the registry served. This does the same for an edition of either channel, with the
|
|
5
|
-
// SAME verifier (`verifyDistributionPlatforms`, required platforms enforced)
|
|
6
|
-
// and the SAME digest decision (`planDigestSeal`). Only the repository differs:
|
|
7
|
-
// develop the repository the producer's develop lane pushes to (`developImageRef`, contract C1)
|
|
8
|
-
// release the subject's own imageRef (the identity)
|
|
9
|
-
// It never builds or rebuilds an image: a coordinate that is not there is refused, and the digest
|
|
10
|
-
// sealed is the digest the registry serves for `<repository>:<contentHash>`.
|
|
11
|
-
//
|
|
12
|
-
// A coordinate that is not there is "not built yet": the producer's CI is not
|
|
13
|
-
// green or still running. A third-party subject (a pinned OCI biome's image) is never re-homed and never "not built":
|
|
14
|
-
// it keeps its pinned imageRef and is verified BY the pin's manifest digest (third-party-image-pins.mjs). EVERY such subject is collected and named at once;
|
|
15
|
-
// any other failure (a 403, a malformed index, an absent required platform)
|
|
16
|
-
// aborts as it does in the release.
|
|
17
|
-
|
|
18
|
-
import { developImageRef } from './develop-image-coordinate.mjs';
|
|
19
|
-
import { notBuiltYetError } from './develop-image-probe.mjs';
|
|
20
|
-
import { EditionChannel } from './edition-channel.mjs';
|
|
21
|
-
import { editionsRoot } from './edition-workspace.mjs';
|
|
22
|
-
import { imageSubjectIdentity } from './image-subject-identity.mjs';
|
|
23
|
-
import { validateImmutableImageLock, loadKernelDistributionSchemas, } from './lib.mjs';
|
|
24
|
-
import { isNotPublishedYet, planDigestSeal } from './seal-image-digests.mjs';
|
|
25
|
-
import { imageSubjectKey, pinnedManifestDigests, thirdPartyImagePins } from './third-party-image-pins.mjs';
|
|
26
|
-
import { verifyDistributionPlatforms } from './verify-image-platforms.mjs';
|
|
27
|
-
|
|
28
|
-
/** The repository a channel's own image subjects are verified and sealed in, from the subject's release imageRef. */
|
|
29
|
-
const CHANNEL_IMAGE_REF = Object.freeze({
|
|
30
|
-
[EditionChannel.Develop]: developImageRef,
|
|
31
|
-
[EditionChannel.Release]: (releaseImageRef) => releaseImageRef,
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
/** The repository `channel` seals a subject whose release imageRef is `releaseImageRef` in. */
|
|
35
|
-
export function channelImageRef(channel, releaseImageRef) {
|
|
36
|
-
const toChannelRef = CHANNEL_IMAGE_REF[channel];
|
|
37
|
-
if (toChannelRef === undefined) {throw new Error(`cannot seal image subjects for channel ${JSON.stringify(channel)}`);}
|
|
38
|
-
return toChannelRef(releaseImageRef);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* The row-level seal: every subject re-homed to its channel's repository, verified
|
|
43
|
-
* there for its required platforms, and given the digest the registry served.
|
|
44
|
-
* It takes SUBJECTS, not a lock, so a caller that owns only some rows of a lock
|
|
45
|
-
* (a customer's own image rows) seals exactly those.
|
|
46
|
-
*
|
|
47
|
-
* @param {object} request
|
|
48
|
-
* @param {string} request.channel `develop` or `release`: which repositories the subjects are sealed in
|
|
49
|
-
* @param {string} request.distributionId the edition the subjects belong to (named in refusals)
|
|
50
|
-
* @param {object[]} request.subjects image subjects (release refs, unsealed)
|
|
51
|
-
* @param {{byRepository: (repository: string) => object|undefined}} [request.thirdPartyPins] the data root's third-party
|
|
52
|
-
* source pins: a subject of a pinned repository keeps its imageRef and is sealed at the pin's manifest digest
|
|
53
|
-
* @returns the subjects with the channel's refs and verified digests
|
|
54
|
-
*/
|
|
55
|
-
export async function sealImageSubjects({
|
|
56
|
-
channel,
|
|
57
|
-
distributionId,
|
|
58
|
-
subjects,
|
|
59
|
-
thirdPartyPins = undefined,
|
|
60
|
-
distributionsRoot = editionsRoot(),
|
|
61
|
-
env = process.env,
|
|
62
|
-
fetchImpl = globalThis.fetch,
|
|
63
|
-
run = null,
|
|
64
|
-
progress = null,
|
|
65
|
-
}) {
|
|
66
|
-
const pinnedImages = thirdPartyPins === undefined ? new Map() : thirdPartyImagePins({ pins: thirdPartyPins, subjects });
|
|
67
|
-
const channelSubjects = subjects.map((subject) => ({
|
|
68
|
-
...subject,
|
|
69
|
-
imageRef: pinnedImages.has(imageSubjectKey(subject)) ? subject.imageRef : channelImageRef(channel, subject.imageRef),
|
|
70
|
-
}));
|
|
71
|
-
const report = await verifyDistributionPlatforms({
|
|
72
|
-
imageLock: { distributionId, subjects: channelSubjects },
|
|
73
|
-
distributionsRoot,
|
|
74
|
-
env,
|
|
75
|
-
fetchImpl,
|
|
76
|
-
run,
|
|
77
|
-
collectFailures: true,
|
|
78
|
-
progress,
|
|
79
|
-
pinnedDigests: pinnedManifestDigests(pinnedImages),
|
|
80
|
-
});
|
|
81
|
-
const aborting = report.failures.find(({ error }) => !isNotPublishedYet(error));
|
|
82
|
-
if (aborting) {throw aborting.error;}
|
|
83
|
-
if (report.failures.length > 0) {
|
|
84
|
-
throw notBuiltYetError(distributionId, report.failures.map(({ subject }) => subject), channel);
|
|
85
|
-
}
|
|
86
|
-
const { writes, unchanged } = planDigestSeal({ subjects: channelSubjects, verified: report.subjects });
|
|
87
|
-
const digests = new Map([...writes, ...unchanged].map(({ key, digest }) => [key, digest]));
|
|
88
|
-
return channelSubjects.map((subject) => ({
|
|
89
|
-
...subject,
|
|
90
|
-
imageDigest: digests.get(imageSubjectIdentity(subject)),
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* The seal of a WHOLE images lock (the vendor snapshot): every subject sealed,
|
|
96
|
-
* and the result parsed as the kernel's image lock.
|
|
97
|
-
*
|
|
98
|
-
* @param {object} request
|
|
99
|
-
* @param {object} request.imageLock the snapshot images lock (release refs, unsealed)
|
|
100
|
-
* @returns the images lock with the channel's refs and verified digests, kernel-validated
|
|
101
|
-
*/
|
|
102
|
-
export async function sealImages({ imageLock, ...sealOptions }) {
|
|
103
|
-
const subjects = await sealImageSubjects({
|
|
104
|
-
distributionId: imageLock.distributionId,
|
|
105
|
-
subjects: imageLock.subjects,
|
|
106
|
-
...sealOptions,
|
|
107
|
-
});
|
|
108
|
-
const schemas = await loadKernelDistributionSchemas();
|
|
109
|
-
return validateImmutableImageLock(schemas.parseImageLock({ ...imageLock, subjects }), schemas);
|
|
110
|
-
}
|
package/edition/edition-kind.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// edition-kind — the closed vocabularies of an edition descriptor (xema.edition/v2) that the
|
|
2
|
-
// contract (edition-contract.json) names: the lock KIND and the evidence trust STATE. They are
|
|
3
|
-
// enums here so a reader branches on names, and edition-contract-parse holds the contract to
|
|
4
|
-
// exactly these sets: a contract that names another kind or state is refused, never read.
|
|
5
|
-
|
|
6
|
-
/** What an edition IS: a lock resolved by a resolve run, or the seal of one exact resolved edition (`sealOf`). */
|
|
7
|
-
export const EditionKind = Object.freeze({ Resolved: 'resolved', Sealed: 'sealed' });
|
|
8
|
-
|
|
9
|
-
/** Whether the data root's editions are evidence-gated, as the descriptor records it. */
|
|
10
|
-
export const EvidenceTrustState = Object.freeze({ Armed: 'armed', NotArmed: 'not-armed' });
|
package/edition/edition-list.mjs
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// `xema edition list`: the offering ids of an editions root, as JSON.
|
|
3
|
-
//
|
|
4
|
-
// usage: xema edition list --editions-root <dir>
|
|
5
|
-
// stdout: {"schemaVersion":1,"editions":["<id>",…]} in canonical id order.
|
|
6
|
-
|
|
7
|
-
import { discoverDistributionIds } from './distribution-paths.mjs';
|
|
8
|
-
import {
|
|
9
|
-
WorkspaceRoot,
|
|
10
|
-
configureEditionWorkspaceFromArgv,
|
|
11
|
-
editionsRoot,
|
|
12
|
-
isEntryModule,
|
|
13
|
-
} from './edition-workspace.mjs';
|
|
14
|
-
import { serializeJson } from './lib.mjs';
|
|
15
|
-
|
|
16
|
-
export function listEditions({ editionsRoot: root }) {
|
|
17
|
-
return { schemaVersion: 1, editions: discoverDistributionIds(root) };
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function main() {
|
|
21
|
-
const rest = configureEditionWorkspaceFromArgv(process.argv.slice(2), [WorkspaceRoot.Editions]);
|
|
22
|
-
if (rest.length > 0) {
|
|
23
|
-
throw new Error('usage: xema edition list --editions-root <dir>');
|
|
24
|
-
}
|
|
25
|
-
process.stdout.write(serializeJson(listEditions({ editionsRoot: editionsRoot() })));
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (isEntryModule(import.meta.url)) {
|
|
29
|
-
try {
|
|
30
|
-
main();
|
|
31
|
-
} catch (error) {
|
|
32
|
-
console.error(`[edition-list] ${error.message}`);
|
|
33
|
-
process.exitCode = 1;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// `xema edition locks <id>`: one edition's validated locks, as JSON.
|
|
3
|
-
//
|
|
4
|
-
// usage: xema edition locks <id> --channel <release|develop> --data-root <dir> --editions-root <dir> --kernel <dir>
|
|
5
|
-
//
|
|
6
|
-
// The locks are read and validated exactly as the evidence verifier reads
|
|
7
|
-
// them: `images.lock.json` and `distribution.lock.json` under the kernel
|
|
8
|
-
// schema, immutable coordinates only, and the image lock's kernel contract
|
|
9
|
-
// authority equal to the data root's runtime image source index. The
|
|
10
|
-
// distribution lock is read for `--channel`: an unsealed lock on develop only,
|
|
11
|
-
// a sealed one on every other channel. A consumer
|
|
12
|
-
// reads this output instead of parsing or validating a lock itself.
|
|
13
|
-
|
|
14
|
-
import { assertCanonicalDistributionId } from './distribution-paths.mjs';
|
|
15
|
-
import { EditionChannel, parseChannelArgs } from './edition-channel.mjs';
|
|
16
|
-
import {
|
|
17
|
-
WorkspaceRoot,
|
|
18
|
-
configureEditionWorkspaceFromArgv,
|
|
19
|
-
dataRoot,
|
|
20
|
-
editionsRoot,
|
|
21
|
-
isEntryModule,
|
|
22
|
-
} from './edition-workspace.mjs';
|
|
23
|
-
import { loadValidatedLocks } from './image-evidence.mjs';
|
|
24
|
-
import { compareStrings, loadKernelDistributionSchemas, serializeJson } from './lib.mjs';
|
|
25
|
-
|
|
26
|
-
const USAGE =
|
|
27
|
-
`usage: xema edition locks <id> --channel <${Object.values(EditionChannel).join('|')}> --data-root <dir> --editions-root <dir> --kernel <dir>`;
|
|
28
|
-
|
|
29
|
-
export async function readEditionLocks({ distributionId, channel, dataRoot: data, editionsRoot: editions, schemas }) {
|
|
30
|
-
assertCanonicalDistributionId(distributionId);
|
|
31
|
-
const { distributionLock, imageLock, repositoryPins, runtimeSourceIndex } =
|
|
32
|
-
await loadValidatedLocks(distributionId, data, schemas, { editionsRoot: editions, channel });
|
|
33
|
-
return {
|
|
34
|
-
schemaVersion: 1,
|
|
35
|
-
distributionId,
|
|
36
|
-
contractAuthority: runtimeSourceIndex.contractAuthority,
|
|
37
|
-
distributionLock,
|
|
38
|
-
imageLock,
|
|
39
|
-
repositoryPins: [...repositoryPins.values()].sort((left, right) =>
|
|
40
|
-
compareStrings(left.repo, right.repo),
|
|
41
|
-
),
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async function main() {
|
|
46
|
-
const rest = configureEditionWorkspaceFromArgv(process.argv.slice(2), [
|
|
47
|
-
WorkspaceRoot.Data,
|
|
48
|
-
WorkspaceRoot.Editions,
|
|
49
|
-
WorkspaceRoot.Kernel,
|
|
50
|
-
]);
|
|
51
|
-
if (rest.length === 0 || rest[0].startsWith('--')) {
|
|
52
|
-
throw new Error(USAGE);
|
|
53
|
-
}
|
|
54
|
-
let channel;
|
|
55
|
-
try {
|
|
56
|
-
({ channel } = parseChannelArgs(rest.slice(1)));
|
|
57
|
-
} catch (error) {
|
|
58
|
-
throw new Error(`${error.message}\n${USAGE}`);
|
|
59
|
-
}
|
|
60
|
-
const schemas = await loadKernelDistributionSchemas();
|
|
61
|
-
process.stdout.write(
|
|
62
|
-
serializeJson(
|
|
63
|
-
await readEditionLocks({
|
|
64
|
-
distributionId: rest[0],
|
|
65
|
-
channel,
|
|
66
|
-
dataRoot: dataRoot(),
|
|
67
|
-
editionsRoot: editionsRoot(),
|
|
68
|
-
schemas,
|
|
69
|
-
}),
|
|
70
|
-
),
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (isEntryModule(import.meta.url)) {
|
|
75
|
-
main().catch((error) => {
|
|
76
|
-
console.error(`[edition-locks] ${error.message}`);
|
|
77
|
-
process.exitCode = 1;
|
|
78
|
-
});
|
|
79
|
-
}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
// edition-pin-verbs — `xema edition pin` and `xema edition unpin`: the only
|
|
2
|
-
// supported way to change a vendor edition's `sourcePins` (edition-source-pins.mjs).
|
|
3
|
-
//
|
|
4
|
-
// `pin` validates the hold with the SAME checks a resolve applies
|
|
5
|
-
// (`effectiveRepositoryPins`: graph repository, not the kernel, not equal to the
|
|
6
|
-
// shared pin; `assertEditionPinsAuthorized`: commit present, contained in
|
|
7
|
-
// origin/main, built), writes the entry into the edition's definition keeping
|
|
8
|
-
// its formatting and key order, and re-resolves the edition. `unpin` removes one
|
|
9
|
-
// entry (or all), drops the key when empty, and re-resolves. Both are all or
|
|
10
|
-
// nothing: a failed re-resolve restores the edition directory byte for byte.
|
|
11
|
-
|
|
12
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
13
|
-
import { dirname, join } from 'node:path';
|
|
14
|
-
|
|
15
|
-
import { assertCanonicalDistributionId } from './distribution-paths.mjs';
|
|
16
|
-
import {
|
|
17
|
-
assertEditionPinsAuthorized,
|
|
18
|
-
effectiveRepositoryPins,
|
|
19
|
-
parseEditionSourcePins,
|
|
20
|
-
SOURCE_PINS_KEY,
|
|
21
|
-
} from './edition-source-pins.mjs';
|
|
22
|
-
import { editionsRoot, runtimeImageSourceIndexPath } from './edition-workspace.mjs';
|
|
23
|
-
import { loadKernelDistributionSchemas } from './lib.mjs';
|
|
24
|
-
import { writeResolvedLockSet } from './resolve-edition.mjs';
|
|
25
|
-
import { loadBuildLedger } from './source-authority.mjs';
|
|
26
|
-
import { readStrictJsonFile } from './strict-json.mjs';
|
|
27
|
-
|
|
28
|
-
export const PIN_USAGE =
|
|
29
|
-
'usage: xema edition pin <edition> <repo> <ref> --until "<exit condition>" --data-root <dir> --editions-root <dir> --sources-root <dir> --kernel <dir>';
|
|
30
|
-
export const UNPIN_USAGE =
|
|
31
|
-
'usage: xema edition unpin <edition> [<repo>] --data-root <dir> --editions-root <dir> --sources-root <dir> --kernel <dir>';
|
|
32
|
-
|
|
33
|
-
const UNTIL_FLAG = '--until';
|
|
34
|
-
|
|
35
|
-
/** `{ positional, until }` from the arguments after the root flags. */
|
|
36
|
-
export function parsePinArgs(args) {
|
|
37
|
-
const positional = [];
|
|
38
|
-
let until;
|
|
39
|
-
for (let i = 0; i < args.length; i += 1) {
|
|
40
|
-
const argument = args[i];
|
|
41
|
-
if (argument === UNTIL_FLAG || argument.startsWith(`${UNTIL_FLAG}=`)) {
|
|
42
|
-
if (until !== undefined) {throw new Error(`${UNTIL_FLAG} given twice\n${PIN_USAGE}`);}
|
|
43
|
-
until = argument === UNTIL_FLAG ? args[(i += 1)] : argument.slice(UNTIL_FLAG.length + 1);
|
|
44
|
-
} else if (argument.startsWith('--')) {
|
|
45
|
-
throw new Error(`unexpected argument ${JSON.stringify(argument)}\n${PIN_USAGE}`);
|
|
46
|
-
} else {
|
|
47
|
-
positional.push(argument);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return { positional, until };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const definitionPath = (id) => join(editionsRoot(), id, 'xema-distribution.json');
|
|
54
|
-
|
|
55
|
-
/** The file text and its parsed document; the text is what a rewrite preserves. */
|
|
56
|
-
function readDefinition(id) {
|
|
57
|
-
assertCanonicalDistributionId(id);
|
|
58
|
-
const path = definitionPath(id);
|
|
59
|
-
let text;
|
|
60
|
-
try {
|
|
61
|
-
text = readFileSync(path, 'utf8');
|
|
62
|
-
} catch {
|
|
63
|
-
throw new Error(`edition "${id}" not found: ${path} does not exist`);
|
|
64
|
-
}
|
|
65
|
-
return { path, text, document: readStrictJsonFile(path) };
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** The indent unit (a tab or the spaces of the first indented line) and the trailing newline of `text`. */
|
|
69
|
-
function formatOf(text) {
|
|
70
|
-
const indent = /^([ \t]+)\S/mu.exec(text)?.[1] ?? ' ';
|
|
71
|
-
return { indent, trailingNewline: text.endsWith('\n') };
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/** `document` serialized in the format of the file it was read from. */
|
|
75
|
-
function render(document, text) {
|
|
76
|
-
const { indent, trailingNewline } = formatOf(text);
|
|
77
|
-
return `${JSON.stringify(document, null, indent)}${trailingNewline ? '\n' : ''}`;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** The document with `sourcePins` set (appended last when new, in place when present) or, for none, removed. */
|
|
81
|
-
function withSourcePins(document, sourcePins) {
|
|
82
|
-
if (sourcePins.length === 0) {
|
|
83
|
-
const { [SOURCE_PINS_KEY]: _removed, ...rest } = document;
|
|
84
|
-
return rest;
|
|
85
|
-
}
|
|
86
|
-
return { ...document, [SOURCE_PINS_KEY]: sourcePins };
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** Every file under `directory` (relative path to bytes), the pre-command state a failed command returns to. */
|
|
90
|
-
function snapshotDirectory(directory) {
|
|
91
|
-
const files = new Map();
|
|
92
|
-
const walk = (current) => {
|
|
93
|
-
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
94
|
-
const path = join(current, entry.name);
|
|
95
|
-
if (entry.isDirectory()) {walk(path);} else {files.set(path, readFileSync(path));}
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
walk(directory);
|
|
99
|
-
return files;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/** Return `directory` to `snapshot` byte for byte: rewrite what changed, delete what the command added. */
|
|
103
|
-
function restoreDirectory(directory, snapshot) {
|
|
104
|
-
const walk = (current) => {
|
|
105
|
-
for (const entry of readdirSync(current, { withFileTypes: true })) {
|
|
106
|
-
const path = join(current, entry.name);
|
|
107
|
-
if (entry.isDirectory()) {walk(path);} else if (!snapshot.has(path)) {rmSync(path);}
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
walk(directory);
|
|
111
|
-
for (const [path, bytes] of snapshot) {
|
|
112
|
-
if (!existsSync(path) || !readFileSync(path).equals(bytes)) {
|
|
113
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
114
|
-
writeFileSync(path, bytes);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Write the definition and re-resolve, all or nothing: on any failure the
|
|
121
|
-
* edition directory (definition and every lock the resolve wrote) is restored
|
|
122
|
-
* to its exact prior bytes and the original error is rethrown.
|
|
123
|
-
*/
|
|
124
|
-
async function writeAndReresolve({ id, path, rendered }) {
|
|
125
|
-
const directory = dirname(path);
|
|
126
|
-
const snapshot = snapshotDirectory(directory);
|
|
127
|
-
try {
|
|
128
|
-
writeFileSync(path, rendered);
|
|
129
|
-
await writeResolvedLockSet(id);
|
|
130
|
-
} catch (error) {
|
|
131
|
-
restoreDirectory(directory, snapshot);
|
|
132
|
-
throw error;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Hold `repo` of edition `id` at `ref` until `until`, then re-resolve it. An
|
|
138
|
-
* existing hold of the same repository is replaced.
|
|
139
|
-
*/
|
|
140
|
-
export async function pinEdition({ id, repo, ref, until, schemas, log = console.log }) {
|
|
141
|
-
const { path, text, document } = readDefinition(id);
|
|
142
|
-
const current = parseEditionSourcePins(document[SOURCE_PINS_KEY], id);
|
|
143
|
-
const entry = parseEditionSourcePins([{ repo, ref, until }], id)[0];
|
|
144
|
-
const sourcePins = current.some((pin) => pin.repo === repo)
|
|
145
|
-
? current.map((pin) => (pin.repo === repo ? entry : pin))
|
|
146
|
-
: [...current, entry];
|
|
147
|
-
const committed = schemas.parseRuntimeImageSourceIndex(readStrictJsonFile(runtimeImageSourceIndexPath()));
|
|
148
|
-
effectiveRepositoryPins(committed.repositoryPins, sourcePins, { id, contractAuthority: committed.contractAuthority });
|
|
149
|
-
assertEditionPinsAuthorized({ id, sourcePins: [entry], ledger: loadBuildLedger() });
|
|
150
|
-
await writeAndReresolve({ id, path, rendered: render(withSourcePins(document, sourcePins), text) });
|
|
151
|
-
log(`[edition:pin] ${id}: holding ${repo} @${ref.slice(0, 12)} until: ${until}`);
|
|
152
|
-
return sourcePins;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/** Remove the hold on `repo` (or every hold) of edition `id`, then re-resolve it. */
|
|
156
|
-
export async function unpinEdition({ id, repo, log = console.log }) {
|
|
157
|
-
const { path, text, document } = readDefinition(id);
|
|
158
|
-
const current = parseEditionSourcePins(document[SOURCE_PINS_KEY], id);
|
|
159
|
-
if (current.length === 0) {
|
|
160
|
-
log(`[edition:unpin] ${id}: holds nothing`);
|
|
161
|
-
return current;
|
|
162
|
-
}
|
|
163
|
-
if (repo !== undefined && !current.some((pin) => pin.repo === repo)) {
|
|
164
|
-
throw new Error(`edition "${id}" does not hold ${repo} (it holds: ${current.map((pin) => pin.repo).join(', ')})`);
|
|
165
|
-
}
|
|
166
|
-
const sourcePins = repo === undefined ? [] : current.filter((pin) => pin.repo !== repo);
|
|
167
|
-
await writeAndReresolve({ id, path, rendered: render(withSourcePins(document, sourcePins), text) });
|
|
168
|
-
log(`[edition:unpin] ${id}: released ${repo ?? current.map((pin) => pin.repo).join(', ')}`);
|
|
169
|
-
return sourcePins;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export async function runPin(args) {
|
|
173
|
-
const { positional, until } = parsePinArgs(args);
|
|
174
|
-
if (positional.length !== 3 || until === undefined) {throw new Error(PIN_USAGE);}
|
|
175
|
-
const [id, repo, ref] = positional;
|
|
176
|
-
await pinEdition({ id, repo, ref, until, schemas: await loadKernelDistributionSchemas() });
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export async function runUnpin(args) {
|
|
180
|
-
const { positional, until } = parsePinArgs(args);
|
|
181
|
-
if (positional.length < 1 || positional.length > 2 || until !== undefined) {throw new Error(UNPIN_USAGE);}
|
|
182
|
-
await unpinEdition({ id: positional[0], repo: positional[1] });
|
|
183
|
-
}
|
package/edition/edition-pin.mjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// `xema edition pin <edition> <repo> <ref> --until "<exit condition>"`: hold one
|
|
3
|
-
// repository of a vendor edition at an exact commit, then re-resolve the edition.
|
|
4
|
-
// The logic is edition-pin-verbs.mjs; see edition-source-pins.mjs for the trust it applies.
|
|
5
|
-
//
|
|
6
|
-
// usage: xema edition pin <edition> <repo> <ref> --until "<exit condition>" --data-root <dir> --editions-root <dir> --sources-root <dir> --kernel <dir>
|
|
7
|
-
|
|
8
|
-
import { runPin } from './edition-pin-verbs.mjs';
|
|
9
|
-
import { WorkspaceRoot, configureEditionWorkspaceFromProcess, isEntryModule } from './edition-workspace.mjs';
|
|
10
|
-
|
|
11
|
-
if (isEntryModule(import.meta.url)) {
|
|
12
|
-
configureEditionWorkspaceFromProcess([WorkspaceRoot.Data, WorkspaceRoot.Editions, WorkspaceRoot.Sources, WorkspaceRoot.Kernel]);
|
|
13
|
-
runPin(process.argv.slice(2)).catch((error) => {
|
|
14
|
-
console.error(`[edition:pin] ${error.message}`);
|
|
15
|
-
process.exit(1);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
// edition-pinned-inputs — the ONE per-edition source of the indexes an edition
|
|
2
|
-
// resolves from, and of the repository pins it resolves at.
|
|
3
|
-
//
|
|
4
|
-
// An edition that holds no repository (no `sourcePins`, edition-source-pins.mjs)
|
|
5
|
-
// reads the committed data-root files exactly as before: nothing is rebuilt.
|
|
6
|
-
// An edition that holds repositories has its three indexes rebuilt at ITS
|
|
7
|
-
// effective pins by the release builders (indexes-at-pins.mjs), after every
|
|
8
|
-
// held commit is authorized. Every per-edition reader (resolve, images, check,
|
|
9
|
-
// seal, catalogue, biome manifests) takes its indexes and pins from here, so a
|
|
10
|
-
// held edition carries the held commit everywhere and none can read the shared
|
|
11
|
-
// pin by the back door.
|
|
12
|
-
//
|
|
13
|
-
// A develop snapshot replaces ALL pins and does not come through here:
|
|
14
|
-
// `sourcePins` do not apply on the develop channel.
|
|
15
|
-
|
|
16
|
-
import { createHash } from 'node:crypto';
|
|
17
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
18
|
-
|
|
19
|
-
import { assertEditionPinsAuthorized, effectiveRepositoryPins, EditionSourcePinsError, readKernelEditionSourcePins } from './edition-source-pins.mjs';
|
|
20
|
-
import { biomeIndexPath, dataRoot, editionsRoot, platformServiceIndexPath, runtimeImageSourceIndexPath, sourcesRoot } from './edition-workspace.mjs';
|
|
21
|
-
import { buildIndexesAtPins } from './indexes-at-pins.mjs';
|
|
22
|
-
import { commandFor } from './remedy-command.mjs';
|
|
23
|
-
import { committedRepositoryPins, loadBuildLedger } from './source-authority.mjs';
|
|
24
|
-
import { readStrictJsonFile } from './strict-json.mjs';
|
|
25
|
-
|
|
26
|
-
function readCommitted(path, remedy) {
|
|
27
|
-
if (!existsSync(path)) {
|
|
28
|
-
throw new Error(`${path} not found — ${remedy}`);
|
|
29
|
-
}
|
|
30
|
-
return readStrictJsonFile(path);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The bypass guard: the rebuilt runtime index must carry exactly the effective
|
|
35
|
-
* pins on both axes. A builder that re-decided a held repository would
|
|
36
|
-
* otherwise resolve it at a commit nobody authorized.
|
|
37
|
-
*/
|
|
38
|
-
function assertRebuiltPinsAreEffective({ id, runtimeImageSourceIndex, repositoryPins }) {
|
|
39
|
-
const rebuilt = new Map(runtimeImageSourceIndex.repositoryPins.map((pin) => [pin.repo, pin]));
|
|
40
|
-
const mismatches = repositoryPins.filter((pin) => {
|
|
41
|
-
const actual = rebuilt.get(pin.repo);
|
|
42
|
-
return actual === undefined || actual.sourceCommit !== pin.sourceCommit || actual.vendoredSourceCommit !== pin.vendoredSourceCommit;
|
|
43
|
-
});
|
|
44
|
-
if (mismatches.length > 0 || rebuilt.size !== repositoryPins.length) {
|
|
45
|
-
throw new EditionSourcePinsError(
|
|
46
|
-
`edition "${id}": the indexes rebuilt at its held pins do not carry the effective repository pins ` +
|
|
47
|
-
`(${mismatches.map((pin) => pin.repo).join(', ') || 'repository set differs'}); refusing to resolve`,
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const memo = new Map();
|
|
53
|
-
|
|
54
|
-
async function heldInputs({ id, sourcePins, committed, schemas }) {
|
|
55
|
-
const repositoryPins = effectiveRepositoryPins(committed.repositoryPins, sourcePins, { id, contractAuthority: committed.contractAuthority });
|
|
56
|
-
assertEditionPinsAuthorized({ id, sourcePins, ledger: loadBuildLedger() });
|
|
57
|
-
const built = await buildIndexesAtPins({ schemas, repositoryPins });
|
|
58
|
-
assertRebuiltPinsAreEffective({ id, runtimeImageSourceIndex: built.runtimeImageSourceIndex, repositoryPins });
|
|
59
|
-
return { ...built, repositoryPins, held: true, sourcePins };
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* An edition that holds nothing reads the committed data-root files, each ONLY
|
|
64
|
-
* when a reader asks for it, as each reader read its own file before: a
|
|
65
|
-
* resolve needs no runtime image source index, a seal needs no platform-service
|
|
66
|
-
* index. A missing file refuses at the point of use, naming itself.
|
|
67
|
-
*/
|
|
68
|
-
function committedInputs({ schemas, sourcePins }) {
|
|
69
|
-
const cache = new Map();
|
|
70
|
-
const once = (name, read) => {
|
|
71
|
-
if (!cache.has(name)) {cache.set(name, read());}
|
|
72
|
-
return cache.get(name);
|
|
73
|
-
};
|
|
74
|
-
return {
|
|
75
|
-
get runtimeImageSourceIndex() {
|
|
76
|
-
return once('runtime', () => schemas.parseRuntimeImageSourceIndex(readStrictJsonFile(runtimeImageSourceIndexPath())));
|
|
77
|
-
},
|
|
78
|
-
get biomeIndex() {
|
|
79
|
-
return once('biome', () => readCommitted(biomeIndexPath(), `run \`${commandFor('build-biome-index.mjs')}\` first`));
|
|
80
|
-
},
|
|
81
|
-
get platformServiceIndex() {
|
|
82
|
-
return once('platform', () =>
|
|
83
|
-
schemas.parsePlatformServiceSourceIndex(
|
|
84
|
-
readCommitted(platformServiceIndexPath(), 'run the trusted platform-service index generator first'),
|
|
85
|
-
),
|
|
86
|
-
);
|
|
87
|
-
},
|
|
88
|
-
get repositoryPins() {
|
|
89
|
-
return effectiveRepositoryPins(committedRepositoryPins(), sourcePins);
|
|
90
|
-
},
|
|
91
|
-
held: false,
|
|
92
|
-
sourcePins,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* @param {string} id the edition
|
|
98
|
-
* @param {{ schemas: object }} kernel the loaded kernel distribution schemas
|
|
99
|
-
* @returns {Promise<{ runtimeImageSourceIndex, biomeIndex, platformServiceIndex, repositoryPins, held: boolean, sourcePins }>}
|
|
100
|
-
*
|
|
101
|
-
* The held (rebuilt) result is memoized per configured roots, edition, declared
|
|
102
|
-
* pins and committed runtime index, so one process pays the rebuild once.
|
|
103
|
-
*/
|
|
104
|
-
export async function editionPinnedInputs(id, { schemas }) {
|
|
105
|
-
const sourcePins = readKernelEditionSourcePins(id, schemas.parseDistribution);
|
|
106
|
-
if (sourcePins.length === 0) {return committedInputs({ schemas, sourcePins });}
|
|
107
|
-
const indexText = readFileSync(runtimeImageSourceIndexPath(), 'utf8');
|
|
108
|
-
const committed = schemas.parseRuntimeImageSourceIndex(readStrictJsonFile(runtimeImageSourceIndexPath()));
|
|
109
|
-
const key = JSON.stringify([dataRoot(), editionsRoot(), sourcesRoot(), id, sourcePins, createHash('sha256').update(indexText).digest('hex')]);
|
|
110
|
-
if (!memo.has(key)) {
|
|
111
|
-
const pending = heldInputs({ id, sourcePins, committed, schemas });
|
|
112
|
-
memo.set(key, pending);
|
|
113
|
-
pending.catch(() => memo.delete(key));
|
|
114
|
-
}
|
|
115
|
-
return memo.get(key);
|
|
116
|
-
}
|