typekro 0.5.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.js +16 -2
- package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/composition/context.d.ts +14 -0
- package/dist/core/composition/context.d.ts.map +1 -1
- package/dist/core/composition/context.js.map +1 -1
- package/dist/core/composition/imperative.d.ts.map +1 -1
- package/dist/core/composition/imperative.js +59 -30
- package/dist/core/composition/imperative.js.map +1 -1
- package/dist/core/composition/nested-status-cel.d.ts +50 -0
- package/dist/core/composition/nested-status-cel.d.ts.map +1 -0
- package/dist/core/composition/nested-status-cel.js +169 -0
- package/dist/core/composition/nested-status-cel.js.map +1 -0
- package/dist/core/constants/brands.d.ts +1 -1
- package/dist/core/constants/brands.d.ts.map +1 -1
- package/dist/core/constants/brands.js +1 -1
- package/dist/core/constants/brands.js.map +1 -1
- package/dist/core/containers/build.d.ts +50 -0
- package/dist/core/containers/build.d.ts.map +1 -0
- package/dist/core/containers/build.js +146 -0
- package/dist/core/containers/build.js.map +1 -0
- package/dist/core/containers/errors.d.ts +14 -0
- package/dist/core/containers/errors.d.ts.map +1 -0
- package/dist/core/containers/errors.js +48 -0
- package/dist/core/containers/errors.js.map +1 -0
- package/dist/core/containers/exec.d.ts +36 -0
- package/dist/core/containers/exec.d.ts.map +1 -0
- package/dist/core/containers/exec.js +110 -0
- package/dist/core/containers/exec.js.map +1 -0
- package/dist/core/containers/index.d.ts +21 -0
- package/dist/core/containers/index.d.ts.map +1 -0
- package/dist/core/containers/index.js +20 -0
- package/dist/core/containers/index.js.map +1 -0
- package/dist/core/containers/registries/ecr.d.ts +22 -0
- package/dist/core/containers/registries/ecr.d.ts.map +1 -0
- package/dist/core/containers/registries/ecr.js +118 -0
- package/dist/core/containers/registries/ecr.js.map +1 -0
- package/dist/core/containers/registries/index.d.ts +9 -0
- package/dist/core/containers/registries/index.d.ts.map +1 -0
- package/dist/core/containers/registries/index.js +23 -0
- package/dist/core/containers/registries/index.js.map +1 -0
- package/dist/core/containers/registries/orbstack.d.ts +14 -0
- package/dist/core/containers/registries/orbstack.d.ts.map +1 -0
- package/dist/core/containers/registries/orbstack.js +24 -0
- package/dist/core/containers/registries/orbstack.js.map +1 -0
- package/dist/core/containers/registries/types.d.ts +94 -0
- package/dist/core/containers/registries/types.d.ts.map +1 -0
- package/dist/core/containers/registries/types.js +11 -0
- package/dist/core/containers/registries/types.js.map +1 -0
- package/dist/core/dependencies/graph.d.ts +4 -0
- package/dist/core/dependencies/graph.d.ts.map +1 -1
- package/dist/core/dependencies/graph.js +6 -0
- package/dist/core/dependencies/graph.js.map +1 -1
- package/dist/core/dependencies/resolver.d.ts +28 -0
- package/dist/core/dependencies/resolver.d.ts.map +1 -1
- package/dist/core/dependencies/resolver.js +138 -5
- package/dist/core/dependencies/resolver.js.map +1 -1
- package/dist/core/deployment/direct-factory.d.ts +13 -0
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +99 -0
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +45 -2
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts +28 -0
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +243 -13
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
- package/dist/core/deployment/kro-readiness.js +10 -1
- package/dist/core/deployment/kro-readiness.js.map +1 -1
- package/dist/core/deployment/nested-composition-status.d.ts +33 -0
- package/dist/core/deployment/nested-composition-status.d.ts.map +1 -0
- package/dist/core/deployment/nested-composition-status.js +101 -0
- package/dist/core/deployment/nested-composition-status.js.map +1 -0
- package/dist/core/deployment/readiness-waiter.d.ts.map +1 -1
- package/dist/core/deployment/readiness-waiter.js +23 -6
- package/dist/core/deployment/readiness-waiter.js.map +1 -1
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
- package/dist/core/deployment/rollback-manager.js +19 -0
- package/dist/core/deployment/rollback-manager.js.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.d.ts +6 -0
- package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.js +133 -35
- package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +8 -2
- package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.js +34 -2
- package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-ternary.js +52 -28
- package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-traversal.js +11 -4
- package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-types.d.ts +8 -0
- package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer.d.ts +1 -1
- package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer.js +8 -2
- package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.d.ts +8 -0
- package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.js +111 -16
- package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -1
- package/dist/core/metadata/resource-metadata.d.ts +4 -0
- package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
- package/dist/core/metadata/resource-metadata.js.map +1 -1
- package/dist/core/proxy/create-resource.d.ts.map +1 -1
- package/dist/core/proxy/create-resource.js +63 -21
- package/dist/core/proxy/create-resource.js.map +1 -1
- package/dist/core/references/cel.d.ts +48 -0
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +82 -0
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/external-refs.d.ts +2 -0
- package/dist/core/references/external-refs.d.ts.map +1 -1
- package/dist/core/references/external-refs.js +3 -0
- package/dist/core/references/external-refs.js.map +1 -1
- package/dist/core/references/resolver.d.ts +12 -4
- package/dist/core/references/resolver.d.ts.map +1 -1
- package/dist/core/references/resolver.js +152 -69
- package/dist/core/references/resolver.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +5 -4
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/cel-references.d.ts +1 -1
- package/dist/core/serialization/cel-references.d.ts.map +1 -1
- package/dist/core/serialization/cel-references.js +191 -24
- package/dist/core/serialization/cel-references.js.map +1 -1
- package/dist/core/serialization/core.d.ts +8 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +434 -7
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/serialization/kro-post-processing.d.ts +46 -0
- package/dist/core/serialization/kro-post-processing.d.ts.map +1 -0
- package/dist/core/serialization/kro-post-processing.js +103 -0
- package/dist/core/serialization/kro-post-processing.js.map +1 -0
- package/dist/core/serialization/schema.d.ts +61 -3
- package/dist/core/serialization/schema.d.ts.map +1 -1
- package/dist/core/serialization/schema.js +520 -18
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/serialization/status-analysis-pipeline.d.ts +4 -0
- package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
- package/dist/core/serialization/status-analysis-pipeline.js +127 -10
- package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
- package/dist/core/serialization/yaml.d.ts.map +1 -1
- package/dist/core/serialization/yaml.js +27 -4
- package/dist/core/serialization/yaml.js.map +1 -1
- package/dist/core/types/composable.d.ts +62 -0
- package/dist/core/types/composable.d.ts.map +1 -0
- package/dist/core/types/composable.js +51 -0
- package/dist/core/types/composable.js.map +1 -0
- package/dist/core/types/deployment.d.ts +2 -1
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +1 -0
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/serialization.d.ts +40 -1
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +55 -31
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +55 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +92 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -0
- package/dist/factories/cnpg/compositions/index.d.ts +2 -0
- package/dist/factories/cnpg/compositions/index.d.ts.map +1 -0
- package/dist/factories/cnpg/compositions/index.js +2 -0
- package/dist/factories/cnpg/compositions/index.js.map +1 -0
- package/dist/factories/cnpg/index.d.ts +42 -0
- package/dist/factories/cnpg/index.d.ts.map +1 -0
- package/dist/factories/cnpg/index.js +42 -0
- package/dist/factories/cnpg/index.js.map +1 -0
- package/dist/factories/cnpg/resources/backup.d.ts +34 -0
- package/dist/factories/cnpg/resources/backup.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/backup.js +87 -0
- package/dist/factories/cnpg/resources/backup.js.map +1 -0
- package/dist/factories/cnpg/resources/cluster.d.ts +55 -0
- package/dist/factories/cnpg/resources/cluster.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/cluster.js +123 -0
- package/dist/factories/cnpg/resources/cluster.js.map +1 -0
- package/dist/factories/cnpg/resources/helm.d.ts +45 -0
- package/dist/factories/cnpg/resources/helm.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/helm.js +78 -0
- package/dist/factories/cnpg/resources/helm.js.map +1 -0
- package/dist/factories/cnpg/resources/index.d.ts +6 -0
- package/dist/factories/cnpg/resources/index.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/index.js +6 -0
- package/dist/factories/cnpg/resources/index.js.map +1 -0
- package/dist/factories/cnpg/resources/pooler.d.ts +38 -0
- package/dist/factories/cnpg/resources/pooler.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/pooler.js +97 -0
- package/dist/factories/cnpg/resources/pooler.js.map +1 -0
- package/dist/factories/cnpg/resources/scheduled-backup.d.ts +35 -0
- package/dist/factories/cnpg/resources/scheduled-backup.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/scheduled-backup.js +68 -0
- package/dist/factories/cnpg/resources/scheduled-backup.js.map +1 -0
- package/dist/factories/cnpg/types.d.ts +507 -0
- package/dist/factories/cnpg/types.d.ts.map +1 -0
- package/dist/factories/cnpg/types.js +398 -0
- package/dist/factories/cnpg/types.js.map +1 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.d.ts +70 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.js +79 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/cnpg/utils/index.d.ts +2 -0
- package/dist/factories/cnpg/utils/index.d.ts.map +1 -0
- package/dist/factories/cnpg/utils/index.js +2 -0
- package/dist/factories/cnpg/utils/index.js.map +1 -0
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +4 -0
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/types.d.ts +2 -0
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/inngest/compositions/index.d.ts +2 -0
- package/dist/factories/inngest/compositions/index.d.ts.map +1 -0
- package/dist/factories/inngest/compositions/index.js +2 -0
- package/dist/factories/inngest/compositions/index.js.map +1 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +150 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.js +90 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -0
- package/dist/factories/inngest/index.d.ts +45 -0
- package/dist/factories/inngest/index.d.ts.map +1 -0
- package/dist/factories/inngest/index.js +45 -0
- package/dist/factories/inngest/index.js.map +1 -0
- package/dist/factories/inngest/resources/helm.d.ts +53 -0
- package/dist/factories/inngest/resources/helm.d.ts.map +1 -0
- package/dist/factories/inngest/resources/helm.js +88 -0
- package/dist/factories/inngest/resources/helm.js.map +1 -0
- package/dist/factories/inngest/resources/index.d.ts +2 -0
- package/dist/factories/inngest/resources/index.d.ts.map +1 -0
- package/dist/factories/inngest/resources/index.js +2 -0
- package/dist/factories/inngest/resources/index.js.map +1 -0
- package/dist/factories/inngest/types.d.ts +177 -0
- package/dist/factories/inngest/types.d.ts.map +1 -0
- package/dist/factories/inngest/types.js +189 -0
- package/dist/factories/inngest/types.js.map +1 -0
- package/dist/factories/inngest/utils/helm-values-mapper.d.ts +127 -0
- package/dist/factories/inngest/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/inngest/utils/helm-values-mapper.js +116 -0
- package/dist/factories/inngest/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/inngest/utils/index.d.ts +2 -0
- package/dist/factories/inngest/utils/index.d.ts.map +1 -0
- package/dist/factories/inngest/utils/index.js +2 -0
- package/dist/factories/inngest/utils/index.js.map +1 -0
- package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
- package/dist/factories/kubernetes/config/secret.js +11 -1
- package/dist/factories/kubernetes/config/secret.js.map +1 -1
- package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -1
- package/dist/factories/kubernetes/core/namespace.js +1 -1
- package/dist/factories/kubernetes/core/namespace.js.map +1 -1
- package/dist/factories/searxng/compositions/index.d.ts +2 -0
- package/dist/factories/searxng/compositions/index.d.ts.map +1 -0
- package/dist/factories/searxng/compositions/index.js +2 -0
- package/dist/factories/searxng/compositions/index.js.map +1 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts +65 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.js +237 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -0
- package/dist/factories/searxng/index.d.ts +29 -0
- package/dist/factories/searxng/index.d.ts.map +1 -0
- package/dist/factories/searxng/index.js +27 -0
- package/dist/factories/searxng/index.js.map +1 -0
- package/dist/factories/searxng/resources/index.d.ts +2 -0
- package/dist/factories/searxng/resources/index.d.ts.map +1 -0
- package/dist/factories/searxng/resources/index.js +2 -0
- package/dist/factories/searxng/resources/index.js.map +1 -0
- package/dist/factories/searxng/resources/searxng.d.ts +65 -0
- package/dist/factories/searxng/resources/searxng.d.ts.map +1 -0
- package/dist/factories/searxng/resources/searxng.js +188 -0
- package/dist/factories/searxng/resources/searxng.js.map +1 -0
- package/dist/factories/searxng/types.d.ts +126 -0
- package/dist/factories/searxng/types.d.ts.map +1 -0
- package/dist/factories/searxng/types.js +176 -0
- package/dist/factories/searxng/types.js.map +1 -0
- package/dist/factories/searxng/utils/settings-builder.d.ts +46 -0
- package/dist/factories/searxng/utils/settings-builder.d.ts.map +1 -0
- package/dist/factories/searxng/utils/settings-builder.js +52 -0
- package/dist/factories/searxng/utils/settings-builder.js.map +1 -0
- package/dist/factories/simple/config/secret.d.ts.map +1 -1
- package/dist/factories/simple/config/secret.js +28 -0
- package/dist/factories/simple/config/secret.js.map +1 -1
- package/dist/factories/valkey/compositions/index.d.ts +2 -0
- package/dist/factories/valkey/compositions/index.d.ts.map +1 -0
- package/dist/factories/valkey/compositions/index.js +2 -0
- package/dist/factories/valkey/compositions/index.js.map +1 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +41 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.js +105 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -0
- package/dist/factories/valkey/index.d.ts +50 -0
- package/dist/factories/valkey/index.d.ts.map +1 -0
- package/dist/factories/valkey/index.js +50 -0
- package/dist/factories/valkey/index.js.map +1 -0
- package/dist/factories/valkey/resources/helm.d.ts +53 -0
- package/dist/factories/valkey/resources/helm.d.ts.map +1 -0
- package/dist/factories/valkey/resources/helm.js +82 -0
- package/dist/factories/valkey/resources/helm.js.map +1 -0
- package/dist/factories/valkey/resources/index.d.ts +3 -0
- package/dist/factories/valkey/resources/index.d.ts.map +1 -0
- package/dist/factories/valkey/resources/index.js +3 -0
- package/dist/factories/valkey/resources/index.js.map +1 -0
- package/dist/factories/valkey/resources/valkey.d.ts +46 -0
- package/dist/factories/valkey/resources/valkey.d.ts.map +1 -0
- package/dist/factories/valkey/resources/valkey.js +123 -0
- package/dist/factories/valkey/resources/valkey.js.map +1 -0
- package/dist/factories/valkey/types.d.ts +185 -0
- package/dist/factories/valkey/types.d.ts.map +1 -0
- package/dist/factories/valkey/types.js +204 -0
- package/dist/factories/valkey/types.js.map +1 -0
- package/dist/factories/valkey/utils/helm-values-mapper.d.ts +32 -0
- package/dist/factories/valkey/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/valkey/utils/helm-values-mapper.js +58 -0
- package/dist/factories/valkey/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/valkey/utils/index.d.ts +2 -0
- package/dist/factories/valkey/utils/index.d.ts.map +1 -0
- package/dist/factories/valkey/utils/index.js +2 -0
- package/dist/factories/valkey/utils/index.js.map +1 -0
- package/dist/factories/webapp/compositions/index.d.ts +2 -0
- package/dist/factories/webapp/compositions/index.d.ts.map +1 -0
- package/dist/factories/webapp/compositions/index.js +2 -0
- package/dist/factories/webapp/compositions/index.js.map +1 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +97 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.js +220 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -0
- package/dist/factories/webapp/index.d.ts +53 -0
- package/dist/factories/webapp/index.d.ts.map +1 -0
- package/dist/factories/webapp/index.js +53 -0
- package/dist/factories/webapp/index.js.map +1 -0
- package/dist/factories/webapp/types.d.ts +69 -0
- package/dist/factories/webapp/types.d.ts.map +1 -0
- package/dist/factories/webapp/types.js +92 -0
- package/dist/factories/webapp/types.js.map +1 -0
- package/dist/shared/brands.d.ts +16 -0
- package/dist/shared/brands.d.ts.map +1 -1
- package/dist/shared/brands.js +16 -0
- package/dist/shared/brands.js.map +1 -1
- package/package.json +29 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amazon ECR Registry Handler
|
|
3
|
+
*
|
|
4
|
+
* Uses the AWS SDK's credential provider chain for all authentication.
|
|
5
|
+
* Supports env vars, profiles, SSO sessions, instance roles, and role
|
|
6
|
+
* assumption — all through the SDK's standard mechanisms.
|
|
7
|
+
*/
|
|
8
|
+
import { CreateRepositoryCommand, DescribeRepositoriesCommand, ECRClient, GetAuthorizationTokenCommand, } from '@aws-sdk/client-ecr';
|
|
9
|
+
import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts';
|
|
10
|
+
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
11
|
+
import { getComponentLogger } from '../../logging/index.js';
|
|
12
|
+
import { ContainerBuildError } from '../errors.js';
|
|
13
|
+
import { execDocker } from '../exec.js';
|
|
14
|
+
const logger = getComponentLogger('container-registry-ecr');
|
|
15
|
+
export class EcrRegistryHandler {
|
|
16
|
+
config;
|
|
17
|
+
resolvedAccountId;
|
|
18
|
+
resolvedRegion;
|
|
19
|
+
credentialProvider;
|
|
20
|
+
ecrClient;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.resolvedRegion = config.region
|
|
24
|
+
?? process.env.AWS_REGION
|
|
25
|
+
?? process.env.AWS_DEFAULT_REGION
|
|
26
|
+
?? 'us-east-1';
|
|
27
|
+
this.credentialProvider = fromNodeProviderChain(config.credentials ?? {});
|
|
28
|
+
this.ecrClient = new ECRClient({
|
|
29
|
+
region: this.resolvedRegion,
|
|
30
|
+
credentials: this.credentialProvider,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async resolveImageUri(imageName, tag) {
|
|
34
|
+
const accountId = await this.getAccountId();
|
|
35
|
+
return `${accountId}.dkr.ecr.${this.resolvedRegion}.amazonaws.com/${imageName}:${tag}`;
|
|
36
|
+
}
|
|
37
|
+
async authenticate() {
|
|
38
|
+
try {
|
|
39
|
+
const authResponse = await this.ecrClient.send(new GetAuthorizationTokenCommand({}));
|
|
40
|
+
const authData = authResponse.authorizationData?.[0];
|
|
41
|
+
if (!authData?.authorizationToken || !authData.proxyEndpoint) {
|
|
42
|
+
throw new Error('ECR returned empty authorization data');
|
|
43
|
+
}
|
|
44
|
+
const decoded = Buffer.from(authData.authorizationToken, 'base64').toString();
|
|
45
|
+
const colonIndex = decoded.indexOf(':');
|
|
46
|
+
if (colonIndex === -1)
|
|
47
|
+
throw new Error('Failed to decode ECR authorization token');
|
|
48
|
+
const password = decoded.slice(colonIndex + 1);
|
|
49
|
+
await execDocker(['login', '--username', 'AWS', '--password-stdin', authData.proxyEndpoint], {
|
|
50
|
+
stdin: password,
|
|
51
|
+
quiet: true,
|
|
52
|
+
});
|
|
53
|
+
logger.info('Authenticated with ECR', { endpoint: authData.proxyEndpoint });
|
|
54
|
+
if (!this.resolvedAccountId) {
|
|
55
|
+
const match = authData.proxyEndpoint.match(/https?:\/\/(\d+)\.dkr\.ecr/);
|
|
56
|
+
if (match?.[1])
|
|
57
|
+
this.resolvedAccountId = match[1];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof ContainerBuildError)
|
|
62
|
+
throw error;
|
|
63
|
+
throw ContainerBuildError.ecrAuthFailed(error instanceof Error ? error : new Error(String(error)));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async push(imageUri, imageName) {
|
|
67
|
+
if (this.config.createRepository !== false) {
|
|
68
|
+
await this.ensureRepositoryExists(imageName);
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
await execDocker(['push', imageUri]);
|
|
72
|
+
logger.info('Image pushed to ECR', { imageUri });
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
throw ContainerBuildError.pushFailed(imageUri, error instanceof Error ? error : new Error(String(error)));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async getAccountId() {
|
|
80
|
+
if (this.config.accountId)
|
|
81
|
+
return this.config.accountId;
|
|
82
|
+
if (this.resolvedAccountId)
|
|
83
|
+
return this.resolvedAccountId;
|
|
84
|
+
try {
|
|
85
|
+
const sts = new STSClient({
|
|
86
|
+
region: this.resolvedRegion,
|
|
87
|
+
credentials: this.credentialProvider,
|
|
88
|
+
});
|
|
89
|
+
const identity = await sts.send(new GetCallerIdentityCommand({}));
|
|
90
|
+
if (!identity.Account)
|
|
91
|
+
throw new Error('STS returned no account ID');
|
|
92
|
+
this.resolvedAccountId = identity.Account;
|
|
93
|
+
return identity.Account;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
throw ContainerBuildError.ecrAuthFailed(new Error(`Cannot determine AWS account ID. Provide accountId explicitly or ensure valid AWS credentials.\n` +
|
|
97
|
+
`Cause: ${error instanceof Error ? error.message : String(error)}`));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async ensureRepositoryExists(repoName) {
|
|
101
|
+
try {
|
|
102
|
+
await this.ecrClient.send(new DescribeRepositoriesCommand({ repositoryNames: [repoName] }));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error.name === 'RepositoryNotFoundException') {
|
|
106
|
+
logger.info('Creating ECR repository', { repoName });
|
|
107
|
+
await this.ecrClient.send(new CreateRepositoryCommand({ repositoryName: repoName }));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
throw new ContainerBuildError(`ECR repository check failed for "${repoName}": ${error instanceof Error ? error.message : String(error)}`, 'ECR_REPOSITORY_ERROR', [
|
|
111
|
+
`Check IAM permissions: ecr:DescribeRepositories and ecr:CreateRepository are required.`,
|
|
112
|
+
`Or set createRepository: false and create the repository manually.`,
|
|
113
|
+
], error instanceof Error ? error : undefined);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=ecr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry Resolver
|
|
3
|
+
*
|
|
4
|
+
* Maps a RegistryConfig to its handler implementation.
|
|
5
|
+
*/
|
|
6
|
+
import type { RegistryConfig, RegistryHandler } from './types.js';
|
|
7
|
+
export declare function resolveRegistry(config: RegistryConfig): RegistryHandler;
|
|
8
|
+
export type { RegistryConfig, RegistryHandler } from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAavE;AAED,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry Resolver
|
|
3
|
+
*
|
|
4
|
+
* Maps a RegistryConfig to its handler implementation.
|
|
5
|
+
*/
|
|
6
|
+
import { ContainerBuildError } from '../errors.js';
|
|
7
|
+
import { EcrRegistryHandler } from './ecr.js';
|
|
8
|
+
import { OrbstackRegistryHandler } from './orbstack.js';
|
|
9
|
+
export function resolveRegistry(config) {
|
|
10
|
+
switch (config.type) {
|
|
11
|
+
case 'orbstack':
|
|
12
|
+
return new OrbstackRegistryHandler();
|
|
13
|
+
case 'ecr':
|
|
14
|
+
return new EcrRegistryHandler(config);
|
|
15
|
+
case 'gcr':
|
|
16
|
+
throw ContainerBuildError.registryNotSupported('gcr');
|
|
17
|
+
case 'acr':
|
|
18
|
+
throw ContainerBuildError.registryNotSupported('acr');
|
|
19
|
+
default:
|
|
20
|
+
throw ContainerBuildError.registryNotSupported(String(config.type));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD;YACE,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orbstack Registry Handler
|
|
3
|
+
*
|
|
4
|
+
* Orbstack makes locally-built Docker images automatically available to its
|
|
5
|
+
* built-in Kubernetes cluster. No push step is needed — `docker build` is
|
|
6
|
+
* sufficient.
|
|
7
|
+
*/
|
|
8
|
+
import type { RegistryHandler } from './types.js';
|
|
9
|
+
export declare class OrbstackRegistryHandler implements RegistryHandler {
|
|
10
|
+
resolveImageUri(imageName: string, tag: string): Promise<string>;
|
|
11
|
+
authenticate(): Promise<void>;
|
|
12
|
+
push(_imageUri: string, _imageName: string): Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=orbstack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbstack.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,uBAAwB,YAAW,eAAe;IACvD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKpE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orbstack Registry Handler
|
|
3
|
+
*
|
|
4
|
+
* Orbstack makes locally-built Docker images automatically available to its
|
|
5
|
+
* built-in Kubernetes cluster. No push step is needed — `docker build` is
|
|
6
|
+
* sufficient.
|
|
7
|
+
*/
|
|
8
|
+
import { getComponentLogger } from '../../logging/index.js';
|
|
9
|
+
const logger = getComponentLogger('container-registry-orbstack');
|
|
10
|
+
export class OrbstackRegistryHandler {
|
|
11
|
+
async resolveImageUri(imageName, tag) {
|
|
12
|
+
return `${imageName}:${tag}`;
|
|
13
|
+
}
|
|
14
|
+
async authenticate() {
|
|
15
|
+
// No authentication needed — Orbstack uses the local Docker daemon.
|
|
16
|
+
logger.debug('Orbstack registry: no authentication needed');
|
|
17
|
+
}
|
|
18
|
+
async push(_imageUri, _imageName) {
|
|
19
|
+
// No push needed — images built locally are auto-available to Orbstack K8s.
|
|
20
|
+
logger.debug('Orbstack registry: skipping push (images auto-available to local K8s)');
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=orbstack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbstack.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW;QAClD,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,oEAAoE;QACpE,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,UAAkB;QAC9C,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container Registry Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the registry configuration interface and the internal handler
|
|
5
|
+
* contract. New registries (GCR, ACR, etc.) are added by:
|
|
6
|
+
* 1. Adding a config variant to RegistryConfig
|
|
7
|
+
* 2. Implementing RegistryHandler
|
|
8
|
+
* 3. Registering in the resolver
|
|
9
|
+
*/
|
|
10
|
+
export interface OrbstackRegistryConfig {
|
|
11
|
+
type: 'orbstack';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* ECR registry configuration.
|
|
15
|
+
*
|
|
16
|
+
* Credential options are passed directly to the AWS SDK's
|
|
17
|
+
* `fromNodeProviderChain`, which handles env vars, profiles,
|
|
18
|
+
* SSO sessions, instance roles, web identity tokens, and role
|
|
19
|
+
* assumption. Any option accepted by the SDK's DefaultProviderInit
|
|
20
|
+
* can be passed via `credentials`.
|
|
21
|
+
*/
|
|
22
|
+
export interface EcrRegistryConfig {
|
|
23
|
+
type: 'ecr';
|
|
24
|
+
/** AWS account ID. Auto-detected from STS if omitted. */
|
|
25
|
+
accountId?: string;
|
|
26
|
+
/** AWS region. Falls back to AWS_REGION / AWS_DEFAULT_REGION env vars. */
|
|
27
|
+
region?: string;
|
|
28
|
+
/** Create the ECR repository if it doesn't exist (default: true). */
|
|
29
|
+
createRepository?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* AWS credential options passed to `fromNodeProviderChain`.
|
|
32
|
+
* Common options: `profile`, `roleArn`, `roleSessionName`,
|
|
33
|
+
* `mfaCodeProvider`, `configFilepath`.
|
|
34
|
+
* Omit to use the default credential chain (env vars, profiles, SSO, etc.).
|
|
35
|
+
*/
|
|
36
|
+
credentials?: import('@aws-sdk/credential-provider-node').DefaultProviderInit;
|
|
37
|
+
}
|
|
38
|
+
export interface GcrRegistryConfig {
|
|
39
|
+
type: 'gcr';
|
|
40
|
+
projectId: string;
|
|
41
|
+
}
|
|
42
|
+
export interface AcrRegistryConfig {
|
|
43
|
+
type: 'acr';
|
|
44
|
+
registryName: string;
|
|
45
|
+
}
|
|
46
|
+
/** Discriminated union of all supported container registries. */
|
|
47
|
+
export type RegistryConfig = OrbstackRegistryConfig | EcrRegistryConfig | GcrRegistryConfig | AcrRegistryConfig;
|
|
48
|
+
export interface ContainerBuildOptions {
|
|
49
|
+
/** Path to the build context directory (contains the Dockerfile). */
|
|
50
|
+
context: string;
|
|
51
|
+
/** Dockerfile path relative to context (default: 'Dockerfile'). */
|
|
52
|
+
dockerfile?: string;
|
|
53
|
+
/** Image name without registry prefix or tag (e.g., 'my-app'). */
|
|
54
|
+
imageName: string;
|
|
55
|
+
/** Tag: explicit string, 'content-hash' for SHA-based, or undefined for 'latest'. */
|
|
56
|
+
tag?: string;
|
|
57
|
+
/** Target platform (e.g., 'linux/amd64'). Omit for native platform. */
|
|
58
|
+
platform?: string;
|
|
59
|
+
/** Additional Docker build arguments. */
|
|
60
|
+
buildArgs?: Record<string, string>;
|
|
61
|
+
/** Docker build target for multi-stage builds. */
|
|
62
|
+
target?: string;
|
|
63
|
+
/** Suppress build output — only log on error. */
|
|
64
|
+
quiet?: boolean;
|
|
65
|
+
/** Build timeout in milliseconds (default: 300_000 = 5 minutes). */
|
|
66
|
+
timeout?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Extra Docker CLI arguments appended to the build command.
|
|
69
|
+
* Escape hatch for --secret, --ssh, --cache-from, etc.
|
|
70
|
+
*/
|
|
71
|
+
extraDockerArgs?: string[];
|
|
72
|
+
/** Registry to push the built image to. */
|
|
73
|
+
registry: RegistryConfig;
|
|
74
|
+
}
|
|
75
|
+
export interface ContainerBuildResult {
|
|
76
|
+
/** Full image URI (e.g., '123456.dkr.ecr.us-east-1.amazonaws.com/app:sha-abc123'). */
|
|
77
|
+
imageUri: string;
|
|
78
|
+
/** The tag that was applied. */
|
|
79
|
+
tag: string;
|
|
80
|
+
/** Build duration in milliseconds. */
|
|
81
|
+
duration: number;
|
|
82
|
+
/** Whether the image was pushed to a remote registry. */
|
|
83
|
+
pushed: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** Internal interface that each registry implementation fulfills. */
|
|
86
|
+
export interface RegistryHandler {
|
|
87
|
+
/** Compute the full image URI (registry prefix + name + tag). */
|
|
88
|
+
resolveImageUri(imageName: string, tag: string): Promise<string>;
|
|
89
|
+
/** Authenticate with the registry. No-op for local registries. */
|
|
90
|
+
authenticate(): Promise<void>;
|
|
91
|
+
/** Push the image to the registry. Returns true if pushed, false for local registries. */
|
|
92
|
+
push(imageUri: string, imageName: string): Promise<boolean>;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,mCAAmC,EAAE,mBAAmB,CAAC;CAC/E;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,iEAAiE;AACjE,MAAM,MAAM,cAAc,GACtB,sBAAsB,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,CAAC;AAMtB,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,kEAAkE;IAClE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,0FAA0F;IAC1F,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container Registry Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the registry configuration interface and the internal handler
|
|
5
|
+
* contract. New registries (GCR, ACR, etc.) are added by:
|
|
6
|
+
* 1. Adding a config variant to RegistryConfig
|
|
7
|
+
* 2. Implementing RegistryHandler
|
|
8
|
+
* 3. Registering in the resolver
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -8,6 +8,10 @@ import type { DependencyNode } from '../types/dependencies.js';
|
|
|
8
8
|
import type { DeployableK8sResource, Enhanced } from '../types/kubernetes.js';
|
|
9
9
|
export declare class DependencyGraph {
|
|
10
10
|
private nodes;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a node exists in the graph
|
|
13
|
+
*/
|
|
14
|
+
hasNode(id: string): boolean;
|
|
11
15
|
/**
|
|
12
16
|
* Add a node to the dependency graph
|
|
13
17
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE9E,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAqC;IAElD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAiBtF;;;;OAIG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAuBxD;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKrC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKnC;;OAEG;IACH,SAAS,IAAI,OAAO;IASpB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE,EAAE;IAyCxB;;;OAGG;IACH,mBAAmB,IAAI,MAAM,EAAE;IA4C/B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,KAAK,IAAI,eAAe;IAkBxB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe;CA0BhD"}
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE9E,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAqC;IAElD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAiBtF;;;;OAIG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAuBxD;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKrC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKnC;;OAEG;IACH,SAAS,IAAI,OAAO;IASpB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE,EAAE;IAyCxB;;;OAGG;IACH,mBAAmB,IAAI,MAAM,EAAE;IA4C/B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,KAAK,IAAI,eAAe;IAkBxB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe;CA0BhD"}
|
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
import { CircularDependencyError, TypeKroError } from '../errors.js';
|
|
8
8
|
export class DependencyGraph {
|
|
9
9
|
nodes = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Check if a node exists in the graph
|
|
12
|
+
*/
|
|
13
|
+
hasNode(id) {
|
|
14
|
+
return this.nodes.has(id);
|
|
15
|
+
}
|
|
10
16
|
/**
|
|
11
17
|
* Add a node to the dependency graph
|
|
12
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,19 @@ export declare class DependencyResolver {
|
|
|
24
24
|
* Extract all references from a resource
|
|
25
25
|
*/
|
|
26
26
|
private extractReferences;
|
|
27
|
+
/**
|
|
28
|
+
* Parse embedded KubernetesRef marker strings from serialized values.
|
|
29
|
+
*
|
|
30
|
+
* When a KubernetesRef proxy is used in a template literal (e.g.,
|
|
31
|
+
* `postgresql://${database.status.writeService}:5432/mydb`), the
|
|
32
|
+
* Symbol.toPrimitive handler produces a marker string:
|
|
33
|
+
* __KUBERNETES_REF_{resourceId}_{fieldPath}__
|
|
34
|
+
*
|
|
35
|
+
* This method extracts those markers so the dependency resolver can
|
|
36
|
+
* detect references to other resources embedded in string values.
|
|
37
|
+
* The same marker format is used by schema-proxy.ts.
|
|
38
|
+
*/
|
|
39
|
+
private parseMarkerReferences;
|
|
27
40
|
/**
|
|
28
41
|
* Parse CEL expressions to extract resource references
|
|
29
42
|
*/
|
|
@@ -32,6 +45,21 @@ export declare class DependencyResolver {
|
|
|
32
45
|
* Analyze deployment order and identify parallelizable resources
|
|
33
46
|
*/
|
|
34
47
|
analyzeDeploymentOrder(graph: DependencyGraph): DeploymentPlan;
|
|
48
|
+
/**
|
|
49
|
+
* Analyze deletion order — reverse of deployment levels.
|
|
50
|
+
*
|
|
51
|
+
* Returns parallelizable levels where the LAST deployment level (leaf
|
|
52
|
+
* resources with the most dependencies) is deleted FIRST. This ensures
|
|
53
|
+
* dependents are removed before their dependencies (e.g., App before
|
|
54
|
+
* Database, Database before Namespace).
|
|
55
|
+
*
|
|
56
|
+
* Resources with `lifecycle: 'shared'` are excluded from the deletion plan.
|
|
57
|
+
*/
|
|
58
|
+
analyzeDeletionOrder(graph: DependencyGraph, sharedResourceIds?: Set<string>): DeploymentPlan;
|
|
59
|
+
/**
|
|
60
|
+
* Build a subgraph excluding shared resources for deletion planning.
|
|
61
|
+
*/
|
|
62
|
+
private buildDeletionSubgraph;
|
|
35
63
|
/**
|
|
36
64
|
* Get rollback order (reverse of deployment order)
|
|
37
65
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA6C;IAE3D;;OAEG;IACH,oBAAoB,CAClB,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,GAC7D,eAAe;IAkFlB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAIrD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAS9C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc;IA0C9D;;;;;;;;;OASG;IACH,oBAAoB,CAClB,KAAK,EAAE,eAAe,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,cAAc;IAejB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAKlD;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAI1D;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;CAGxD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* topological ordering for deployment.
|
|
6
6
|
*/
|
|
7
7
|
import { isCelExpression, isKubernetesRef } from '../../utils/type-guards.js';
|
|
8
|
-
import { KUBERNETES_REF_BRAND } from '../constants/brands.js';
|
|
8
|
+
import { KUBERNETES_REF_BRAND, KUBERNETES_REF_MARKER_PATTERN } from '../constants/brands.js';
|
|
9
9
|
import { CircularDependencyError, TypeKroError } from '../errors.js';
|
|
10
10
|
import { getComponentLogger } from '../logging/index.js';
|
|
11
|
+
import { getResourceId } from '../metadata/index.js';
|
|
11
12
|
import { DependencyGraph } from './graph.js';
|
|
12
13
|
export class DependencyResolver {
|
|
13
14
|
logger = getComponentLogger('dependency-resolver');
|
|
@@ -16,9 +17,17 @@ export class DependencyResolver {
|
|
|
16
17
|
*/
|
|
17
18
|
buildDependencyGraph(resources) {
|
|
18
19
|
const graph = new DependencyGraph();
|
|
19
|
-
// Add all resources as nodes
|
|
20
|
+
// Add all resources as nodes and build a reverse map from original
|
|
21
|
+
// composition IDs (e.g., 'database') to graph IDs (e.g., 'testappResource0Database').
|
|
22
|
+
// Marker strings in template literals use the original composition ID, but
|
|
23
|
+
// the graph nodes use the prefixed deployment ID.
|
|
24
|
+
const originalIdToGraphId = new Map();
|
|
20
25
|
for (const resource of resources) {
|
|
21
26
|
graph.addNode(resource.id, resource);
|
|
27
|
+
const originalId = getResourceId(resource);
|
|
28
|
+
if (originalId && originalId !== resource.id) {
|
|
29
|
+
originalIdToGraphId.set(originalId, resource.id);
|
|
30
|
+
}
|
|
22
31
|
}
|
|
23
32
|
// Analyze each resource for references and add edges
|
|
24
33
|
for (const resource of resources) {
|
|
@@ -26,10 +35,19 @@ export class DependencyResolver {
|
|
|
26
35
|
for (const ref of references) {
|
|
27
36
|
// Skip schema references (these are internal TypeKro references)
|
|
28
37
|
if (ref.resourceId !== '__schema__') {
|
|
29
|
-
try
|
|
30
|
-
|
|
38
|
+
// Resolve the reference ID: try graph ID first, then original ID mapping
|
|
39
|
+
const targetId = graph.hasNode(ref.resourceId)
|
|
40
|
+
? ref.resourceId
|
|
41
|
+
: originalIdToGraphId.get(ref.resourceId);
|
|
42
|
+
if (targetId) {
|
|
43
|
+
try {
|
|
44
|
+
graph.addEdge(resource.id, targetId);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Edge already exists — safe to ignore
|
|
48
|
+
}
|
|
31
49
|
}
|
|
32
|
-
|
|
50
|
+
else {
|
|
33
51
|
// Log warning if referenced resource doesn't exist in the graph
|
|
34
52
|
// This might be an external reference that will be resolved at runtime
|
|
35
53
|
this.logger.warn('Reference to unknown resource', {
|
|
@@ -40,6 +58,37 @@ export class DependencyResolver {
|
|
|
40
58
|
}
|
|
41
59
|
}
|
|
42
60
|
}
|
|
61
|
+
// Detect implicit namespace dependencies: if a resource has metadata.namespace
|
|
62
|
+
// matching the metadata.name of a Namespace resource in the graph, the resource
|
|
63
|
+
// depends on that Namespace being created first.
|
|
64
|
+
const namespaceResources = new Map(); // namespace name → resource graph ID
|
|
65
|
+
for (const resource of resources) {
|
|
66
|
+
if (resource.kind === 'Namespace' && resource.metadata?.name) {
|
|
67
|
+
namespaceResources.set(resource.metadata.name, resource.id);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (namespaceResources.size > 0) {
|
|
71
|
+
for (const resource of resources) {
|
|
72
|
+
const ns = resource.metadata?.namespace;
|
|
73
|
+
if (ns && namespaceResources.has(ns)) {
|
|
74
|
+
const nsResourceId = namespaceResources.get(ns);
|
|
75
|
+
// Don't add self-dependency
|
|
76
|
+
if (nsResourceId !== resource.id) {
|
|
77
|
+
try {
|
|
78
|
+
graph.addEdge(resource.id, nsResourceId);
|
|
79
|
+
this.logger.debug('Added implicit namespace dependency', {
|
|
80
|
+
resource: resource.id,
|
|
81
|
+
namespace: ns,
|
|
82
|
+
namespaceResource: nsResourceId,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Edge already exists or other issue — safe to ignore
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
43
92
|
return graph;
|
|
44
93
|
}
|
|
45
94
|
/**
|
|
@@ -76,6 +125,12 @@ export class DependencyResolver {
|
|
|
76
125
|
const celRefs = this.parseCelReferences(obj.expression);
|
|
77
126
|
refs.push(...celRefs);
|
|
78
127
|
}
|
|
128
|
+
else if (typeof obj === 'string') {
|
|
129
|
+
// Detect embedded KubernetesRef marker strings from template literals.
|
|
130
|
+
// Format: __KUBERNETES_REF_{resourceId}_{fieldPath}__
|
|
131
|
+
const markerRefs = this.parseMarkerReferences(obj);
|
|
132
|
+
refs.push(...markerRefs);
|
|
133
|
+
}
|
|
79
134
|
else if (Array.isArray(obj)) {
|
|
80
135
|
obj.forEach((item, index) => {
|
|
81
136
|
traverse(item, `${path}[${index}]`);
|
|
@@ -90,6 +145,37 @@ export class DependencyResolver {
|
|
|
90
145
|
traverse(resource);
|
|
91
146
|
return refs;
|
|
92
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Parse embedded KubernetesRef marker strings from serialized values.
|
|
150
|
+
*
|
|
151
|
+
* When a KubernetesRef proxy is used in a template literal (e.g.,
|
|
152
|
+
* `postgresql://${database.status.writeService}:5432/mydb`), the
|
|
153
|
+
* Symbol.toPrimitive handler produces a marker string:
|
|
154
|
+
* __KUBERNETES_REF_{resourceId}_{fieldPath}__
|
|
155
|
+
*
|
|
156
|
+
* This method extracts those markers so the dependency resolver can
|
|
157
|
+
* detect references to other resources embedded in string values.
|
|
158
|
+
* The same marker format is used by schema-proxy.ts.
|
|
159
|
+
*/
|
|
160
|
+
parseMarkerReferences(value) {
|
|
161
|
+
const refs = [];
|
|
162
|
+
// Match __KUBERNETES_REF_{resourceId}_{fieldPath}__
|
|
163
|
+
// resourceId: word chars, hyphens, digits (e.g., 'database', 'inngest-bootstrap1')
|
|
164
|
+
// fieldPath: word chars, dots, hyphens (e.g., 'status.writeService', 'metadata.name')
|
|
165
|
+
// Exclude __schema__ refs — those are schema proxy refs, not resource dependencies
|
|
166
|
+
const markerPattern = new RegExp(KUBERNETES_REF_MARKER_PATTERN.source, 'g');
|
|
167
|
+
let match = markerPattern.exec(value);
|
|
168
|
+
while (match !== null) {
|
|
169
|
+
const [, resourceId, fieldPath] = match;
|
|
170
|
+
refs.push({
|
|
171
|
+
[KUBERNETES_REF_BRAND]: true,
|
|
172
|
+
resourceId,
|
|
173
|
+
fieldPath,
|
|
174
|
+
});
|
|
175
|
+
match = markerPattern.exec(value);
|
|
176
|
+
}
|
|
177
|
+
return refs;
|
|
178
|
+
}
|
|
93
179
|
/**
|
|
94
180
|
* Parse CEL expressions to extract resource references
|
|
95
181
|
*/
|
|
@@ -143,6 +229,53 @@ export class DependencyResolver {
|
|
|
143
229
|
maxParallelism: Math.max(...levels.map((level) => level.length)),
|
|
144
230
|
};
|
|
145
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Analyze deletion order — reverse of deployment levels.
|
|
234
|
+
*
|
|
235
|
+
* Returns parallelizable levels where the LAST deployment level (leaf
|
|
236
|
+
* resources with the most dependencies) is deleted FIRST. This ensures
|
|
237
|
+
* dependents are removed before their dependencies (e.g., App before
|
|
238
|
+
* Database, Database before Namespace).
|
|
239
|
+
*
|
|
240
|
+
* Resources with `lifecycle: 'shared'` are excluded from the deletion plan.
|
|
241
|
+
*/
|
|
242
|
+
analyzeDeletionOrder(graph, sharedResourceIds) {
|
|
243
|
+
// Build a subgraph excluding shared resources
|
|
244
|
+
const deletionGraph = sharedResourceIds
|
|
245
|
+
? this.buildDeletionSubgraph(graph, sharedResourceIds)
|
|
246
|
+
: graph;
|
|
247
|
+
const deploymentPlan = this.analyzeDeploymentOrder(deletionGraph);
|
|
248
|
+
return {
|
|
249
|
+
levels: [...deploymentPlan.levels].reverse(),
|
|
250
|
+
totalResources: deploymentPlan.totalResources,
|
|
251
|
+
maxParallelism: deploymentPlan.maxParallelism,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Build a subgraph excluding shared resources for deletion planning.
|
|
256
|
+
*/
|
|
257
|
+
buildDeletionSubgraph(graph, sharedResourceIds) {
|
|
258
|
+
const subgraph = new DependencyGraph();
|
|
259
|
+
for (const nodeId of graph.getTopologicalOrder()) {
|
|
260
|
+
if (sharedResourceIds.has(nodeId))
|
|
261
|
+
continue;
|
|
262
|
+
const node = graph.getNode(nodeId);
|
|
263
|
+
if (node)
|
|
264
|
+
subgraph.addNode(nodeId, node.resource);
|
|
265
|
+
}
|
|
266
|
+
for (const nodeId of graph.getTopologicalOrder()) {
|
|
267
|
+
if (sharedResourceIds.has(nodeId))
|
|
268
|
+
continue;
|
|
269
|
+
for (const dep of graph.getDependencies(nodeId)) {
|
|
270
|
+
if (sharedResourceIds.has(dep))
|
|
271
|
+
continue;
|
|
272
|
+
if (subgraph.hasNode(dep)) {
|
|
273
|
+
subgraph.addEdge(nodeId, dep);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return subgraph;
|
|
278
|
+
}
|
|
146
279
|
/**
|
|
147
280
|
* Get rollback order (reverse of deployment order)
|
|
148
281
|
*/
|