@xemahq/xema 0.59.1 → 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 -1423
- 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 -2351
- 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,491 +0,0 @@
|
|
|
1
|
-
// develop-follow — the body of `xema edition develop follow`: the pins a dev deployment's follow policy selects.
|
|
2
|
-
//
|
|
3
|
-
// A dev deployment follows a reviewed distribution DEFINITION at its develop head: `--definition-at
|
|
4
|
-
// <owner>/<repo>,<path>,<dataRoot>` names the repository, the distribution directory and the data root inside it,
|
|
5
|
-
// each repository-relative. `follow` writes the COMPLETE frozen pin set a `develop resolve` reads, once (wx), and reads
|
|
6
|
-
// no edition and no catalogue. It reuses, and never restates, two existing rules:
|
|
7
|
-
//
|
|
8
|
-
// members every develop-graph member at the newest commit of its signed build records (select-records'
|
|
9
|
-
// selectRecords / newestCommitOnDevelop), with the pins of the CURRENT input (--current-pins) as the
|
|
10
|
-
// published pins: a member whose records are not ahead of its current pin keeps it, one whose records
|
|
11
|
-
// diverged from it is refused by name (DivergedFromPublishedError).
|
|
12
|
-
// tooling the data and kernel pins and the editions root keep freeze-graph's rules unchanged (freezeGraph):
|
|
13
|
-
// each checked-out root is pinned at what is checked out, and the kernel commit must declare an edition
|
|
14
|
-
// protocol this CLI supports; the deploy pin is chosen as below. The members enter freezeGraph as its
|
|
15
|
-
// member pins (freeze-graph --member-pins: a member that keeps its current resolution is pinned at its
|
|
16
|
-
// develop head, never selected). From current pins, each root is then classified against its current pin by ancestry in the root's OWN
|
|
17
|
-
// checkout (classifyToolingRoot): equal is kept, a descendant advanced, an ancestor refused
|
|
18
|
-
// (ToolingRootBehindError), an unrelated commit refused (ToolingRootDivergedError), and a current pin the
|
|
19
|
-
// checkout does not hold refused (ToolingRootHistoryMissingError: never fetched, never guessed; the follow
|
|
20
|
-
// job checks the roots out with full history). A first follow has nothing to classify against and says so.
|
|
21
|
-
// deploy --deploy-sha is an UPPER BOUND, never the pin (the engine publishes on workflow_run after the deploy
|
|
22
|
-
// root's CI, so the head can be ahead of its engine): the pin is the newest first-parent commit of the deploy
|
|
23
|
-
// checkout at or below it whose engine `<--engine-repository>:sha-<12 hex>` the registry already serves.
|
|
24
|
-
// An unpublished commit is skipped; none published within ENGINE_WALK_LIMIT commits is refused by name
|
|
25
|
-
// (NoPublishedEngineError); any registry answer but 404 is operational, never a skip. The walk is
|
|
26
|
-
// deterministic: the same checkout and registry choose the same commit. The summary names it and the
|
|
27
|
-
// skip count. A walk that ends short of the limit at a shallow boundary or an absent parent is refused
|
|
28
|
-
// (ToolingRootHistoryMissingError), never read as "no engine published". The chosen commit is then classified against the current deploy pin like every tooling
|
|
29
|
-
// root, so a walk that lands behind it is refused (ToolingRootBehindError). Only existence is judged
|
|
30
|
-
// here; the engine's signature stays the apply's check.
|
|
31
|
-
// sources every source the definition's chain declares, at its develop head (freezeSources), then newer-wins
|
|
32
|
-
// against its current pin by the same ancestry rule (newestCommitOnDevelop; a head equal to the pin
|
|
33
|
-
// fetches nothing); a diverged source is refused by name, and a current pin absent from the develop
|
|
34
|
-
// history of the source's declared URL is refused as a URL change (FollowSourceUrlChangedError).
|
|
35
|
-
//
|
|
36
|
-
// seals the previous seals the resolve carries generations forward from, frozen so a retry reads no "newest":
|
|
37
|
-
// the OFFERING's newest signed develop edition, read ONCE here from its edition repository through
|
|
38
|
-
// previous-seal-registry.mjs (--previous-seal-signer, verified offline with the pinned cosign), its
|
|
39
|
-
// images.lock bytes and sha256; and the CUSTOMER edition's own previous seal, a follow input passed through
|
|
40
|
-
// (--previous-lock <file> --previous-lock-sha256 <hex>, held to its sha256, or --first-seal). They are
|
|
41
|
-
// written once into --seals-out: offering.images.lock.json, customer.images.lock.json (absent on a first
|
|
42
|
-
// seal) and seals.json naming each file and its sha256 (followSealsDocument). The catalogue-free resolve
|
|
43
|
-
// takes the offering's as --offering-previous-lock and the customer's as --previous-lock.
|
|
44
|
-
//
|
|
45
|
-
// The data root checkout IS the definition's repository, held for consistency with the caller's checkout (the
|
|
46
|
-
// declared repository URL is read from a file inside that checkout, so this is no trust boundary): the data root
|
|
47
|
-
// declares the definition's repository, the checkout is clean (untracked files included) at --data-sha, the data root
|
|
48
|
-
// and the distribution directory are the definition's dataRoot and path, and the editions root is that same
|
|
49
|
-
// repository (there is no --editions-root-url). The kernel checkout is at --kernel-sha. A follow starts from exactly
|
|
50
|
-
// one of `--first` (a FIRST follow, and the summary it prints says so) or `--current-pins <file>`.
|
|
51
|
-
|
|
52
|
-
import { execFileSync, spawnSync } from 'node:child_process';
|
|
53
|
-
import { existsSync, mkdirSync, realpathSync, writeFileSync } from 'node:fs';
|
|
54
|
-
import { basename, join, normalize, relative } from 'node:path';
|
|
55
|
-
|
|
56
|
-
import { canonicalPublicHttpsRepositoryUrl } from './canonical-repository-url.mjs';
|
|
57
|
-
import { headResolver, writeOnce } from './customer-edition-verbs.mjs';
|
|
58
|
-
import { DEFINITION_AT_FLAG } from './customer-flags.mjs';
|
|
59
|
-
import { engineTagOf } from './develop-engine-image.mjs';
|
|
60
|
-
import { freezeGraph, freezeSources } from './develop-freeze.mjs';
|
|
61
|
-
import { developGraphMembers } from './develop-graph.mjs';
|
|
62
|
-
import { PUBLISHED_PIN_TAG, RecordCommitNotOnDevelopError, newestCommitOnDevelop } from './develop-record-ancestry.mjs';
|
|
63
|
-
import { declaredDataRootRepositoryUrl, withRecordVerifier } from './develop-record-verify.mjs';
|
|
64
|
-
import { selectRecords } from './develop-select-records.mjs';
|
|
65
|
-
import { assertCommitPins } from './develop-selection-pins.mjs';
|
|
66
|
-
import { VERIFY_IMAGE_RECORD_BRANCH as DEVELOP_RECORD_BRANCH } from './develop-verify-image-record.mjs';
|
|
67
|
-
import { assertCanonicalDistributionId } from './distribution-paths.mjs';
|
|
68
|
-
import { editionRepository } from './edition-artifact.mjs';
|
|
69
|
-
import { editionWorkspaceConfig } from './edition-config.mjs';
|
|
70
|
-
import { EditionChannel } from './edition-constants.mjs';
|
|
71
|
-
import { dataRoot, deployRoot, editionsRoot, kernelRepoDir } from './edition-workspace.mjs';
|
|
72
|
-
import { assertKernelCommitSupported } from './kernel-protocol-choice.mjs';
|
|
73
|
-
import { compareStrings, loadKernelDistributionSchemas, serializeJson } from './lib.mjs';
|
|
74
|
-
import { SnapshotPinNamespace, dataPinKey, deployPinKey, kernelPinKey, snapshotPinNamespace, snapshotPinSource, sortedSnapshotPins } from './pin-source.mjs';
|
|
75
|
-
import { PREVIOUS_SEAL_SIGNER_FLAG, previousSealFromRegistry } from './previous-seal-registry.mjs';
|
|
76
|
-
import { splitImageRef } from './registry-credentials.mjs';
|
|
77
|
-
import { composeEdition } from './resolve-distribution.mjs';
|
|
78
|
-
import { readPreviousLockBytes } from './resolve-images.mjs';
|
|
79
|
-
import { isNotPublishedYet } from './seal-image-digests.mjs';
|
|
80
|
-
import { readStrictJsonFile } from './strict-json.mjs';
|
|
81
|
-
|
|
82
|
-
const REPOSITORY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9._-]+$/;
|
|
83
|
-
const RELATIVE_SEGMENT = /^[A-Za-z0-9._-]+$/;
|
|
84
|
-
const SHA_PATTERN = /^[0-9a-f]{40}$/;
|
|
85
|
-
// A repository, never a tag or a digest: `<registry>[:port]/<path>`.
|
|
86
|
-
const ENGINE_REPOSITORY_PATTERN = /^[a-z0-9.-]+(:[0-9]+)?(\/[a-z0-9._-]+)+$/;
|
|
87
|
-
|
|
88
|
-
/** How many first-parent commits of the deploy checkout, the upper bound included, the engine walk reads. */
|
|
89
|
-
export const ENGINE_WALK_LIMIT = 50;
|
|
90
|
-
|
|
91
|
-
/** No commit at or below the upper bound has a published engine within the walk. */
|
|
92
|
-
export class NoPublishedEngineError extends Error {
|
|
93
|
-
constructor({ upperBound, engineRepository, walked }) {
|
|
94
|
-
super(`no deploy-root commit at or below --deploy-sha ${upperBound} has a published engine in ${engineRepository} within ${walked} first-parent commit(s) (limit ${ENGINE_WALK_LIMIT}): publish the engine for a develop commit (the deploy root's CI) and follow again`);
|
|
95
|
-
this.name = 'NoPublishedEngineError';
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* The newest commit of `commits` (first-parent order, newest first, the upper bound first) whose engine tag the
|
|
101
|
-
* registry serves: `{ deploySha, upperBound, skipped }`. A 404 skips the commit; any other failure throws.
|
|
102
|
-
*/
|
|
103
|
-
export async function selectPublishedEngineCommit({ commits, upperBound, engineRepository, client }) {
|
|
104
|
-
if (commits[0] !== upperBound) {
|
|
105
|
-
throw new Error(`the deploy walk starts at ${commits[0] ?? 'nothing'}, not at --deploy-sha ${upperBound}`);
|
|
106
|
-
}
|
|
107
|
-
for (const [skipped, commit] of commits.slice(0, ENGINE_WALK_LIMIT).entries()) {
|
|
108
|
-
try {
|
|
109
|
-
await client.getManifestByTag(engineRepository, engineTagOf(commit));
|
|
110
|
-
return { deploySha: commit, upperBound, skipped };
|
|
111
|
-
} catch (error) {
|
|
112
|
-
if (!isNotPublishedYet(error)) {
|
|
113
|
-
throw new Error(`follow: the registry did not answer for the engine ${engineRepository}:${engineTagOf(commit)}: ${error.message}`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
throw new NoPublishedEngineError({ upperBound, engineRepository, walked: Math.min(commits.length, ENGINE_WALK_LIMIT) });
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* The first-parent commits of the deploy checkout from `upperBound` back, newest first, at most the walk limit, read
|
|
122
|
-
* from the local object store only (never a lazy fetch). A walk that ends short of the limit must end at the root
|
|
123
|
-
* commit: a shallow checkout, or a commit of the walk whose object is absent (an absent --deploy-sha or an absent first
|
|
124
|
-
* parent, where git refuses the walk), is ToolingRootHistoryMissingError, never a short walk read as "no engine
|
|
125
|
-
* published".
|
|
126
|
-
*/
|
|
127
|
-
export function deployCommitsAtOrBelow(upperBound, git = runLocalGitText) {
|
|
128
|
-
if (!SHA_PATTERN.test(upperBound ?? '')) {throw new Error(`--deploy-sha is not a 40-hex commit SHA: ${JSON.stringify(upperBound)}`);}
|
|
129
|
-
const dir = deployRoot();
|
|
130
|
-
let listed;
|
|
131
|
-
try {
|
|
132
|
-
listed = git(['rev-list', '--first-parent', `--max-count=${ENGINE_WALK_LIMIT}`, upperBound], dir);
|
|
133
|
-
} catch (error) {
|
|
134
|
-
throw absentCommitOfWalk(upperBound, dir, git) ?? error;
|
|
135
|
-
}
|
|
136
|
-
const commits = listed.split('\n').filter(Boolean);
|
|
137
|
-
if (commits.length < ENGINE_WALK_LIMIT && git(['rev-parse', '--is-shallow-repository'], dir) === 'true') {
|
|
138
|
-
throw new ToolingRootHistoryMissingError(deployPinKey(), commits.at(-1) ?? upperBound, dir, 'history below the shallow boundary');
|
|
139
|
-
}
|
|
140
|
-
return commits;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/** The ToolingRootHistoryMissingError for the first commit of the first-parent walk from `upperBound` the checkout does not hold, or undefined. */
|
|
144
|
-
function absentCommitOfWalk(upperBound, dir, git) {
|
|
145
|
-
const holds = (commit) => {
|
|
146
|
-
try {
|
|
147
|
-
git(['cat-file', '-e', `${commit}^{commit}`], dir);
|
|
148
|
-
return true;
|
|
149
|
-
} catch {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
let commit = upperBound;
|
|
154
|
-
for (let walked = 0; walked < ENGINE_WALK_LIMIT; walked += 1) {
|
|
155
|
-
if (!holds(commit)) {
|
|
156
|
-
return new ToolingRootHistoryMissingError(deployPinKey(), commit, dir, walked === 0 ? '--deploy-sha' : 'first parent of the walk\'s last commit');
|
|
157
|
-
}
|
|
158
|
-
// the commit object's own header: rev-list would need the parent object to name it
|
|
159
|
-
const firstParent = /^parent ([0-9a-f]{40})$/m.exec(git(['cat-file', 'commit', commit], dir).split('\n\n')[0])?.[1];
|
|
160
|
-
if (firstParent === undefined) {return undefined;}
|
|
161
|
-
commit = firstParent;
|
|
162
|
-
}
|
|
163
|
-
return undefined;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/** How a follow started: from no input (first) or from the pins of the current input. */
|
|
167
|
-
export const FollowStart = Object.freeze({ First: 'first', FromCurrent: 'from-current' });
|
|
168
|
-
|
|
169
|
-
/** The flag naming the followed definition triple (freeze-sources' and resolve's `--definition` is a file). */
|
|
170
|
-
export const FOLLOW_DEFINITION_FLAG = DEFINITION_AT_FLAG;
|
|
171
|
-
|
|
172
|
-
/** A repository-relative path: `.` or `/`-separated plain segments, never absolute, never `..`. */
|
|
173
|
-
function relativePath(text, what, flag) {
|
|
174
|
-
if (text === '.') {return '.';}
|
|
175
|
-
const segments = text.split('/');
|
|
176
|
-
if (text === '' || segments.some((segment) => !RELATIVE_SEGMENT.test(segment) || segment === '.' || segment === '..')) {
|
|
177
|
-
throw new Error(`${flag} ${what} ${JSON.stringify(text)} is not a repository-relative path ("." or plain segments joined by "/")`);
|
|
178
|
-
}
|
|
179
|
-
return segments.join('/');
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/** `<owner>/<repo>,<path>,<dataRoot>` (of `flag`: follow's --definition-at, or the catalogue-free resolve's --offering) -> `{ repository, path, dataRoot }`. */
|
|
183
|
-
export function parseFollowDefinition(text, flag = FOLLOW_DEFINITION_FLAG) {
|
|
184
|
-
const parts = typeof text === 'string' ? text.split(',') : [];
|
|
185
|
-
if (parts.length !== 3) {
|
|
186
|
-
throw new Error(`${flag} is <owner>/<repo>,<path>,<dataRoot>, got ${JSON.stringify(text)}`);
|
|
187
|
-
}
|
|
188
|
-
const [repository, path, root] = parts;
|
|
189
|
-
if (!REPOSITORY_PATTERN.test(repository)) {
|
|
190
|
-
throw new Error(`${flag} repository ${JSON.stringify(repository)} is not <owner>/<repo>`);
|
|
191
|
-
}
|
|
192
|
-
const definition = { repository, path: relativePath(path, 'path', flag), dataRoot: relativePath(root, 'dataRoot', flag) };
|
|
193
|
-
if (definition.path === '.') {throw new Error(`${flag} path names the distribution directory, never the repository root`);}
|
|
194
|
-
assertCanonicalDistributionId(basename(definition.path));
|
|
195
|
-
return definition;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/** The `--current-pins` file (a follow's own output, a bare pin map): key -> 40-hex commit, every key in a snapshot pin namespace. */
|
|
199
|
-
export function readCurrentPins(path) {
|
|
200
|
-
const pins = readStrictJsonFile(path);
|
|
201
|
-
if (pins === null || typeof pins !== 'object' || Array.isArray(pins)) {
|
|
202
|
-
throw new Error(`--current-pins ${path} must be an object mapping pin key -> 40-hex commit`);
|
|
203
|
-
}
|
|
204
|
-
for (const key of Object.keys(pins)) {snapshotPinNamespace(key);}
|
|
205
|
-
return assertCommitPins(pins, `--current-pins ${path}`);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
const runGitText = (args, cwd) => execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
|
|
209
|
-
/** runGitText that never lazily fetches a missing object (a partial clone answers from what it holds). */
|
|
210
|
-
const runLocalGitText = (args, cwd) => execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], env: { ...process.env, GIT_NO_LAZY_FETCH: '1' } }).trim();
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Consistency with the caller's checkout: the data root checkout is the definition, the repository the data root
|
|
214
|
-
* declares, clean (untracked files included) at --data-sha, with the data root and the editions root's distribution
|
|
215
|
-
* directory at the definition's dataRoot and path. Returns the id.
|
|
216
|
-
*/
|
|
217
|
-
export function assertDefinitionCheckout({ definition, dataSha, git = runGitText, flag = FOLLOW_DEFINITION_FLAG, shaLabel = '--data-sha' }) {
|
|
218
|
-
const declared = canonicalPublicHttpsRepositoryUrl(declaredDataRootRepositoryUrl(), 'the data root\'s dataRootRepositoryUrl');
|
|
219
|
-
const named = canonicalPublicHttpsRepositoryUrl(`https://github.com/${definition.repository}.git`, `${flag} repository`);
|
|
220
|
-
if (declared !== named) {
|
|
221
|
-
throw new Error(`${flag} names ${definition.repository}, but the data root is the repository ${declared}: the data root is the definition's own`);
|
|
222
|
-
}
|
|
223
|
-
const top = realpathSync(git(['rev-parse', '--show-toplevel'], dataRoot()));
|
|
224
|
-
const head = git(['rev-parse', 'HEAD'], top);
|
|
225
|
-
if (head !== dataSha) {
|
|
226
|
-
throw new Error(`${shaLabel} is ${dataSha}, but the definition checkout ${top} is at ${head}`);
|
|
227
|
-
}
|
|
228
|
-
const dirty = git(['status', '--porcelain', '--untracked-files=all'], top);
|
|
229
|
-
if (dirty !== '') {
|
|
230
|
-
throw new Error(`the definition checkout ${top} has uncommitted or untracked changes: the definition is read only as committed at ${shaLabel}`);
|
|
231
|
-
}
|
|
232
|
-
const at = (dir) => normalize(relative(top, realpathSync(dir)) || '.');
|
|
233
|
-
if (at(dataRoot()) !== normalize(definition.dataRoot)) {
|
|
234
|
-
throw new Error(`--data-root is ${at(dataRoot())} of the definition checkout, but ${flag} names the data root ${definition.dataRoot}`);
|
|
235
|
-
}
|
|
236
|
-
const id = basename(definition.path);
|
|
237
|
-
if (!existsSync(join(editionsRoot(), id))) {
|
|
238
|
-
throw new Error(`the editions root holds no "${id}", but ${flag} names ${definition.path}`);
|
|
239
|
-
}
|
|
240
|
-
if (at(join(editionsRoot(), id)) !== normalize(definition.path)) {
|
|
241
|
-
throw new Error(`the editions root holds "${id}" at ${at(join(editionsRoot(), id))} of the definition checkout, but ${flag} names ${definition.path}`);
|
|
242
|
-
}
|
|
243
|
-
return id;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/** How a tooling root's followed commit stands against its current pin. */
|
|
247
|
-
export const ToolingRootVerdict = Object.freeze({ Kept: 'kept', Advanced: 'advanced', Added: 'added' });
|
|
248
|
-
|
|
249
|
-
/** The followed commit of a tooling root is an ancestor of its current pin: the follow would take it backwards. */
|
|
250
|
-
export class ToolingRootBehindError extends Error {
|
|
251
|
-
constructor(key, followed, current) {
|
|
252
|
-
super(`${key}: the followed commit ${followed} is behind the current pin ${current} (an ancestor of it): a follow never takes a tooling root backwards; check out the current commit or a descendant`);
|
|
253
|
-
this.name = 'ToolingRootBehindError';
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/** The followed commit of a tooling root and its current pin are not ancestor-related. */
|
|
258
|
-
export class ToolingRootDivergedError extends Error {
|
|
259
|
-
constructor(key, followed, current) {
|
|
260
|
-
super(`${key}: the followed commit ${followed} and the current pin ${current} are not ancestor-related`);
|
|
261
|
-
this.name = 'ToolingRootDivergedError';
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/** The root's checkout does not hold one of the two commits (`role`: the current pin or the followed commit), so they cannot be compared: refused, never fetched. */
|
|
266
|
-
export class ToolingRootHistoryMissingError extends Error {
|
|
267
|
-
constructor(key, commit, dir, role) {
|
|
268
|
-
super(`${key}: the checkout ${dir} does not hold the ${role} ${commit}: check the root out with full history (fetch-depth 0) and follow again`);
|
|
269
|
-
this.role = role;
|
|
270
|
-
this.name = 'ToolingRootHistoryMissingError';
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/** `{ status, stderr }` of one git run in `dir`, never lazily fetching a missing object. */
|
|
275
|
-
const runGitStatus = (args, dir) => {
|
|
276
|
-
const result = spawnSync('git', args, { cwd: dir, env: { ...process.env, GIT_NO_LAZY_FETCH: '1' }, encoding: 'utf8' });
|
|
277
|
-
if (result.error !== undefined || result.status === null) {throw new Error(`git ${args[0]} could not run in ${dir}: ${result.error?.message ?? `killed by ${result.signal}`}`);}
|
|
278
|
-
return { status: result.status, stderr: result.stderr };
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* A tooling root's followed commit against its current pin, by ancestry in the root's own checkout `dir`: kept or
|
|
283
|
-
* advanced, otherwise a typed refusal. Equal commits answer without git.
|
|
284
|
-
*/
|
|
285
|
-
export function classifyToolingRoot({ key, dir, followed, current, git = runGitStatus }) {
|
|
286
|
-
if (followed === current) {return ToolingRootVerdict.Kept;}
|
|
287
|
-
for (const [role, commit] of [['current pin', current], ['followed commit', followed]]) {
|
|
288
|
-
if (git(['cat-file', '-e', `${commit}^{commit}`], dir).status !== 0) {throw new ToolingRootHistoryMissingError(key, commit, dir, role);}
|
|
289
|
-
}
|
|
290
|
-
// 0 = ancestor, 1 = not; anything else is git failing, never a verdict
|
|
291
|
-
const isAncestor = (older, newer) => {
|
|
292
|
-
const result = git(['merge-base', '--is-ancestor', older, newer], dir);
|
|
293
|
-
if (result.status === 0) {return true;}
|
|
294
|
-
if (result.status === 1) {return false;}
|
|
295
|
-
throw new Error(`follow: ${key}: git merge-base ${older} ${newer} failed in ${dir} (exit ${result.status}): ${result.stderr.trim()}`);
|
|
296
|
-
};
|
|
297
|
-
if (isAncestor(current, followed)) {return ToolingRootVerdict.Advanced;}
|
|
298
|
-
if (isAncestor(followed, current)) {throw new ToolingRootBehindError(key, followed, current);}
|
|
299
|
-
throw new ToolingRootDivergedError(key, followed, current);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/** A source's current pin is not in the develop history of its declared URL: the URL changed (or develop was rewritten). */
|
|
303
|
-
export class FollowSourceUrlChangedError extends Error {
|
|
304
|
-
constructor(key, url, current) {
|
|
305
|
-
super(`follow: ${key}: the current pin ${current} is not in the develop history of the declared URL ${url}: the source's repository URL changed since the current input (or its develop was rewritten); a follow never carries a pin across a URL change, so follow with --first`);
|
|
306
|
-
this.name = 'FollowSourceUrlChangedError';
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* The newer of a source's develop head and its current pin, through the one ancestry rule. A head equal to the pin
|
|
312
|
-
* answers without a fetch; the pin missing from the URL's develop history is a URL change, never a record refusal.
|
|
313
|
-
*/
|
|
314
|
-
export function followSourceAncestry({ key, url, head, published, newest }) {
|
|
315
|
-
if (head === published) {return published;}
|
|
316
|
-
try {
|
|
317
|
-
return newest({ member: { repo: key, repositoryUrl: url }, candidates: [{ commit: head, tag: 'develop head' }], published, context: 'follow' }).commit;
|
|
318
|
-
} catch (error) {
|
|
319
|
-
if (error instanceof RecordCommitNotOnDevelopError && error.commit === published && error.tags.includes(PUBLISHED_PIN_TAG)) {
|
|
320
|
-
throw new FollowSourceUrlChangedError(key, url, published);
|
|
321
|
-
}
|
|
322
|
-
throw error;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/** The tooling root pin keys with the checkout each is classified in. */
|
|
327
|
-
const toolingRoots = () => [
|
|
328
|
-
{ key: dataPinKey(), dir: () => dataRoot() },
|
|
329
|
-
{ key: kernelPinKey(), dir: () => kernelRepoDir() },
|
|
330
|
-
{ key: deployPinKey(), dir: () => deployRoot() },
|
|
331
|
-
];
|
|
332
|
-
|
|
333
|
-
/** The kernel checkout is at --kernel-sha (consistency with the caller's checkout). */
|
|
334
|
-
export function assertKernelCheckout({ kernelSha, git = runGitText }) {
|
|
335
|
-
const head = git(['rev-parse', 'HEAD'], kernelRepoDir());
|
|
336
|
-
if (head !== kernelSha) {throw new Error(`--kernel-sha is ${kernelSha}, but the kernel checkout ${kernelRepoDir()} is at ${head}`);}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/** Exactly one of `--first` and `--current-pins <file>`: the current pins, or undefined for a first follow. */
|
|
340
|
-
export function followStartOf(options) {
|
|
341
|
-
const first = options['--first'] === true;
|
|
342
|
-
const current = options['--current-pins'];
|
|
343
|
-
if (first === (current !== undefined)) {
|
|
344
|
-
throw new Error('follow takes exactly one of --first (no current input) or --current-pins <file> (the pins of the current input)');
|
|
345
|
-
}
|
|
346
|
-
return first ? undefined : readCurrentPins(current);
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
/** What moved between the current pins and the followed ones, sorted. */
|
|
350
|
-
function followSummary(currentPins, pins, tooling) {
|
|
351
|
-
if (currentPins === undefined) {return { follow: FollowStart.First, tooling: 'not classified: a first follow has no current pins', advanced: [], kept: [], added: Object.keys(pins), dropped: [] };}
|
|
352
|
-
const keys = (filter) => Object.keys(pins).filter(filter).sort(compareStrings);
|
|
353
|
-
return {
|
|
354
|
-
follow: FollowStart.FromCurrent,
|
|
355
|
-
tooling,
|
|
356
|
-
advanced: keys((key) => key in currentPins && currentPins[key] !== pins[key]),
|
|
357
|
-
kept: keys((key) => currentPins[key] === pins[key]),
|
|
358
|
-
added: keys((key) => !(key in currentPins)),
|
|
359
|
-
dropped: Object.keys(currentPins).filter((key) => !(key in pins)).sort(compareStrings),
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* The follow, over injected readers: `selectDeploy()` answers the deploy pin (selectPublishedEngineCommit), `select(publishedPins)` answers select-records' `{ pins }` for the graph members,
|
|
365
|
-
* `declaredSourcesAt(graphPins)` the sources the definition's chain declares at the graph pins (composeEdition, as
|
|
366
|
-
* freeze-sources reads them), `ancestry({ key, url, head, published })` the newer of a source's head and its current pin
|
|
367
|
-
* (or a refusal), `classifyRoot({ key, followed, current })` a tooling root against its current pin (or a refusal).
|
|
368
|
-
*
|
|
369
|
-
* @returns {Promise<{ pins: Record<string, string>, summary: object }>}
|
|
370
|
-
*/
|
|
371
|
-
export async function followDevelop({ dataSha, kernelSha, selectDeploy, currentPins, members, select, resolveHead, holdSource, declaredSourcesAt, ancestry, classifyRoot }) {
|
|
372
|
-
const graph = new Set(members.map((member) => member.repo));
|
|
373
|
-
const published = currentPins === undefined ? undefined : Object.fromEntries(Object.entries(currentPins).filter(([key]) => graph.has(key)));
|
|
374
|
-
const deploy = await selectDeploy();
|
|
375
|
-
const selection = await select(published);
|
|
376
|
-
// The members are freezeGraph's member pins (freeze-graph --member-pins): its tooling rules (checked-out roots, editions
|
|
377
|
-
// root) apply unchanged, and a member that keeps its current resolution is pinned at its develop head.
|
|
378
|
-
const graphPins = freezeGraph({ dataSha, kernelSha, deploySha: deploy.deploySha, memberPins: selection.pins, resolveHead, holdSource });
|
|
379
|
-
// From current pins, no tooling root goes backwards or sideways (a first follow has nothing to compare against).
|
|
380
|
-
const tooling = {};
|
|
381
|
-
if (currentPins !== undefined) {
|
|
382
|
-
for (const key of [dataPinKey(), kernelPinKey(), deployPinKey()].sort(compareStrings)) {
|
|
383
|
-
tooling[key] = currentPins[key] === undefined ? ToolingRootVerdict.Added : classifyRoot({ key, followed: graphPins[key], current: currentPins[key] });
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
const declaredSources = declaredSourcesAt(graphPins);
|
|
387
|
-
const headed = freezeSources({ pins: graphPins, declaredSources, resolveHead, holdSource });
|
|
388
|
-
const pins = { ...headed };
|
|
389
|
-
const urlOf = new Map(declaredSources.map((source) => [source.name, source.url]));
|
|
390
|
-
for (const [key, head] of Object.entries(headed)) {
|
|
391
|
-
if (snapshotPinNamespace(key) !== SnapshotPinNamespace.Source || currentPins?.[key] === undefined) {continue;}
|
|
392
|
-
pins[key] = ancestry({ key, url: urlOf.get(key.slice('sources/'.length)), head, published: currentPins[key] });
|
|
393
|
-
}
|
|
394
|
-
const sorted = sortedSnapshotPins(pins);
|
|
395
|
-
return { pins: sorted, summary: { ...followSummary(currentPins, sorted, tooling), deploy } };
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/** The files of --seals-out. */
|
|
399
|
-
export const FollowSealFile = Object.freeze({ Seals: 'seals.json', Offering: 'offering.images.lock.json', Customer: 'customer.images.lock.json' });
|
|
400
|
-
|
|
401
|
-
/**
|
|
402
|
-
* The customer's own previous seal, a follow input passed through: exactly one of `--previous-lock <file>
|
|
403
|
-
* --previous-lock-sha256 <hex>` (the bytes, held to the sha256; the id is held to the customer edition's by the resolve,
|
|
404
|
-
* which knows it) or `--first-seal` (null).
|
|
405
|
-
*/
|
|
406
|
-
export function customerPreviousLockInput(options) {
|
|
407
|
-
const pair = [options['--previous-lock'], options['--previous-lock-sha256']];
|
|
408
|
-
const first = options['--first-seal'] === true;
|
|
409
|
-
if (first === pair.some((value) => value !== undefined) || (!first && pair.includes(undefined))) {
|
|
410
|
-
throw new Error('follow takes the customer edition\'s own previous seal as exactly one of --previous-lock <file> with --previous-lock-sha256 <hex>, or --first-seal');
|
|
411
|
-
}
|
|
412
|
-
return first ? null : { bytes: readPreviousLockBytes(pair[0], pair[1]), sha256: pair[1] };
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/** seals.json: each frozen previous seal by file and sha256 (the customer's absent file is a first seal). */
|
|
416
|
-
export function followSealsDocument({ offeringId, offering, customer }) {
|
|
417
|
-
return {
|
|
418
|
-
offering: { distributionId: offeringId, edition: offering.edition, previousLock: FollowSealFile.Offering, previousLockSha256: offering.imagesLockSha256 },
|
|
419
|
-
customer: customer === null ? { firstSeal: true } : { previousLock: FollowSealFile.Customer, previousLockSha256: customer.sha256 },
|
|
420
|
-
};
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/** Writes --seals-out once: a new directory holding the frozen previous-seal bytes and seals.json. */
|
|
424
|
-
export function writeFollowSeals(dir, { offeringId, offering, customer }) {
|
|
425
|
-
mkdirSync(dir);
|
|
426
|
-
writeFileSync(join(dir, FollowSealFile.Offering), offering.bytes, { flag: 'wx' });
|
|
427
|
-
if (customer !== null) {writeFileSync(join(dir, FollowSealFile.Customer), customer.bytes, { flag: 'wx' });}
|
|
428
|
-
writeFileSync(join(dir, FollowSealFile.Seals), serializeJson(followSealsDocument({ offeringId, offering, customer })), { flag: 'wx' });
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/** The `follow` verb: writes `--out` and `--seals-out` once and prints the summary (it states a first follow). */
|
|
432
|
-
export async function runFollow({
|
|
433
|
-
options,
|
|
434
|
-
env = process.env,
|
|
435
|
-
members = developGraphMembers(),
|
|
436
|
-
runGit,
|
|
437
|
-
git,
|
|
438
|
-
rootGit,
|
|
439
|
-
deployCommits = deployCommitsAtOrBelow,
|
|
440
|
-
heads,
|
|
441
|
-
assertKernel = assertKernelCommitSupported,
|
|
442
|
-
findOfferingSeal = ({ repository, signerIdentity }) => previousSealFromRegistry({ repository, signerIdentity, cosignBinary: options['--cosign'], env }),
|
|
443
|
-
write = writeOnce,
|
|
444
|
-
print = (line) => console.log(line),
|
|
445
|
-
...verifierInjections
|
|
446
|
-
}) {
|
|
447
|
-
const currentPins = followStartOf(options);
|
|
448
|
-
const customerSeal = customerPreviousLockInput(options);
|
|
449
|
-
if (existsSync(options['--seals-out'])) {throw new Error(`--seals-out ${options['--seals-out']} already exists: follow writes it once`);}
|
|
450
|
-
const definition = parseFollowDefinition(options[FOLLOW_DEFINITION_FLAG]);
|
|
451
|
-
if (!ENGINE_REPOSITORY_PATTERN.test(options['--engine-repository'] ?? '')) {
|
|
452
|
-
throw new Error(`--engine-repository is <registry>/<path> of the deploy engine, with no tag or digest; got ${JSON.stringify(options['--engine-repository'])}`);
|
|
453
|
-
}
|
|
454
|
-
const id = assertDefinitionCheckout({ definition, dataSha: options['--data-sha'], ...(git === undefined ? {} : { git }) });
|
|
455
|
-
assertKernelCheckout({ kernelSha: options['--kernel-sha'], ...(git === undefined ? {} : { git }) });
|
|
456
|
-
assertKernel({ repoDir: kernelRepoDir(), commit: options['--kernel-sha'], label: `--kernel-sha ${options['--kernel-sha']}` });
|
|
457
|
-
const workspace = editionWorkspaceConfig();
|
|
458
|
-
const { parseDistribution } = await loadKernelDistributionSchemas();
|
|
459
|
-
const { pins, summary } = await withRecordVerifier({ cosignBinary: options['--cosign'], env, ...verifierInjections }, (verifier) =>
|
|
460
|
-
followDevelop({
|
|
461
|
-
dataSha: options['--data-sha'],
|
|
462
|
-
kernelSha: options['--kernel-sha'],
|
|
463
|
-
selectDeploy: () => {
|
|
464
|
-
const engineRepository = options['--engine-repository'];
|
|
465
|
-
return selectPublishedEngineCommit({
|
|
466
|
-
commits: deployCommits(options['--deploy-sha']),
|
|
467
|
-
upperBound: options['--deploy-sha'],
|
|
468
|
-
engineRepository,
|
|
469
|
-
client: verifier.clientFor(splitImageRef(engineRepository).authority),
|
|
470
|
-
});
|
|
471
|
-
},
|
|
472
|
-
currentPins,
|
|
473
|
-
members,
|
|
474
|
-
select: (publishedPins) =>
|
|
475
|
-
selectRecords({ branch: DEVELOP_RECORD_BRANCH, registry: options['--registry'], members, ...verifier, publishedPins, workspace, env, runGit }),
|
|
476
|
-
...(heads ?? headResolver(EditionChannel.Develop, env)),
|
|
477
|
-
declaredSourcesAt: (graphPins) => composeEdition(parseDistribution, id, snapshotPinSource(graphPins)).declaredSources,
|
|
478
|
-
ancestry: ({ key, url, head, published }) =>
|
|
479
|
-
followSourceAncestry({ key, url, head, published, newest: (request) => newestCommitOnDevelop({ ...request, workspace, env, ...(runGit === undefined ? {} : { runGit }) }) }),
|
|
480
|
-
classifyRoot: ({ key, followed, current }) =>
|
|
481
|
-
classifyToolingRoot({ key, dir: toolingRoots().find((root) => root.key === key).dir(), followed, current, ...(rootGit === undefined ? {} : { git: rootGit }) }),
|
|
482
|
-
}),
|
|
483
|
-
);
|
|
484
|
-
// The offering's newest signed develop edition, read once: the only "newest" a dev resolve depends on.
|
|
485
|
-
const offeringSeal = await findOfferingSeal({ repository: editionRepository(id, options['--registry'], EditionChannel.Develop), signerIdentity: options[PREVIOUS_SEAL_SIGNER_FLAG] });
|
|
486
|
-
write(options['--out'], pins);
|
|
487
|
-
writeFollowSeals(options['--seals-out'], { offeringId: id, offering: offeringSeal, customer: customerSeal });
|
|
488
|
-
const seals = followSealsDocument({ offeringId: id, offering: offeringSeal, customer: customerSeal });
|
|
489
|
-
print(JSON.stringify({ distributionId: id, definition, ...summary, seals }));
|
|
490
|
-
return { pins, summary, seals };
|
|
491
|
-
}
|