@go-to-k/cdkd 0.238.3 → 0.238.5
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/cli.js +141 -15
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-MEo926OW.js → deploy-engine-_tADDg2k.js} +14 -5
- package/dist/{deploy-engine-MEo926OW.js.map → deploy-engine-_tADDg2k.js.map} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, f as withSkipPrefix, i as runStackBuffered, n as getLogger, o as PATTERN_B_NAME_OPTIONS, p as withStackName, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-BzO-joNR.js";
|
|
3
3
|
import { A as withErrorHandling, C as StackHasActiveImportsError, S as ResourceUpdateNotSupportedError, _ as MissingCdkCliError, a as normalizeAwsTagsToCfn, b as ProvisioningError, f as LocalInvokeBuildError$1, i as matchesCdkPath, k as normalizeAwsError, l as CdkdError, m as LocalStartServiceError, n as isTerminationProtectionPropagationError, o as resolveExplicitPhysicalId, p as LocalMigrateError, r as CDK_PATH_TAG, s as assertRegionMatch, t as disableInstanceApiTermination, v as NestedStackChildDirectDestroyError, w as StackTerminationProtectionError, x as ResourceTimeoutError, y as PartialFailureError } from "./ec2-termination-protection-q-WGWgxa.js";
|
|
4
4
|
import { a as setAwsClients, i as resetAwsClients, r as getAwsClients, t as AwsClients } from "./aws-clients-B15NAPbL.js";
|
|
5
|
-
import { $ as getDockerCmd, A as DiffCalculator, B as buildAssetRedirectMap, C as findActionableSilentDrops, Ct as resolveBucketRegion, D as refStateLookupFromResource, E as cfnRefValueFromPhysicalId, F as rebuildClientForBucketRegion, G as BOOTSTRAP_MARKER_PREFIX, H as loadPublishableAssetManifest, I as shouldRetainResource, J as parseBootstrapMarker, K as ensureAssetStorage, L as AssetPublisher, M as TemplateParser, N as LockManager, O as WAFv2WebACLProvider, P as S3StateBackend, Q as formatDockerLoginError, R as stringifyValue, S as ProviderRegistry, T as IntrinsicFunctionResolver, U as rewriteTemplateAssetReferences, V as createAssetRedirectResolver, W as AssetModeResolver, X as validateContainerRepoName, Y as validateAssetBucketName, Z as buildDockerImage, _ as green, _t as CFN_TEMPLATE_URL_LIMIT, a as withRetry, at as synthesisStatusMessage, b as IAMRoleProvider, bt as uploadCfnTemplate, c as computeImplicitDeleteEdges, ct as resolveApp, d as isStatefulRecreateTargetSync, dt as resolveSkipPrefix, et as runDockerForeground, f as renderStatefulReason, ft as resolveStateBucketWithDefault, g as gray, gt as CFN_TEMPLATE_BODY_LIMIT, h as cyan, ht as warnDeprecatedNoPrefixCliFlag, i as withResourceDeadline, it as Synthesizer, j as DagBuilder, k as applyRoleArnIfSet, l as extractDeploymentEventError, lt as resolveAutoAssetStorage, m as bold, mt as resolveUseCdkBootstrapAssets, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as AssetManifestLoader, o as isRetryableTransientError, ot as getDefaultStateBucketName, p as formatResourceLine, pt as resolveStateBucketWithDefaultAndSource, q as getBootstrapMarkerKey, r as DeployEngine, rt as getDockerImageBySourceHash, s as IMPLICIT_DELETE_DEPENDENCIES, st as getLegacyStateBucketName, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as runDockerStreaming, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, ut as resolveCaptureObservedState, v as red, vt as MIGRATE_TMP_PREFIX, w as CloudControlProvider, x as collectInlinePolicyNamesManagedBySiblings, xt as AssemblyReader, y as yellow, yt as findLargeInlineResources, z as WorkGraph } from "./deploy-engine-
|
|
5
|
+
import { $ as getDockerCmd, A as DiffCalculator, B as buildAssetRedirectMap, C as findActionableSilentDrops, Ct as resolveBucketRegion, D as refStateLookupFromResource, E as cfnRefValueFromPhysicalId, F as rebuildClientForBucketRegion, G as BOOTSTRAP_MARKER_PREFIX, H as loadPublishableAssetManifest, I as shouldRetainResource, J as parseBootstrapMarker, K as ensureAssetStorage, L as AssetPublisher, M as TemplateParser, N as LockManager, O as WAFv2WebACLProvider, P as S3StateBackend, Q as formatDockerLoginError, R as stringifyValue, S as ProviderRegistry, T as IntrinsicFunctionResolver, U as rewriteTemplateAssetReferences, V as createAssetRedirectResolver, W as AssetModeResolver, X as validateContainerRepoName, Y as validateAssetBucketName, Z as buildDockerImage, _ as green, _t as CFN_TEMPLATE_URL_LIMIT, a as withRetry, at as synthesisStatusMessage, b as IAMRoleProvider, bt as uploadCfnTemplate, c as computeImplicitDeleteEdges, ct as resolveApp, d as isStatefulRecreateTargetSync, dt as resolveSkipPrefix, et as runDockerForeground, f as renderStatefulReason, ft as resolveStateBucketWithDefault, g as gray, gt as CFN_TEMPLATE_BODY_LIMIT, h as cyan, ht as warnDeprecatedNoPrefixCliFlag, i as withResourceDeadline, it as Synthesizer, j as DagBuilder, k as applyRoleArnIfSet, l as extractDeploymentEventError, lt as resolveAutoAssetStorage, m as bold, mt as resolveUseCdkBootstrapAssets, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as AssetManifestLoader, o as isRetryableTransientError, ot as getDefaultStateBucketName, p as formatResourceLine, pt as resolveStateBucketWithDefaultAndSource, q as getBootstrapMarkerKey, r as DeployEngine, rt as getDockerImageBySourceHash, s as IMPLICIT_DELETE_DEPENDENCIES, st as getLegacyStateBucketName, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as runDockerStreaming, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, ut as resolveCaptureObservedState, v as red, vt as MIGRATE_TMP_PREFIX, w as CloudControlProvider, x as collectInlinePolicyNamesManagedBySiblings, xt as AssemblyReader, y as yellow, yt as findLargeInlineResources, z as WorkGraph } from "./deploy-engine-_tADDg2k.js";
|
|
6
6
|
import { t as expectedOwnerParam } from "./expected-bucket-owner-BjEfUnkA.js";
|
|
7
7
|
import { t as ASGProvider } from "./asg-provider-Dbl1_mwT.js";
|
|
8
8
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
@@ -1885,7 +1885,7 @@ const FLUSH_INTERVAL_MS = 2e3;
|
|
|
1885
1885
|
const FLUSH_EVENT_THRESHOLD = 50;
|
|
1886
1886
|
/** Build-time cdkd version, with a dev fallback for non-built contexts. */
|
|
1887
1887
|
function getCdkdVersion() {
|
|
1888
|
-
return "0.238.
|
|
1888
|
+
return "0.238.5";
|
|
1889
1889
|
}
|
|
1890
1890
|
/**
|
|
1891
1891
|
* Generate a time-sortable unique run id, e.g.
|
|
@@ -47206,17 +47206,18 @@ function collectImportableResources(template) {
|
|
|
47206
47206
|
*/
|
|
47207
47207
|
function buildStackState(stackName, region, rows, templateParser, template, existingState, selectiveMode) {
|
|
47208
47208
|
const resources = selectiveMode && existingState ? { ...existingState.resources } : {};
|
|
47209
|
+
const parameterNames = new Set(Object.keys(template.Parameters ?? {}));
|
|
47209
47210
|
for (const row of rows) {
|
|
47210
47211
|
if (row.outcome !== "imported" || !row.physicalId) continue;
|
|
47211
47212
|
const tmplResource = template.Resources[row.logicalId];
|
|
47212
47213
|
if (!tmplResource) continue;
|
|
47213
|
-
const deps = templateParser.extractDependencies(tmplResource);
|
|
47214
|
+
const deps = [...templateParser.extractDependencies(tmplResource)].filter((dep) => !parameterNames.has(dep));
|
|
47214
47215
|
resources[row.logicalId] = {
|
|
47215
47216
|
physicalId: row.physicalId,
|
|
47216
47217
|
resourceType: row.resourceType,
|
|
47217
47218
|
properties: tmplResource.Properties ?? {},
|
|
47218
47219
|
attributes: {},
|
|
47219
|
-
dependencies:
|
|
47220
|
+
dependencies: deps,
|
|
47220
47221
|
provisionedBy: "sdk"
|
|
47221
47222
|
};
|
|
47222
47223
|
}
|
|
@@ -47704,6 +47705,72 @@ async function loadStateForStack(stackName, synthRegion, opts) {
|
|
|
47704
47705
|
}
|
|
47705
47706
|
}
|
|
47706
47707
|
/**
|
|
47708
|
+
* Best-effort read of the region's asset-storage bootstrap marker
|
|
47709
|
+
* (`s3://{stateBucket}/cdkd-bootstrap/{region}.json`) to recover the
|
|
47710
|
+
* cdkd-owned container-asset ECR repository name (issue #1025). Since
|
|
47711
|
+
* `cdkd bootstrap --container-repo <name>` (issue #1011) the repo can
|
|
47712
|
+
* carry ANY name, so the local resolvers' conventional-prefix regex
|
|
47713
|
+
* cannot classify images published to a custom-named repo — the marker
|
|
47714
|
+
* is the only source of truth.
|
|
47715
|
+
*
|
|
47716
|
+
* This is a fast-path optimization for `cdkd local run-task
|
|
47717
|
+
* --from-state` (recognizing a cdk-asset image enables the local
|
|
47718
|
+
* `cdk.out` docker build instead of an ECR pull), so it must NEVER fail
|
|
47719
|
+
* the run: every miss (no bucket, no marker, malformed marker, any AWS
|
|
47720
|
+
* error) logs at debug and returns `undefined` — the caller falls back
|
|
47721
|
+
* to the conventional-prefix regex.
|
|
47722
|
+
*
|
|
47723
|
+
* Marker-key region resolution: the marker records the repo for the
|
|
47724
|
+
* stack's DEPLOY region, so after the explicit CLI overrides (`--region`
|
|
47725
|
+
* highest per the repo convention, then `--stack-region` — the state
|
|
47726
|
+
* disambiguator that names the region whose state is being loaded) the
|
|
47727
|
+
* synth-derived stack region outranks the ambient env region. This
|
|
47728
|
+
* deliberately differs from {@link loadStateForStack}'s bucket-resolution
|
|
47729
|
+
* chain (which is about WHERE the state bucket is, not WHICH region's
|
|
47730
|
+
* data is read).
|
|
47731
|
+
*/
|
|
47732
|
+
async function loadBootstrapContainerRepo(synthRegion, opts) {
|
|
47733
|
+
const logger = getLogger();
|
|
47734
|
+
const prefix = opts.logPrefix ?? "--from-state";
|
|
47735
|
+
const region = opts.region ?? opts.stackRegion ?? synthRegion ?? process.env["AWS_REGION"] ?? process.env["AWS_DEFAULT_REGION"] ?? "us-east-1";
|
|
47736
|
+
let stateBucket;
|
|
47737
|
+
try {
|
|
47738
|
+
stateBucket = await resolveStateBucketWithDefault(opts.stateBucket, region);
|
|
47739
|
+
} catch (err) {
|
|
47740
|
+
logger.debug(`${prefix}: could not resolve state bucket for the bootstrap-marker read: ${err instanceof Error ? err.message : String(err)}. Falling back to conventional asset-repo names.`);
|
|
47741
|
+
return;
|
|
47742
|
+
}
|
|
47743
|
+
const awsClients = new AwsClients({
|
|
47744
|
+
...opts.region !== void 0 && { region: opts.region },
|
|
47745
|
+
...opts.profile !== void 0 && { profile: opts.profile }
|
|
47746
|
+
});
|
|
47747
|
+
setAwsClients(awsClients);
|
|
47748
|
+
try {
|
|
47749
|
+
const stateConfig = {
|
|
47750
|
+
bucket: stateBucket,
|
|
47751
|
+
prefix: opts.statePrefix
|
|
47752
|
+
};
|
|
47753
|
+
const stateBackend = new S3StateBackend(awsClients.s3, stateConfig, {
|
|
47754
|
+
...opts.region !== void 0 && { region: opts.region },
|
|
47755
|
+
...opts.profile !== void 0 && { profile: opts.profile }
|
|
47756
|
+
});
|
|
47757
|
+
const markerKey = getBootstrapMarkerKey(region);
|
|
47758
|
+
const body = await stateBackend.getRawObject(markerKey);
|
|
47759
|
+
if (body === null) {
|
|
47760
|
+
logger.debug(`${prefix}: no bootstrap marker at '${markerKey}' in bucket '${stateBucket}' — assuming conventional asset-repo names.`);
|
|
47761
|
+
return;
|
|
47762
|
+
}
|
|
47763
|
+
const marker = parseBootstrapMarker(body, markerKey);
|
|
47764
|
+
logger.debug(`${prefix}: bootstrap marker for ${region} names container repo '${marker.containerRepo}'.`);
|
|
47765
|
+
return marker.containerRepo;
|
|
47766
|
+
} catch (err) {
|
|
47767
|
+
logger.debug(`${prefix}: bootstrap-marker read failed: ${err instanceof Error ? err.message : String(err)}. Falling back to conventional asset-repo names.`);
|
|
47768
|
+
return;
|
|
47769
|
+
} finally {
|
|
47770
|
+
resetAwsClients();
|
|
47771
|
+
}
|
|
47772
|
+
}
|
|
47773
|
+
/**
|
|
47707
47774
|
* Build a {@link CrossStackResolver} that walks cdkd's S3 state to look
|
|
47708
47775
|
* up `Fn::ImportValue` / `Fn::GetStackOutput` references the same way
|
|
47709
47776
|
* `cdkd deploy`'s `IntrinsicFunctionResolver` does. Returns `undefined`
|
|
@@ -48430,6 +48497,7 @@ function detectEcsImageResolutionNeeds(stack) {
|
|
|
48430
48497
|
let needsStateResources = false;
|
|
48431
48498
|
let needsEnvOrSecretSubstitution = false;
|
|
48432
48499
|
let needsCrossStackResolver = false;
|
|
48500
|
+
let needsAssetRepoMarker = false;
|
|
48433
48501
|
for (const res of Object.values(resources)) {
|
|
48434
48502
|
if (res.Type !== "AWS::ECS::TaskDefinition") continue;
|
|
48435
48503
|
const props = res.Properties ?? {};
|
|
@@ -48441,6 +48509,8 @@ function detectEcsImageResolutionNeeds(stack) {
|
|
|
48441
48509
|
const need = inspectImageForSubstitutions(image, resources);
|
|
48442
48510
|
if (need.pseudo) needsPseudoParameters = true;
|
|
48443
48511
|
if (need.state) needsStateResources = true;
|
|
48512
|
+
const flat = extractImageString(image);
|
|
48513
|
+
if (flat !== void 0 && extractEcrRepoComponent(flat) !== void 0 && !CDK_ASSET_IMAGE_REPO_RE.test(flat)) needsAssetRepoMarker = true;
|
|
48444
48514
|
if (containerHasIntrinsicEnvOrSecret(co)) needsEnvOrSecretSubstitution = true;
|
|
48445
48515
|
if (containerHasCrossStackEnvOrSecret(co)) {
|
|
48446
48516
|
needsEnvOrSecretSubstitution = true;
|
|
@@ -48460,7 +48530,8 @@ function detectEcsImageResolutionNeeds(stack) {
|
|
|
48460
48530
|
needsPseudoParameters,
|
|
48461
48531
|
needsStateResources,
|
|
48462
48532
|
needsEnvOrSecretSubstitution,
|
|
48463
|
-
needsCrossStackResolver
|
|
48533
|
+
needsCrossStackResolver,
|
|
48534
|
+
needsAssetRepoMarker
|
|
48464
48535
|
};
|
|
48465
48536
|
}
|
|
48466
48537
|
/**
|
|
@@ -48936,11 +49007,53 @@ function buildSubstitutionContextFromImageContext(context) {
|
|
|
48936
49007
|
* `cdk.out` build, so both must classify as `kind: 'cdk-asset'`. The `cdk-`
|
|
48937
49008
|
* qualifier is generalized to `[a-z0-9]+` so a custom-qualifier bootstrap is
|
|
48938
49009
|
* matched too (previously only the hardcoded `hnb659fds` default was).
|
|
49010
|
+
*
|
|
49011
|
+
* Since `cdkd bootstrap --container-repo <name>` (issue #1011) the
|
|
49012
|
+
* cdkd-owned repo can carry ANY name — the per-region bootstrap marker is
|
|
49013
|
+
* the source of truth. The regex therefore cannot recognize images
|
|
49014
|
+
* published to a custom-named repo; `isCdkAssetImageUri` additionally
|
|
49015
|
+
* matches an ECR-hosted URI whose repository path component equals the
|
|
49016
|
+
* marker-resolved name when the caller supplies it (issue #1025). The
|
|
49017
|
+
* regex stays as the no-marker fallback — `cdkd local run-task` can run
|
|
49018
|
+
* without AWS access, where no marker read is possible.
|
|
48939
49019
|
*/
|
|
48940
49020
|
const CDK_ASSET_IMAGE_REPO_RE = /(?:cdk-[a-z0-9]+|cdkd)-container-assets-/;
|
|
48941
|
-
/**
|
|
48942
|
-
|
|
48943
|
-
|
|
49021
|
+
/**
|
|
49022
|
+
* Extract the repository path component of an ECR-hosted image URI.
|
|
49023
|
+
*
|
|
49024
|
+
* The host part (before the first `/`) must contain `.dkr.ecr.` — this
|
|
49025
|
+
* tolerates both concrete hosts (`123456789012.dkr.ecr.us-east-1.amazonaws.com`)
|
|
49026
|
+
* and placeholder-bearing hosts
|
|
49027
|
+
* (`${AWS::AccountId}.dkr.ecr.${AWS::Region}.${AWS::URLSuffix}`). The repo
|
|
49028
|
+
* component is the substring after the first `/`, stripped of a trailing
|
|
49029
|
+
* `@<digest>` (first `@`) and then a trailing `:<tag>` (last `:` — ECR
|
|
49030
|
+
* repo names cannot contain `:` but CAN contain `/`, so the last colon is
|
|
49031
|
+
* the tag separator). Stripping the digest FIRST handles the combined
|
|
49032
|
+
* `name:tag@digest` form Docker accepts. Returns `undefined` for non-ECR
|
|
49033
|
+
* hosts and empty results.
|
|
49034
|
+
*/
|
|
49035
|
+
function extractEcrRepoComponent(uri) {
|
|
49036
|
+
const slash = uri.indexOf("/");
|
|
49037
|
+
if (slash <= 0) return void 0;
|
|
49038
|
+
if (!uri.slice(0, slash).includes(".dkr.ecr.")) return void 0;
|
|
49039
|
+
let repo = uri.slice(slash + 1);
|
|
49040
|
+
const at = repo.indexOf("@");
|
|
49041
|
+
if (at !== -1) repo = repo.slice(0, at);
|
|
49042
|
+
const colon = repo.lastIndexOf(":");
|
|
49043
|
+
if (colon !== -1) repo = repo.slice(0, colon);
|
|
49044
|
+
return repo.length > 0 ? repo : void 0;
|
|
49045
|
+
}
|
|
49046
|
+
/**
|
|
49047
|
+
* True when `uri` embeds a CDK-bootstrap or cdkd-owned container-assets
|
|
49048
|
+
* repo — either via the conventional-name regex, or (issue #1025) via an
|
|
49049
|
+
* exact match between the URI's ECR repository path component and the
|
|
49050
|
+
* bootstrap-marker-resolved `cdkAssetContainerRepo` name, which covers
|
|
49051
|
+
* regions bootstrapped with `cdkd bootstrap --container-repo <name>`.
|
|
49052
|
+
*/
|
|
49053
|
+
function isCdkAssetImageUri(uri, cdkAssetContainerRepo) {
|
|
49054
|
+
if (CDK_ASSET_IMAGE_REPO_RE.test(uri)) return true;
|
|
49055
|
+
if (cdkAssetContainerRepo === void 0) return false;
|
|
49056
|
+
return extractEcrRepoComponent(uri) === cdkAssetContainerRepo;
|
|
48944
49057
|
}
|
|
48945
49058
|
/**
|
|
48946
49059
|
* Parse the `Image` field of an ECS container definition.
|
|
@@ -48975,14 +49088,14 @@ function isCdkAssetImageUri(uri) {
|
|
|
48975
49088
|
*/
|
|
48976
49089
|
function parseContainerImage(raw, containerName, taskLogicalId, resources, _stack, context) {
|
|
48977
49090
|
const getAttImage = tryResolveImageGetAtt(raw, resources, context);
|
|
48978
|
-
if (getAttImage) return classifyResolvedImage(getAttImage);
|
|
49091
|
+
if (getAttImage) return classifyResolvedImage(getAttImage, context?.cdkAssetContainerRepo);
|
|
48979
49092
|
const joinResolved = tryResolveImageFnJoin(raw, resources, context);
|
|
48980
|
-
if (joinResolved.kind === "resolved") return classifyResolvedImage(joinResolved.uri);
|
|
49093
|
+
if (joinResolved.kind === "resolved") return classifyResolvedImage(joinResolved.uri, context?.cdkAssetContainerRepo);
|
|
48981
49094
|
if (joinResolved.kind === "needs-state") throw new EcsTaskResolutionError(`Container '${containerName}' in task '${taskLogicalId}' references same-stack ECR repository '${joinResolved.repoLogicalId}' via Fn::Join. cdkd local run-task cannot resolve the repository URI without state — pass --from-state (the stack must have been deployed via cdkd deploy), build via ContainerImage.fromAsset, or pin a public image.`);
|
|
48982
49095
|
if (joinResolved.kind === "unsupported-join") throw new EcsTaskResolutionError(`Container '${containerName}' in task '${taskLogicalId}' has an unsupported Fn::Join Image shape: ${joinResolved.reason}. cdkd local run-task recognizes the canonical CDK 2.x ContainerImage.fromEcrRepository Fn::Join shape (delimiter "" with nested Fn::Select/Fn::Split over an ECR Repository Arn GetAtt + Ref to the repo).`);
|
|
48983
49096
|
const flat = extractImageString(raw);
|
|
48984
49097
|
if (!flat) throw new EcsTaskResolutionError(`Container '${containerName}' in task '${taskLogicalId}' has an unparseable Image property. cdkd local run-task v1 supports flat string images, single-key Fn::Sub bodies, and CDK-asset Image references.`);
|
|
48985
|
-
if (isCdkAssetImageUri(flat)) {
|
|
49098
|
+
if (isCdkAssetImageUri(flat, context?.cdkAssetContainerRepo)) {
|
|
48986
49099
|
const hashMatch = /:([a-f0-9]{8,})$/.exec(flat);
|
|
48987
49100
|
const out = { kind: "cdk-asset" };
|
|
48988
49101
|
if (hashMatch) out.assetHash = hashMatch[1];
|
|
@@ -49028,9 +49141,11 @@ function findUnresolvedEcrRepositoryRef(substituted, resources) {
|
|
|
49028
49141
|
* Classify a fully-substituted image URI (Tier 1 / Tier 2 produced a
|
|
49029
49142
|
* concrete string) into the `ResolvedEcsImage` shape. Splits out so the
|
|
49030
49143
|
* `Fn::GetAtt` path can share the regex-match branches.
|
|
49144
|
+
* `cdkAssetContainerRepo` is the optional marker-resolved custom repo
|
|
49145
|
+
* name (issue #1025) threaded through from the resolution context.
|
|
49031
49146
|
*/
|
|
49032
|
-
function classifyResolvedImage(uri) {
|
|
49033
|
-
if (isCdkAssetImageUri(uri)) {
|
|
49147
|
+
function classifyResolvedImage(uri, cdkAssetContainerRepo) {
|
|
49148
|
+
if (isCdkAssetImageUri(uri, cdkAssetContainerRepo)) {
|
|
49034
49149
|
const hashMatch = /:([a-f0-9]{8,})$/.exec(uri);
|
|
49035
49150
|
const out = { kind: "cdk-asset" };
|
|
49036
49151
|
if (hashMatch) out.assetHash = hashMatch[1];
|
|
@@ -53487,7 +53602,7 @@ async function buildEcsImageResolutionContext$1(candidate, stateProvider, option
|
|
|
53487
53602
|
const logger = getLogger();
|
|
53488
53603
|
if (!candidate) return void 0;
|
|
53489
53604
|
const needs = detectEcsImageResolutionNeeds(candidate);
|
|
53490
|
-
if (!needs.needsPseudoParameters && !needs.needsStateResources && !needs.needsEnvOrSecretSubstitution) return;
|
|
53605
|
+
if (!needs.needsPseudoParameters && !needs.needsStateResources && !needs.needsEnvOrSecretSubstitution && !needs.needsAssetRepoMarker) return;
|
|
53491
53606
|
const ctx = {};
|
|
53492
53607
|
const wantsPseudoForEnvOrSecret = !!stateProvider && needs.needsEnvOrSecretSubstitution;
|
|
53493
53608
|
if (needs.needsPseudoParameters || wantsPseudoForEnvOrSecret) {
|
|
@@ -53515,6 +53630,17 @@ async function buildEcsImageResolutionContext$1(candidate, stateProvider, option
|
|
|
53515
53630
|
if (loaded) ctx.stateResources = loaded.resources;
|
|
53516
53631
|
} else if (!stateProvider && needs.needsStateResources) logger.warn("Container Image references a same-stack AWS::ECR::Repository. Pass --from-state (cdkd-deployed) or --from-cfn-stack (cdk-deployed) to substitute the deployed repository URI. Otherwise the resolver will surface its existing error.");
|
|
53517
53632
|
else if (!stateProvider && needs.needsEnvOrSecretSubstitution) logger.warn("Container Environment / Secrets entries contain CloudFormation intrinsics (Ref / Fn::GetAtt / Fn::Sub / Fn::Join). Pass --from-state (cdkd-deployed) or --from-cfn-stack (cdk-deployed) to substitute them against deployed state. Without a state source these entries are dropped (per-key warnings will follow).");
|
|
53633
|
+
if (needs.needsAssetRepoMarker && options.fromState) {
|
|
53634
|
+
const containerRepo = await loadBootstrapContainerRepo(candidate.region, {
|
|
53635
|
+
statePrefix: options.statePrefix,
|
|
53636
|
+
...options.stackRegion !== void 0 && { stackRegion: options.stackRegion },
|
|
53637
|
+
...options.stateBucket !== void 0 && { stateBucket: options.stateBucket },
|
|
53638
|
+
...options.region !== void 0 && { region: options.region },
|
|
53639
|
+
...options.profile !== void 0 && { profile: options.profile },
|
|
53640
|
+
logPrefix: "--from-state"
|
|
53641
|
+
});
|
|
53642
|
+
if (containerRepo !== void 0) ctx.cdkAssetContainerRepo = containerRepo;
|
|
53643
|
+
}
|
|
53518
53644
|
return ctx;
|
|
53519
53645
|
}
|
|
53520
53646
|
function pickCandidateStack(stackPattern, stacks) {
|
|
@@ -57057,7 +57183,7 @@ function reorderArgs(argv) {
|
|
|
57057
57183
|
async function main() {
|
|
57058
57184
|
installPipeCloseHandler();
|
|
57059
57185
|
const program = new Command();
|
|
57060
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.238.
|
|
57186
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.238.5");
|
|
57061
57187
|
program.addCommand(createBootstrapCommand());
|
|
57062
57188
|
program.addCommand(createSynthCommand());
|
|
57063
57189
|
program.addCommand(createListCommand());
|