@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,289 +0,0 @@
|
|
|
1
|
-
// develop-freeze — freeze the develop branches into one snapshot of pins.
|
|
2
|
-
//
|
|
3
|
-
// Resolves `refs/heads/develop` ONCE per distinct repository URL, applies the
|
|
4
|
-
// caller's per-key overrides (an override wins and is never looked up), and
|
|
5
|
-
// returns the pins. After this, NOTHING reads a branch: every later step takes
|
|
6
|
-
// the pins. Two phases, because the declared sources are only known once the
|
|
7
|
-
// edition's chain can be read from the checked-out editions root:
|
|
8
|
-
//
|
|
9
|
-
// freezeGraph the graph repositories, the data root, the kernel, the deploy checkout, the editions root
|
|
10
|
-
// freezeSources one pin per `sources[]` entry the chain declares
|
|
11
|
-
//
|
|
12
|
-
// With `memberPins` (a select-records selection) the members are pinned at the selected build records instead; the one
|
|
13
|
-
// declared exception, a member that keeps its current resolution, is pinned at its develop head.
|
|
14
|
-
//
|
|
15
|
-
// `resolveHead({ name, url })` is the one network seam (default: `git ls-remote` through
|
|
16
|
-
// git-source-auth: the data root's token only for a repository under its
|
|
17
|
-
// `sourceRepositoryUrlPrefix`, no credential for any other, never argv).
|
|
18
|
-
|
|
19
|
-
import { execFileSync } from 'node:child_process';
|
|
20
|
-
|
|
21
|
-
import { canonicalPublicHttpsRepositoryUrl } from './canonical-repository-url.mjs';
|
|
22
|
-
import { currentResolutionOf } from './develop-current-resolution.mjs';
|
|
23
|
-
import { developGraphMembers } from './develop-graph.mjs';
|
|
24
|
-
import { EditionChannel } from './edition-channel.mjs';
|
|
25
|
-
import { assertCanonicalSourceUrl, assertSourceDeclaresNoCredential, isUnderSourcePrefix, withSourceGitEnv } from './git-source-auth.mjs';
|
|
26
|
-
import {
|
|
27
|
-
dataPinKey,
|
|
28
|
-
EDITIONS_ROOT_PIN_KEY,
|
|
29
|
-
kernelPinKey,
|
|
30
|
-
SnapshotPinNamespace,
|
|
31
|
-
deployPinKey,
|
|
32
|
-
snapshotPinNamespace,
|
|
33
|
-
sortedSnapshotPins,
|
|
34
|
-
sourceNameOfPinKey,
|
|
35
|
-
sourcePinKey,
|
|
36
|
-
} from './pin-source.mjs';
|
|
37
|
-
|
|
38
|
-
const SHA_PATTERN = /^[0-9a-f]{40}$/;
|
|
39
|
-
|
|
40
|
-
/** The ref namespaces a freeze may resolve a ref in. */
|
|
41
|
-
export const RefKind = Object.freeze({ Branch: 'branch', Tag: 'tag' });
|
|
42
|
-
|
|
43
|
-
const REF_PREFIX = Object.freeze({ [RefKind.Branch]: 'refs/heads/', [RefKind.Tag]: 'refs/tags/' });
|
|
44
|
-
const PEELED_SUFFIX = '^{}';
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* What each channel freezes a source at. A develop edition freezes the head of the `develop` BRANCH of every
|
|
48
|
-
* repository; a release edition freezes each source at the ref its definition declares, a branch or a tag.
|
|
49
|
-
*/
|
|
50
|
-
const FREEZE_REF_KINDS = Object.freeze({
|
|
51
|
-
[EditionChannel.Develop]: Object.freeze([RefKind.Branch]),
|
|
52
|
-
[EditionChannel.Release]: Object.freeze([RefKind.Branch, RefKind.Tag]),
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* The commit `ref` names in one source `{ name, url }`, by `git ls-remote <url> <refs/heads/ref | refs/tags/ref |
|
|
57
|
-
* refs/tags/ref^{}>` (only the namespaces the channel freezes at). A tag resolves to its peeled commit when it is annotated.
|
|
58
|
-
* Throws naming the repository when the ref is absent, or when it is both a branch and a tag. The source is held and its
|
|
59
|
-
* git environment built by `withSourceGitEnv`: the workspace credential reaches only a repository under `sourceRepositoryUrlPrefix`.
|
|
60
|
-
*/
|
|
61
|
-
export function lsRemoteRef(source, ref, { channel, workspace, env = process.env, runGit = execFileSync }) {
|
|
62
|
-
const kinds = FREEZE_REF_KINDS[channel];
|
|
63
|
-
if (kinds === undefined) {throw new Error(`unknown edition channel ${JSON.stringify(channel)}`);}
|
|
64
|
-
if (typeof ref !== 'string' || ref.length === 0) {
|
|
65
|
-
throw new Error(`source "${source.name}" declares no ref; a ${channel} edition cannot be frozen without one`);
|
|
66
|
-
}
|
|
67
|
-
const names = kinds.flatMap((kind) => (kind === RefKind.Tag ? [`${REF_PREFIX[kind]}${ref}`, `${REF_PREFIX[kind]}${ref}${PEELED_SUFFIX}`] : [`${REF_PREFIX[kind]}${ref}`]));
|
|
68
|
-
const output = withSourceGitEnv(source, { workspace, env }, (gitEnv) =>
|
|
69
|
-
runGit('git', ['ls-remote', source.url, ...names], {
|
|
70
|
-
env: gitEnv,
|
|
71
|
-
encoding: 'utf8',
|
|
72
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
73
|
-
}),
|
|
74
|
-
).trim();
|
|
75
|
-
const served = new Map();
|
|
76
|
-
for (const line of output.split('\n')) {
|
|
77
|
-
const [sha, name] = line.trim().split(/\s+/);
|
|
78
|
-
if (names.includes(name)) {
|
|
79
|
-
if (!SHA_PATTERN.test(sha ?? '')) {throw new Error(`${source.url}: git ls-remote answered ${JSON.stringify(line)} for ${name}`);}
|
|
80
|
-
served.set(name, sha);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
const branch = served.get(`${REF_PREFIX[RefKind.Branch]}${ref}`);
|
|
84
|
-
const tagName = `${REF_PREFIX[RefKind.Tag]}${ref}`;
|
|
85
|
-
const tag = served.get(`${tagName}${PEELED_SUFFIX}`) ?? served.get(tagName);
|
|
86
|
-
if (branch !== undefined && tag !== undefined) {
|
|
87
|
-
throw new Error(`${source.url}: ${JSON.stringify(ref)} is both a branch and a tag; a ${channel} edition cannot be frozen at an ambiguous ref`);
|
|
88
|
-
}
|
|
89
|
-
const commit = branch ?? tag;
|
|
90
|
-
if (commit === undefined) {
|
|
91
|
-
throw new Error(`${source.url} has no ${kinds.map((kind) => `${REF_PREFIX[kind]}${ref}`).join(' or ')}; a ${channel} edition cannot be frozen without it`);
|
|
92
|
-
}
|
|
93
|
-
return commit;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/** A resolver that asks `resolveHead` at most once per distinct URL and ref; it takes the source `{ name, url, ref? }`. */
|
|
97
|
-
function memoizedHeads(resolveHead) {
|
|
98
|
-
const heads = new Map();
|
|
99
|
-
return (source) => {
|
|
100
|
-
const key = JSON.stringify([source.url, source.ref]);
|
|
101
|
-
if (!heads.has(key)) {heads.set(key, resolveHead(source));}
|
|
102
|
-
return heads.get(key);
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* The pins input selects WHICH inputs a snapshot resolves, never which tooling
|
|
108
|
-
* code runs: the distributions plane that executes is the dispatching ref's own
|
|
109
|
-
* checkout, so an override for its pin key is refused outright (even one equal
|
|
110
|
-
* to that checkout), naming the key.
|
|
111
|
-
*/
|
|
112
|
-
export function assertNoToolingOverride(overrides) {
|
|
113
|
-
if (overrides[dataPinKey()] !== undefined) {
|
|
114
|
-
throw new Error(
|
|
115
|
-
`pins override "${dataPinKey()}" is refused: it would select the tooling code this run executes. ` +
|
|
116
|
-
'The distributions plane is always the dispatching ref\'s own checkout; pins choose inputs, never tooling.',
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function assertOverrides(overrides, allowed) {
|
|
122
|
-
for (const [key, sha] of Object.entries(overrides)) {
|
|
123
|
-
const namespace = snapshotPinNamespace(key);
|
|
124
|
-
if (!allowed.has(namespace)) {continue;} // another phase's pin
|
|
125
|
-
if (typeof sha !== 'string' || !SHA_PATTERN.test(sha)) {
|
|
126
|
-
throw new Error(`override for "${key}" is not a 40-hex commit SHA: ${JSON.stringify(sha)}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/** The member pins name exactly the graph minus the current-resolution members; a missing or extra member is refused by name. */
|
|
132
|
-
function assertMemberPinsAreTheGraph(memberPins, members) {
|
|
133
|
-
const current = new Set(Object.keys(currentResolutionOf(members)));
|
|
134
|
-
const expected = members.map(({ repo }) => repo).filter((repo) => !current.has(repo));
|
|
135
|
-
const missing = expected.filter((repo) => !Object.hasOwn(memberPins, repo));
|
|
136
|
-
const extra = Object.keys(memberPins).filter((repo) => !expected.includes(repo));
|
|
137
|
-
if (missing.length > 0 || extra.length > 0) {
|
|
138
|
-
throw new Error(`--member-pins must pin exactly the develop graph minus ${JSON.stringify([...current])}: missing ${JSON.stringify(missing)}, extra ${JSON.stringify(extra)}`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const GRAPH_PHASE = new Set([
|
|
143
|
-
SnapshotPinNamespace.Graph,
|
|
144
|
-
SnapshotPinNamespace.Distributions,
|
|
145
|
-
SnapshotPinNamespace.Kernel,
|
|
146
|
-
SnapshotPinNamespace.ChartSource,
|
|
147
|
-
SnapshotPinNamespace.EditionsRoot,
|
|
148
|
-
]);
|
|
149
|
-
const SOURCE_PHASE = new Set([SnapshotPinNamespace.Source]);
|
|
150
|
-
|
|
151
|
-
/** A repository the workflow checked out is pinned at what it checked out; an override may only agree. */
|
|
152
|
-
function assertCheckedOutPin({ key, sha, flag, what, overrides }) {
|
|
153
|
-
if (!SHA_PATTERN.test(sha ?? '')) {
|
|
154
|
-
throw new Error(`${flag} is not a 40-hex commit SHA: ${JSON.stringify(sha)}`);
|
|
155
|
-
}
|
|
156
|
-
if (overrides[key] !== undefined && overrides[key] !== sha) {
|
|
157
|
-
throw new Error(`override for "${key}" is ${overrides[key]}, but ${what} is checked out at ${sha}`);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* @param {object} request
|
|
163
|
-
* @param {string} request.dataSha the commit the data root checkout is at
|
|
164
|
-
* @param {string} request.kernelSha the commit the kernel checkout is at
|
|
165
|
-
* @param {string} request.deploySha the commit the deploy checkout is at
|
|
166
|
-
* @param {string} [request.editionsRootUrl] https URL of the editions root; absent = this repository
|
|
167
|
-
* @param {Record<string, string>} [request.memberPins] the graph members' pins from a selection (`--member-pins`): exactly the
|
|
168
|
-
* graph minus the members that keep their current resolution (develop-current-resolution.mjs), which are pinned at their
|
|
169
|
-
* develop head; refused together with overrides
|
|
170
|
-
* @param {(source: {name: string, url: string}) => void} request.holdSource the hold of one source; runs for ALL graph sources before the first head
|
|
171
|
-
*/
|
|
172
|
-
export function freezeGraph({
|
|
173
|
-
dataSha,
|
|
174
|
-
kernelSha,
|
|
175
|
-
deploySha,
|
|
176
|
-
editionsRootUrl,
|
|
177
|
-
overrides = {},
|
|
178
|
-
memberPins,
|
|
179
|
-
resolveHead,
|
|
180
|
-
holdSource,
|
|
181
|
-
}) {
|
|
182
|
-
if (memberPins !== undefined && Object.keys(overrides).length > 0) {
|
|
183
|
-
throw new Error('--member-pins and --overrides are exclusive: the member pins are the selected build records, never overridden');
|
|
184
|
-
}
|
|
185
|
-
assertNoToolingOverride(overrides);
|
|
186
|
-
assertOverrides(overrides, GRAPH_PHASE);
|
|
187
|
-
const head = memoizedHeads(resolveHead);
|
|
188
|
-
// The develop graph is the data root's first-party repositories (develop-graph.mjs), never the release pins.
|
|
189
|
-
const members = developGraphMembers();
|
|
190
|
-
const graph = new Set(members.map((member) => member.repo));
|
|
191
|
-
for (const [key] of Object.entries(overrides)) {
|
|
192
|
-
if (snapshotPinNamespace(key) === SnapshotPinNamespace.Graph && !graph.has(key)) {
|
|
193
|
-
throw new Error(`override names "${key}", which is not a repository in the graph`);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
if (memberPins !== undefined) {assertMemberPinsAreTheGraph(memberPins, members);}
|
|
197
|
-
const checkedOut = [
|
|
198
|
-
{ key: dataPinKey(), sha: dataSha, flag: '--data-sha', what: 'the data root checkout' },
|
|
199
|
-
{ key: kernelPinKey(), sha: kernelSha, flag: '--kernel-sha', what: 'the kernel checkout' },
|
|
200
|
-
{ key: deployPinKey(), sha: deploySha, flag: '--deploy-sha', what: 'the deploy checkout' },
|
|
201
|
-
];
|
|
202
|
-
for (const { key, sha, flag, what } of checkedOut) {assertCheckedOutPin({ key, sha, flag, what, overrides });}
|
|
203
|
-
const toResolve = members.map((member) => ({ name: member.repo, url: member.repositoryUrl }));
|
|
204
|
-
if (editionsRootUrl !== undefined) {
|
|
205
|
-
toResolve.push({ name: EDITIONS_ROOT_PIN_KEY, url: canonicalPublicHttpsRepositoryUrl(editionsRootUrl, '--editions-root-url') });
|
|
206
|
-
}
|
|
207
|
-
// Every source is held before the first head is asked: a refusal of the last leaves no git call behind.
|
|
208
|
-
for (const source of toResolve) {holdSource(source);}
|
|
209
|
-
if (editionsRootUrl === undefined && overrides[EDITIONS_ROOT_PIN_KEY] !== undefined) {
|
|
210
|
-
throw new Error(`override names "${EDITIONS_ROOT_PIN_KEY}", but the editions root is this repository`);
|
|
211
|
-
}
|
|
212
|
-
const pins = Object.fromEntries(checkedOut.map(({ key, sha }) => [key, sha]));
|
|
213
|
-
for (const member of members) {
|
|
214
|
-
pins[member.repo] = overrides[member.repo] ?? memberPins?.[member.repo] ?? head({ name: member.repo, url: member.repositoryUrl });
|
|
215
|
-
}
|
|
216
|
-
if (editionsRootUrl !== undefined) {
|
|
217
|
-
const url = canonicalPublicHttpsRepositoryUrl(editionsRootUrl, '--editions-root-url');
|
|
218
|
-
pins[EDITIONS_ROOT_PIN_KEY] = overrides[EDITIONS_ROOT_PIN_KEY] ?? head({ name: EDITIONS_ROOT_PIN_KEY, url });
|
|
219
|
-
}
|
|
220
|
-
return sortedSnapshotPins(pins);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* @param {object} request
|
|
225
|
-
* @param {Record<string,string>} request.pins the graph phase's pins
|
|
226
|
-
* @param {object[]} request.declaredSources every `sources[]` entry in the chain (`{ name, url, ... }`)
|
|
227
|
-
* @param {(source: {name: string, url: string}) => void} request.holdSource the hold of one source (`holdSource` of git-source-auth with the workspace and env); runs for ALL sources before the first head
|
|
228
|
-
*/
|
|
229
|
-
export function freezeSources({ pins, declaredSources, overrides = {}, resolveHead, holdSource }) {
|
|
230
|
-
assertOverrides(overrides, SOURCE_PHASE);
|
|
231
|
-
const head = memoizedHeads(resolveHead);
|
|
232
|
-
const sourceByName = new Map();
|
|
233
|
-
for (const source of declaredSources) {
|
|
234
|
-
const known = sourceByName.get(source.name);
|
|
235
|
-
if (known !== undefined && known.url !== source.url) {
|
|
236
|
-
throw new Error(`source "${source.name}" is declared at two URLs (${known.url}, ${source.url})`);
|
|
237
|
-
}
|
|
238
|
-
sourceByName.set(source.name, source);
|
|
239
|
-
}
|
|
240
|
-
for (const key of Object.keys(overrides)) {
|
|
241
|
-
if (snapshotPinNamespace(key) === SnapshotPinNamespace.Source && !sourceByName.has(sourceNameOfPinKey(key))) {
|
|
242
|
-
throw new Error(`override names "${key}", but the chain declares no such source`);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
// Every source is held before the first head is asked: a refusal of the last leaves no git call behind.
|
|
246
|
-
for (const source of sourceByName.values()) {holdSource(source);}
|
|
247
|
-
const frozen = { ...pins };
|
|
248
|
-
for (const [name, source] of sourceByName) {
|
|
249
|
-
frozen[sourcePinKey(name)] = overrides[sourcePinKey(name)] ?? head(source);
|
|
250
|
-
}
|
|
251
|
-
return sortedSnapshotPins(frozen);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* The declared source URLs a customer freeze may ask, held BEFORE any network call: the token of the
|
|
256
|
-
* run (EVIDENCE_REPOSITORIES_TOKEN) is sent to the origin of each URL, so a URL is refused unless it is
|
|
257
|
-
* a canonical public HTTPS repository URL written in its canonical form and lies under the workspace's
|
|
258
|
-
* `sourceRepositoryUrlPrefix`. A definition that merely names another origin never receives the token.
|
|
259
|
-
*/
|
|
260
|
-
export function assertCustomerSourceUrls(sources, sourceRepositoryUrlPrefix) {
|
|
261
|
-
if (typeof sourceRepositoryUrlPrefix !== 'string' || sourceRepositoryUrlPrefix.length === 0) {
|
|
262
|
-
throw new Error('a customer freeze takes the workspace\'s sourceRepositoryUrlPrefix');
|
|
263
|
-
}
|
|
264
|
-
for (const source of sources) {
|
|
265
|
-
assertSourceDeclaresNoCredential(source);
|
|
266
|
-
const canonical = assertCanonicalSourceUrl(source);
|
|
267
|
-
const context = `source "${source.name}" url`;
|
|
268
|
-
if (!isUnderSourcePrefix(canonical, sourceRepositoryUrlPrefix)) {
|
|
269
|
-
throw new Error(
|
|
270
|
-
`${context} ${JSON.stringify(source.url)} is not under the workspace's sourceRepositoryUrlPrefix ${sourceRepositoryUrlPrefix}: ` +
|
|
271
|
-
'the source token is sent only to repositories under that prefix',
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* The pins of a CUSTOMER edition: exactly one `sources/<name>` commit per source its definition declares,
|
|
279
|
-
* each the head of refs/heads/develop of that source's repository, resolved once. Every URL is held by
|
|
280
|
-
* `assertCustomerSourceUrls` before the first head is asked.
|
|
281
|
-
*/
|
|
282
|
-
export function freezeCustomerSources({ definition, resolveHead, holdSource, sourceRepositoryUrlPrefix }) {
|
|
283
|
-
const sources = definition?.sources ?? [];
|
|
284
|
-
if (!Array.isArray(sources) || sources.some((source) => typeof source?.name !== 'string' || typeof source?.url !== 'string')) {
|
|
285
|
-
throw new Error('the definition\'s sources must be an array of {name, url}');
|
|
286
|
-
}
|
|
287
|
-
assertCustomerSourceUrls(sources, sourceRepositoryUrlPrefix);
|
|
288
|
-
return freezeSources({ pins: {}, declaredSources: sources, resolveHead, holdSource });
|
|
289
|
-
}
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
// develop-git-bundles — the OCI bundle of a git-sourced biome, in a DEVELOP edition only (XEMA-2456): a vendor develop
|
|
2
|
-
// resolve, or a customer develop resolve (`--definition`) whose data root declares a pinned evidence trust policy
|
|
3
|
-
// (`customerDevelopGitBundleVerifier`). Each is verified under the trust policy of ITS OWN data root.
|
|
4
|
-
//
|
|
5
|
-
// A release edition never carries an OCI bundle on a git-sourced row: the manifest's `bundleSource` names an artifact
|
|
6
|
-
// the release lane builds, not one built from the pinned commit (resolve-distribution.mjs strips it, the release refuses
|
|
7
|
-
// it). A resolve without a verifier (a customer edition whose data root declares no policy, or any customer release)
|
|
8
|
-
// refuses it on a required row (`assertNoUnverifiedRequiredGitBundles`). A develop edition freezes a git source at its develop head F, and the source's own develop lane
|
|
9
|
-
// publishes the bundle the manifest names, signed keyless by its develop workflow. This module proves that bundle is
|
|
10
|
-
// the one F describes, and only then does the resolve keep it on the row, by DIGEST, with its develop bundle signer:
|
|
11
|
-
//
|
|
12
|
-
// 1. the bundle: the manifest's own `bundleSource.ociRef` at F (`<repository>:<version>`; the kernel holds the tag to
|
|
13
|
-
// the manifest version) resolved to its digest at the registry. The lock records `<repository>@sha256:<hex>`, never
|
|
14
|
-
// the tag, so the edition names immutable bytes;
|
|
15
|
-
// 2. the signer: the ONE `develop` row of the source's repository in the data root's trust policy
|
|
16
|
-
// (`bundleSignerRowFor`). cosign verifies the digest's signature under that row's identity, issuer, workflow
|
|
17
|
-
// repository and ref, and states the ONE commit P its certificate was issued at (`verifiedBundleSignerCommit`);
|
|
18
|
-
// `verifyBundleOnRegistry` then holds the signature AND the SLSA provenance to exactly the row and P. P is never
|
|
19
|
-
// read from bytes cosign has not verified;
|
|
20
|
-
// 3. the content binding of P to F. A version that is already published is never re-attested by the publisher
|
|
21
|
-
// (`xema biome publish` "already current"), so P is the commit that last published the version, and F may be a
|
|
22
|
-
// later commit of the same version. Two checks, refused on either, each naming P, F and the mismatching pair:
|
|
23
|
-
// (a) the kernel's `computeBiomeSourceManifestHash` of the bundle's own `xema-biome.json` equals the
|
|
24
|
-
// `sourceManifestHash` of the biome at F (the hash the seal and verify hold to the git source at F);
|
|
25
|
-
// (b) the git tree id of the biome directory at P equals its tree id at F (the catalogue's `sourceTreeIds`
|
|
26
|
-
// notion), so the bundle was built from the same biome source F holds.
|
|
27
|
-
// THE GAP, develop only: build inputs outside the biome directory (shared packages, the lockfile, the publisher's
|
|
28
|
-
// toolchain) are not bound. A change there between P and F reaches no check here. A release never relies on this:
|
|
29
|
-
// it carries a third-party bundle only through an `oci` source with a third-party pin, whose evidence is bound to
|
|
30
|
-
// the pinned commit itself.
|
|
31
|
-
//
|
|
32
|
-
// Every failure is a `DevelopGitBundleError` naming the biome; all subjects are verified before one is refused.
|
|
33
|
-
|
|
34
|
-
import { canonicalPublicHttpsRepositoryUrl, repositoryOwnerName } from './canonical-repository-url.mjs';
|
|
35
|
-
import { RefusalError } from './collected-refusals.mjs';
|
|
36
|
-
import { EditionChannel } from './edition-channel.mjs';
|
|
37
|
-
import { editionWorkspaceConfig } from './edition-config.mjs';
|
|
38
|
-
import { dataRoot as configuredDataRoot, editionsRoot } from './edition-workspace.mjs';
|
|
39
|
-
import { loadPinnedDeclaredTrustPolicy } from './evidence-trust-pin.mjs';
|
|
40
|
-
import { sourceTreeIdAt } from './external-source-walk.mjs';
|
|
41
|
-
import { prepareTrustedCosignBinary } from './image-evidence.mjs';
|
|
42
|
-
import { BundleSignerRefusedError, DevelopGitBundleError } from './locked-bundle-signer.mjs';
|
|
43
|
-
import { createRegistryClientResolver } from './oci-image-source-evidence.mjs';
|
|
44
|
-
import { bundleDigestRef, fetchBundleManifest, verifiedBundleSignerCommit, verifyBundleOnRegistry } from './third-party-bundle-registry.mjs';
|
|
45
|
-
import { bundleSignerRowFor } from './third-party-source-evidence.mjs';
|
|
46
|
-
import { OCI_BUNDLE_SOURCE_KIND } from './third-party-subjects.mjs';
|
|
47
|
-
|
|
48
|
-
/** The key a verified bundle is looked up by: the source name and the biome id of its index entry. */
|
|
49
|
-
export const developGitBundleKey = (sourceName, biomeId) => `${sourceName}\u0000${biomeId}`;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* The rows a develop resolve must verify a bundle for: each git-sourced biome of `lock` (a row with a `source`) whose
|
|
53
|
-
* index entry declares a biome-level OCI `bundleSource`.
|
|
54
|
-
*
|
|
55
|
-
* @returns {{biomeId: string, source: {name: string, url: string, commit: string}, entry: object}[]}
|
|
56
|
-
*/
|
|
57
|
-
export function developGitBundleSubjects({ lock, index }) {
|
|
58
|
-
const entries = new Map(index.filter((entry) => entry.source !== undefined).map((entry) => [developGitBundleKey(entry.source, entry.id), entry]));
|
|
59
|
-
return lock.biomes.flatMap((biome) => {
|
|
60
|
-
if (biome.source === undefined) {return [];}
|
|
61
|
-
const entry = entries.get(developGitBundleKey(biome.source.name, biome.id));
|
|
62
|
-
return entry?.bundleSource?.kind === OCI_BUNDLE_SOURCE_KIND ? [{ biomeId: biome.id, source: biome.source, entry }] : [];
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const subjectLabel = ({ biomeId, source }) => `biome "${biomeId}" (git source "${source.name}" at ${source.commit})`;
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* A resolve with no develop bundle verifier (a customer edition, either channel) drops a git-sourced row's OCI
|
|
70
|
-
* `bundleSource` (resolve-distribution.mjs, at the copy point). For a row the edition installs as `required`, that
|
|
71
|
-
* drop is never silent: biome-host would get a required biome with no bundle to fetch. Every such row is refused at
|
|
72
|
-
* once, naming the declared bundle and what is missing (XEMA-2456).
|
|
73
|
-
*
|
|
74
|
-
* @param {object} options
|
|
75
|
-
* @param {object} options.lock the resolved lock (its rows carry `installPolicy`)
|
|
76
|
-
* @param {object[]} options.index the index it was resolved from (it still holds the manifest's bundleSource)
|
|
77
|
-
* @param {string} options.required the kernel's `BiomeInstallPolicy.Required`
|
|
78
|
-
*/
|
|
79
|
-
export function assertNoUnverifiedRequiredGitBundles({ lock, index, required }) {
|
|
80
|
-
const requiredRows = new Set(lock.biomes.filter((biome) => biome.installPolicy === required).map((biome) => biome.id));
|
|
81
|
-
const refused = developGitBundleSubjects({ lock, index })
|
|
82
|
-
.filter((subject) => requiredRows.has(subject.biomeId))
|
|
83
|
-
.map(
|
|
84
|
-
(subject) =>
|
|
85
|
-
new DevelopGitBundleError(
|
|
86
|
-
`${subjectLabel(subject)} is installPolicy required and its manifest declares an OCI bundleSource (${subject.entry.bundleSource.ociRef}), ` +
|
|
87
|
-
'but this resolve verifies no git-sourced bundle, so its lock row would carry no bundleSource and no bundleSigner and biome-host could not install it. ' +
|
|
88
|
-
'A develop resolve verifies it when its data root declares a pinned evidenceTrustPolicy (edition-workspace.json) holding the ONE develop ' +
|
|
89
|
-
`bundle-signer row of the source's repository, and it is given --cosign; a release carries such a biome only as an \`oci\` source with a third-party source pin`,
|
|
90
|
-
),
|
|
91
|
-
);
|
|
92
|
-
if (refused.length === 1) {throw refused[0];}
|
|
93
|
-
if (refused.length > 1) {throw new BundleSignerRefusedError(refused);}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/** The biome directory relative to its source repository: the index path is `<source name>/<directory>`. */
|
|
97
|
-
function repositoryPathOf({ source, entry }) {
|
|
98
|
-
const prefix = `${source.name}/`;
|
|
99
|
-
if (!entry.path.startsWith(prefix)) {
|
|
100
|
-
throw new Error(`${subjectLabel({ biomeId: entry.id, source })}: index path ${JSON.stringify(entry.path)} is not under the source "${source.name}"`);
|
|
101
|
-
}
|
|
102
|
-
return entry.path.slice(prefix.length);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/** Verify every subject, then refuse them all at once: one refusal is rethrown unchanged, several are one error. */
|
|
106
|
-
async function verifyEach(subjects, verifyOne) {
|
|
107
|
-
const verified = new Map();
|
|
108
|
-
const refused = [];
|
|
109
|
-
for (const subject of subjects) {
|
|
110
|
-
try {
|
|
111
|
-
verified.set(developGitBundleKey(subject.source.name, subject.biomeId), await verifyOne(subject));
|
|
112
|
-
} catch (error) {
|
|
113
|
-
// A refusal, or a plain Error of the registry, cosign or git: this subject is refused. A defect (TypeError, ...) is not.
|
|
114
|
-
const refusal = error instanceof RefusalError || error?.constructor === Error;
|
|
115
|
-
if (!refusal) {throw error;}
|
|
116
|
-
refused.push(error instanceof DevelopGitBundleError ? error : new DevelopGitBundleError(`${subjectLabel(subject)}: ${error.message}`));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (refused.length === 1) {throw refused[0];}
|
|
120
|
-
if (refused.length > 1) {throw new BundleSignerRefusedError(refused);}
|
|
121
|
-
return verified;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* One subject, verified (steps 1 to 3 of this file's header). `context` is `{policy, policyRoot, schemas, trustedCosign}`.
|
|
126
|
-
*
|
|
127
|
-
* @returns {Promise<{bundleSource: object}>} the bundle source the lock row carries: the declared one, by digest
|
|
128
|
-
*/
|
|
129
|
-
export async function verifyDevelopGitBundle({
|
|
130
|
-
subject,
|
|
131
|
-
checkout,
|
|
132
|
-
context,
|
|
133
|
-
clientFor,
|
|
134
|
-
signerCommit = verifiedBundleSignerCommit,
|
|
135
|
-
verifyOnRegistry = verifyBundleOnRegistry,
|
|
136
|
-
treeIdAt = sourceTreeIdAt,
|
|
137
|
-
env = process.env,
|
|
138
|
-
}) {
|
|
139
|
-
const { biomeId, source, entry } = subject;
|
|
140
|
-
const label = subjectLabel(subject);
|
|
141
|
-
if (checkout === undefined) {
|
|
142
|
-
throw new Error(`${label}: the source walk holds no checkout of "${source.name}"`);
|
|
143
|
-
}
|
|
144
|
-
const repository = repositoryOwnerName(canonicalPublicHttpsRepositoryUrl(source.url, `${label} source url`), `${label} source url`);
|
|
145
|
-
const row = bundleSignerRowFor({ policy: context.policy, repository, channel: EditionChannel.Develop, schemas: context.schemas, label: `${label} develop bundle signer` });
|
|
146
|
-
|
|
147
|
-
// 1 + 2: the digest the manifest's tag serves; the commit P cosign verified the develop signature at; signature and
|
|
148
|
-
// provenance held to the row at P.
|
|
149
|
-
const ociRef = await bundleDigestRef({ clientFor, ociRef: entry.bundleSource.ociRef });
|
|
150
|
-
const cosign = { trustedCosign: context.trustedCosign, policy: context.policy, policyRoot: context.policyRoot, row, ociRef, env };
|
|
151
|
-
const attestedCommit = signerCommit(cosign);
|
|
152
|
-
verifyOnRegistry({ ...cosign, workflowSha: attestedCommit });
|
|
153
|
-
|
|
154
|
-
// 3: the content binding of P to F (see the header for the gap it leaves: build inputs outside the biome directory).
|
|
155
|
-
const binding = `the bundle ${ociRef} attested at ${attestedCommit} (P) against the source at ${source.commit} (F)`;
|
|
156
|
-
const { manifest } = await fetchBundleManifest({ clientFor, ociRef });
|
|
157
|
-
if (manifest?.xema?.id !== biomeId) {
|
|
158
|
-
throw new Error(`${label}: ${ociRef} declares xema.id ${JSON.stringify(manifest?.xema?.id)}, not "${biomeId}"`);
|
|
159
|
-
}
|
|
160
|
-
const bundleManifestHash = await context.schemas.computeBiomeSourceManifestHash(manifest);
|
|
161
|
-
if (bundleManifestHash !== entry.sourceManifestHash) {
|
|
162
|
-
throw new DevelopGitBundleError(
|
|
163
|
-
`${label}: ${binding}: the bundle's xema-biome.json hashes to sourceManifestHash ${bundleManifestHash}, but the manifest at F hashes to ${entry.sourceManifestHash}`,
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
const path = repositoryPathOf(subject);
|
|
167
|
-
const treeAtAttested = treeIdAt({ checkout, commit: attestedCommit, path, env });
|
|
168
|
-
const treeAtFrozen = treeIdAt({ checkout, commit: source.commit, path, env });
|
|
169
|
-
if (treeAtAttested !== treeAtFrozen) {
|
|
170
|
-
throw new DevelopGitBundleError(
|
|
171
|
-
`${label}: ${binding}: the biome directory ${path} is tree ${treeAtAttested} at P but tree ${treeAtFrozen} at F; publish a new version of the biome from F`,
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
return { bundleSource: { ...entry.bundleSource, ociRef } };
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* The verifier a vendor develop resolve hands `prepareDistributionWithIndex` (`inputs.developGitBundles`). Nothing is
|
|
179
|
-
* read (no trust policy, no cosign) unless a subject exists.
|
|
180
|
-
*
|
|
181
|
-
* @param {object} options
|
|
182
|
-
* @param {string|undefined} options.cosignBinary the cosign the trust policy pins by digest (`--cosign`)
|
|
183
|
-
* @param {string} options.dataRoot the root whose pinned trust policy holds the develop bundle-signer rows
|
|
184
|
-
* @param {string} [options.registryRoot] the root whose image-registry-credentials.json the registry is read with (default: dataRoot)
|
|
185
|
-
*/
|
|
186
|
-
export function createDevelopGitBundleVerifier({ cosignBinary, dataRoot, registryRoot = dataRoot, env = process.env, clientFor, treeIdAt }) {
|
|
187
|
-
return Object.freeze({
|
|
188
|
-
async verify({ subjects, checkouts, schemas }) {
|
|
189
|
-
if (subjects.length === 0) {return new Map();}
|
|
190
|
-
if (cosignBinary === undefined) {
|
|
191
|
-
throw new DevelopGitBundleError(
|
|
192
|
-
`${subjects.map(subjectLabel).join(', ')} declare an OCI bundle; verifying it needs a cosign binary (--cosign), and none was given`,
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
const policy = loadPinnedDeclaredTrustPolicy({ dataRoot, declaration: editionWorkspaceConfig().evidenceTrustPolicy, schemas });
|
|
196
|
-
const trustedCosign = prepareTrustedCosignBinary({ cosignBinary, policy });
|
|
197
|
-
const context = { policy, policyRoot: dataRoot, schemas, trustedCosign };
|
|
198
|
-
const registry = clientFor ?? createRegistryClientResolver({ dataRoot: registryRoot });
|
|
199
|
-
try {
|
|
200
|
-
return await verifyEach(subjects, (subject) =>
|
|
201
|
-
verifyDevelopGitBundle({ subject, checkout: checkouts.get(subject.source.name), context, clientFor: registry, env, ...(treeIdAt === undefined ? {} : { treeIdAt }) }),
|
|
202
|
-
);
|
|
203
|
-
} finally {
|
|
204
|
-
trustedCosign.dispose();
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* The verifier a CUSTOMER resolve (`--definition`) hands `resolveCustomerDistribution`, or undefined. Only a develop
|
|
212
|
-
* resolve whose configured data root DECLARES an evidence trust policy gets one: the bundles are verified under that
|
|
213
|
-
* customer policy, held to its pin (`loadPinnedDeclaredTrustPolicy`, read only when a subject exists), never the
|
|
214
|
-
* vendor's. The registry is read with the editions root's credentials, as the customer's own images are. Without a
|
|
215
|
-
* declared policy (or on release) there is none, and a required git-sourced row declaring an OCI bundle is refused
|
|
216
|
-
* (`assertNoUnverifiedRequiredGitBundles`).
|
|
217
|
-
*/
|
|
218
|
-
export function customerDevelopGitBundleVerifier({ channel, cosignBinary, env = process.env, clientFor, treeIdAt }) {
|
|
219
|
-
if (channel !== EditionChannel.Develop) {return undefined;}
|
|
220
|
-
if (editionWorkspaceConfig().evidenceTrustPolicy.policy === null) {return undefined;}
|
|
221
|
-
return createDevelopGitBundleVerifier({
|
|
222
|
-
cosignBinary,
|
|
223
|
-
dataRoot: configuredDataRoot(),
|
|
224
|
-
registryRoot: editionsRoot(),
|
|
225
|
-
env,
|
|
226
|
-
...(clientFor === undefined ? {} : { clientFor }),
|
|
227
|
-
...(treeIdAt === undefined ? {} : { treeIdAt }),
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* The OFFLINE verifier of a candidate re-seal: the bundle the pinned develop edition already verified for the SAME
|
|
233
|
-
* source commit, carried forward unchanged, with the signer it was verified under (`pinnedBundleSigner`): the resolve
|
|
234
|
-
* refuses the row when the current trust policy selects any other signer (a rotated develop row). A subject at another commit, or one the pinned edition carried no bundle
|
|
235
|
-
* for, is refused: verifying a new bundle reads the registry, which an offline re-seal does not.
|
|
236
|
-
*
|
|
237
|
-
* @param {object} pinnedLock the pinned edition's parsed distribution lock
|
|
238
|
-
*/
|
|
239
|
-
export function carriedDevelopGitBundles(pinnedLock) {
|
|
240
|
-
return Object.freeze({
|
|
241
|
-
async verify({ subjects }) {
|
|
242
|
-
return verifyEach(subjects, async (subject) => {
|
|
243
|
-
const row = pinnedLock.biomes.find(
|
|
244
|
-
(biome) => biome.id === subject.biomeId && biome.source?.name === subject.source.name && biome.source.commit === subject.source.commit,
|
|
245
|
-
);
|
|
246
|
-
if (row?.bundleSource?.kind !== OCI_BUNDLE_SOURCE_KIND || row.bundleSigner === undefined) {
|
|
247
|
-
throw new DevelopGitBundleError(
|
|
248
|
-
`${subjectLabel(subject)}: the pinned edition carries no verified bundle at this commit, and an offline re-seal cannot verify one; resolve the develop edition instead`,
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
|
-
return { bundleSource: row.bundleSource, pinnedBundleSigner: row.bundleSigner };
|
|
252
|
-
});
|
|
253
|
-
},
|
|
254
|
-
});
|
|
255
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// develop-graph — which repositories a DEVELOP candidate is built from.
|
|
2
|
-
//
|
|
3
|
-
// The develop graph is every first-party repository the data root declares
|
|
4
|
-
// (`firstPartySources` in edition-workspace.json), each at its declared
|
|
5
|
-
// `repositoryUrl`. It is never read from the release pins
|
|
6
|
-
// (`runtime-image-source-index.json#repositoryPins`): develop and release are
|
|
7
|
-
// separate lifecycles, and a repository is first-party on develop before any
|
|
8
|
-
// release pins it. freeze-graph, the snapshot checkout, the snapshot pins'
|
|
9
|
-
// validation and the snapshot's index all take their members from here.
|
|
10
|
-
|
|
11
|
-
import { firstPartySources } from './first-party-source-ids.mjs';
|
|
12
|
-
import { compareStrings } from './lib.mjs';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* The develop graph: `{ repo, repositoryUrl }` per declared first-party
|
|
16
|
-
* repository, sorted by repo handle, plus `currentResolution` (its ticket) on a
|
|
17
|
-
* member the data root declares one for (develop-current-resolution.mjs).
|
|
18
|
-
*
|
|
19
|
-
* @returns {readonly { repo: string, repositoryUrl: string, currentResolution?: string }[]}
|
|
20
|
-
*/
|
|
21
|
-
export function developGraphMembers() {
|
|
22
|
-
return Object.freeze(
|
|
23
|
-
Object.entries(firstPartySources('the develop graph'))
|
|
24
|
-
.map(([repo, { repositoryUrl, currentResolution }]) =>
|
|
25
|
-
Object.freeze({ repo, repositoryUrl, ...(currentResolution === undefined ? {} : { currentResolution }) }))
|
|
26
|
-
.sort((a, b) => compareStrings(a.repo, b.repo)),
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// develop-image-coordinate — the ONE mapping from a release image repository to
|
|
2
|
-
// the develop repository its producer pushes the same build to.
|
|
3
|
-
//
|
|
4
|
-
// <host>/<owner>/<name...> -> <host>/<owner>/dev/<name...>
|
|
5
|
-
//
|
|
6
|
-
// A producer's develop lane pushes `<devRepository>:<contentHash>` (contract C1)
|
|
7
|
-
// and nothing else reads or writes that namespace, so a release coordinate can
|
|
8
|
-
// never be satisfied by a develop build or the other way round.
|
|
9
|
-
|
|
10
|
-
import { DEVELOP_IMAGE_NAMESPACE_SEGMENT } from './edition-constants.mjs';
|
|
11
|
-
import { splitImageRef } from './registry-credentials.mjs';
|
|
12
|
-
|
|
13
|
-
const DEVELOP_NAMESPACE_SEGMENT = DEVELOP_IMAGE_NAMESPACE_SEGMENT;
|
|
14
|
-
|
|
15
|
-
const OWNER_SEGMENT_INDEX = 0;
|
|
16
|
-
const NAMESPACE_SEGMENT_INDEX = 1;
|
|
17
|
-
const MINIMUM_REPOSITORY_SEGMENTS = 2;
|
|
18
|
-
|
|
19
|
-
/** `developImageRef('registry.example.com/acme/identity-api') === 'registry.example.com/acme/dev/identity-api'`. */
|
|
20
|
-
export function developImageRef(releaseImageRef) {
|
|
21
|
-
const { authority, repository } = splitImageRef(releaseImageRef);
|
|
22
|
-
if (repository.includes('@') || repository.includes(':')) {
|
|
23
|
-
throw new Error(
|
|
24
|
-
`image reference "${releaseImageRef}" carries a tag or digest; a develop coordinate maps a bare repository`,
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
const segments = repository.split('/');
|
|
28
|
-
if (segments.length < MINIMUM_REPOSITORY_SEGMENTS) {
|
|
29
|
-
throw new Error(
|
|
30
|
-
`image reference "${releaseImageRef}" has no <owner>/<name> repository path; it cannot be mapped to a develop repository`,
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
if (segments[NAMESPACE_SEGMENT_INDEX] === DEVELOP_NAMESPACE_SEGMENT) {
|
|
34
|
-
throw new Error(`image reference "${releaseImageRef}" is already a develop repository`);
|
|
35
|
-
}
|
|
36
|
-
const [owner, ...name] = segments;
|
|
37
|
-
return `${authority}/${owner}/${DEVELOP_NAMESPACE_SEGMENT}/${name.join('/')}`;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Whether a repository reference lies in the develop namespace. */
|
|
41
|
-
export function isDevelopImageRef(imageRef) {
|
|
42
|
-
let repository;
|
|
43
|
-
try {
|
|
44
|
-
({ repository } = splitImageRef(imageRef));
|
|
45
|
-
} catch {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
const segments = repository.split('/');
|
|
49
|
-
return (
|
|
50
|
-
segments.length > MINIMUM_REPOSITORY_SEGMENTS &&
|
|
51
|
-
segments[OWNER_SEGMENT_INDEX].length > 0 &&
|
|
52
|
-
segments[NAMESPACE_SEGMENT_INDEX] === DEVELOP_NAMESPACE_SEGMENT
|
|
53
|
-
);
|
|
54
|
-
}
|