@go-to-k/cdkd 0.270.0 → 0.271.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/README.md +16 -10
- package/dist/{asg-provider-D3Ioxi3j.js → asg-provider-CpHXw10b.js} +2 -2
- package/dist/{asg-provider-D3Ioxi3j.js.map → asg-provider-CpHXw10b.js.map} +1 -1
- package/dist/cli.js +105 -63
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-D3tkYlnl.js → deploy-engine-DlTH1ou6.js} +3 -3
- package/dist/{deploy-engine-D3tkYlnl.js.map → deploy-engine-DlTH1ou6.js.map} +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as WorkGraph, A as slowCcOperationTimeoutMs, At as warnDeprecatedNoPrefixCliFlag, B as applyRoleArnIfSet, Bt as resolveBucketRegion, C as yellow, Ct as resolveAutoAssetStorage, D as ProviderRegistry, Dt as resolveStateBucketWithDefaultAndSource, E as clearOnUpdateRemoval, Et as resolveStateBucketWithDefault, F as refStateLookupFromResource, Ft as uploadCfnTemplate, G as DagBuilder, H as describeTypeWithThrottleRetry, Ht as getAwsClients, I as WAFv2WebACLProvider, It as expectedOwnerParam, J as S3StateBackend, K as TemplateParser, Kt as CdkdError, L as normalizeAwsTagsToCfn, Lt as AssemblyReader, M as isTerminationProtectionPropagationError, Mt as CFN_TEMPLATE_URL_LIMIT, N as IntrinsicFunctionResolver, Nt as MIGRATE_TMP_PREFIX, O as findActionableSilentDrops, Ot as resolveUseCdkBootstrapAssets, P as cfnRefValueFromPhysicalId, Pt as findLargeInlineResources, Q as stringifyValue, Qt as LocalStartServiceError, R as resolveExplicitPhysicalId, Rt as processStackMessages, S as red, St as resolveApp, T as collectInlinePolicyNamesManagedBySiblings, Tt as resolveSkipPrefix, U as withRetry, Ut as resetAwsClients, V as DiffCalculator, Vt as AwsClients, W as isRetryableTransientError, Wt as setAwsClients, X as shouldRetainResource, Xt as LocalInvokeBuildError$1, Y as rebuildClientForBucketRegion, Yt as DeployCancelledError, Z as AssetPublisher, Zt as LocalMigrateError, _ as formatResourceLine, _t as getDockerImageBySourceHash, a as DeploymentEventsStore, an as ResourceUpdateNotSupportedError, at as BOOTSTRAP_MARKER_PREFIX, b as gray, bt as getDefaultStateBucketName, c as replayFailedOperations, ct as parseBootstrapMarker, d as IMPLICIT_DELETE_DEPENDENCIES, dt as buildDockerImage, en as MissingCdkCliError, et as buildAssetRedirectMap, f as computeImplicitDeleteEdges, fn as normalizeAwsError, ft as formatDockerLoginError, g as renderStatefulReason, gt as AssetManifestLoader, h as isStatefulRecreateTargetSync, ht as runDockerStreaming, i as DeploymentEventsReader, in as ResourceTimeoutError, it as AssetModeResolver, j as disableInstanceApiTermination, jt as CFN_TEMPLATE_BODY_LIMIT, k as CloudControlProvider, kt as stateBucketExistenceConfirmed, l as replayRollback, lt as validateAssetBucketName, m as MULTI_REGION_RECREATE_BLOCKED_TYPES, mt as runDockerForeground, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as PartialFailureError, nt as loadPublishableAssetManifest, o as planFailedOps, on as StackHasActiveImportsError, ot as ensureAssetStorage, p as extractDeploymentEventError, pn as withErrorHandling, pt as getDockerCmd, q as LockManager, r as DeployEngine, rn as ProvisioningError, rt as rewriteTemplateAssetReferences, s as planRollback, sn as StackTerminationProtectionError, st as getBootstrapMarkerKey, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as NestedStackChildDirectDestroyError, tt as createAssetRedirectResolver, u as withResourceDeadline, ut as validateContainerRepoName, v as bold, vt as Synthesizer, w as IAMRoleProvider, wt as resolveCaptureObservedState, x as green, xt as getLegacyStateBucketName, y as cyan, yt as synthesisStatusMessage, z as assertRegionMatch } from "./deploy-engine-
|
|
2
|
+
import { $ as WorkGraph, A as slowCcOperationTimeoutMs, At as warnDeprecatedNoPrefixCliFlag, B as applyRoleArnIfSet, Bt as resolveBucketRegion, C as yellow, Ct as resolveAutoAssetStorage, D as ProviderRegistry, Dt as resolveStateBucketWithDefaultAndSource, E as clearOnUpdateRemoval, Et as resolveStateBucketWithDefault, F as refStateLookupFromResource, Ft as uploadCfnTemplate, G as DagBuilder, H as describeTypeWithThrottleRetry, Ht as getAwsClients, I as WAFv2WebACLProvider, It as expectedOwnerParam, J as S3StateBackend, K as TemplateParser, Kt as CdkdError, L as normalizeAwsTagsToCfn, Lt as AssemblyReader, M as isTerminationProtectionPropagationError, Mt as CFN_TEMPLATE_URL_LIMIT, N as IntrinsicFunctionResolver, Nt as MIGRATE_TMP_PREFIX, O as findActionableSilentDrops, Ot as resolveUseCdkBootstrapAssets, P as cfnRefValueFromPhysicalId, Pt as findLargeInlineResources, Q as stringifyValue, Qt as LocalStartServiceError, R as resolveExplicitPhysicalId, Rt as processStackMessages, S as red, St as resolveApp, T as collectInlinePolicyNamesManagedBySiblings, Tt as resolveSkipPrefix, U as withRetry, Ut as resetAwsClients, V as DiffCalculator, Vt as AwsClients, W as isRetryableTransientError, Wt as setAwsClients, X as shouldRetainResource, Xt as LocalInvokeBuildError$1, Y as rebuildClientForBucketRegion, Yt as DeployCancelledError, Z as AssetPublisher, Zt as LocalMigrateError, _ as formatResourceLine, _t as getDockerImageBySourceHash, a as DeploymentEventsStore, an as ResourceUpdateNotSupportedError, at as BOOTSTRAP_MARKER_PREFIX, b as gray, bt as getDefaultStateBucketName, c as replayFailedOperations, ct as parseBootstrapMarker, d as IMPLICIT_DELETE_DEPENDENCIES, dt as buildDockerImage, en as MissingCdkCliError, et as buildAssetRedirectMap, f as computeImplicitDeleteEdges, fn as normalizeAwsError, ft as formatDockerLoginError, g as renderStatefulReason, gt as AssetManifestLoader, h as isStatefulRecreateTargetSync, ht as runDockerStreaming, i as DeploymentEventsReader, in as ResourceTimeoutError, it as AssetModeResolver, j as disableInstanceApiTermination, jt as CFN_TEMPLATE_BODY_LIMIT, k as CloudControlProvider, kt as stateBucketExistenceConfirmed, l as replayRollback, lt as validateAssetBucketName, m as MULTI_REGION_RECREATE_BLOCKED_TYPES, mt as runDockerForeground, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as PartialFailureError, nt as loadPublishableAssetManifest, o as planFailedOps, on as StackHasActiveImportsError, ot as ensureAssetStorage, p as extractDeploymentEventError, pn as withErrorHandling, pt as getDockerCmd, q as LockManager, r as DeployEngine, rn as ProvisioningError, rt as rewriteTemplateAssetReferences, s as planRollback, sn as StackTerminationProtectionError, st as getBootstrapMarkerKey, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as NestedStackChildDirectDestroyError, tt as createAssetRedirectResolver, u as withResourceDeadline, ut as validateContainerRepoName, v as bold, vt as Synthesizer, w as IAMRoleProvider, wt as resolveCaptureObservedState, x as green, xt as getLegacyStateBucketName, y as cyan, yt as synthesisStatusMessage, z as assertRegionMatch } from "./deploy-engine-DlTH1ou6.js";
|
|
3
3
|
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-BYMEE-BS.js";
|
|
4
|
-
import { t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as ASGProvider } from "./asg-provider-CpHXw10b.js";
|
|
5
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
6
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
7
7
|
import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -347,32 +347,41 @@ function ensureWarnAfter(opts) {
|
|
|
347
347
|
return opts.resourceWarnAfter;
|
|
348
348
|
}
|
|
349
349
|
/**
|
|
350
|
-
* Skip waiting for async-stabilization resources (
|
|
351
|
-
*
|
|
352
|
-
*
|
|
350
|
+
* Skip waiting for async-stabilization resources (RDS, ElastiCache,
|
|
351
|
+
* NAT Gateway, EC2 Instance, ELBv2 LoadBalancer, Lambda MicroVM Image)
|
|
352
|
+
* on deploy. Setting the flag mutates
|
|
353
353
|
* `process.env.CDKD_NO_WAIT='true'`; provider code checks that env
|
|
354
354
|
* var, not the parsed CLI option (this lets nested call paths — e.g.
|
|
355
355
|
* asset publish, lifecycle hooks — see the same setting without
|
|
356
356
|
* threading the flag through every function signature).
|
|
357
357
|
*
|
|
358
|
+
* CloudFront Distribution left this list with issue #1282: its
|
|
359
|
+
* `Deployed` wait is skipped by DEFAULT now, so under `--no-wait` it
|
|
360
|
+
* simply behaves the same as the default (`--full-wait` opts back in).
|
|
361
|
+
*
|
|
358
362
|
* Deploy-only. NAT Gateway destroy always waits regardless (a
|
|
359
363
|
* still-`deleting` gateway blocks downstream Subnet / IGW / VPC
|
|
360
|
-
* delete with DependencyViolation),
|
|
361
|
-
*
|
|
362
|
-
*
|
|
364
|
+
* delete with DependencyViolation), RDS / ElastiCache destroy paths
|
|
365
|
+
* don't wait to begin with, and CloudFront's destroy-side
|
|
366
|
+
* disable-then-wait is an API requirement no flag may skip — so
|
|
367
|
+
* `destroy --no-wait` would be a no-op flag.
|
|
363
368
|
*/
|
|
364
|
-
const noWaitOption = new Option("--no-wait", "Skip waiting for async resources to stabilize (
|
|
369
|
+
const noWaitOption = new Option("--no-wait", "Skip waiting for async resources to stabilize (RDS, ElastiCache, NAT Gateway, EC2 Instance, ELBv2 LoadBalancer, Lambda MicroVM Image)");
|
|
365
370
|
/**
|
|
366
|
-
* Opt in to the stabilization waits cdkd deliberately SKIPS by default
|
|
367
|
-
*
|
|
368
|
-
*
|
|
371
|
+
* Opt in to the stabilization waits cdkd deliberately SKIPS by default.
|
|
372
|
+
* Today that is ECS Service steady state (create and update; a
|
|
373
|
+
* "CloudFormation waits, Terraform does not" disagree-case) and
|
|
374
|
+
* CloudFront Distribution `Deployed` (create and update; both engines
|
|
375
|
+
* wait, but the wait has no in-deploy consumer and no failure signal —
|
|
376
|
+
* the fast-side clause, issue #1282).
|
|
369
377
|
*
|
|
370
378
|
* `--no-wait`, the default, and `--full-wait` are three points on one
|
|
371
379
|
* axis, from least to most waiting:
|
|
372
380
|
*
|
|
373
381
|
* - `--no-wait` skip the stabilization waits cdkd performs by default
|
|
374
|
-
* - (default) wait where
|
|
375
|
-
*
|
|
382
|
+
* - (default) wait where the wait is load-bearing (in-deploy
|
|
383
|
+
* consumers / failure detection)
|
|
384
|
+
* - `--full-wait` also wait everywhere CloudFormation waits
|
|
376
385
|
*
|
|
377
386
|
* Which one is right depends on whether anything downstream needs the
|
|
378
387
|
* resource to actually be serving, NOT on where the deploy runs: cutting
|
|
@@ -390,7 +399,7 @@ const noWaitOption = new Option("--no-wait", "Skip waiting for async resources t
|
|
|
390
399
|
*
|
|
391
400
|
* Deploy-only, like `--no-wait`.
|
|
392
401
|
*/
|
|
393
|
-
const fullWaitOption = new Option("--full-wait", "Also wait for stabilizations cdkd skips by default, matching CloudFormation (ECS Service steady state)");
|
|
402
|
+
const fullWaitOption = new Option("--full-wait", "Also wait for stabilizations cdkd skips by default, matching CloudFormation (ECS Service steady state, CloudFront Distribution Deployed)");
|
|
394
403
|
/**
|
|
395
404
|
* Reject `--no-wait --full-wait`. They sit at opposite ends of one axis,
|
|
396
405
|
* so a combination has no coherent meaning: the user is asking to both
|
|
@@ -20604,6 +20613,32 @@ var CloudFrontOACProvider = class {
|
|
|
20604
20613
|
}
|
|
20605
20614
|
};
|
|
20606
20615
|
|
|
20616
|
+
//#endregion
|
|
20617
|
+
//#region src/provisioning/resource-timeout-registry.ts
|
|
20618
|
+
let resolved;
|
|
20619
|
+
/**
|
|
20620
|
+
* Seed the registry with the validated `--resource-timeout` input. Call once
|
|
20621
|
+
* per CLI invocation, right after `validateResourceTimeouts`. Passing
|
|
20622
|
+
* `undefined` (flag not supplied) clears the registry, so consumers fall back
|
|
20623
|
+
* to their own compile-time floors.
|
|
20624
|
+
*/
|
|
20625
|
+
function setResolvedResourceTimeouts(opt) {
|
|
20626
|
+
resolved = opt;
|
|
20627
|
+
}
|
|
20628
|
+
/**
|
|
20629
|
+
* The user's resolved timeout for `resourceType` in milliseconds, or
|
|
20630
|
+
* `undefined` when the user supplied nothing applicable. Resolution matches
|
|
20631
|
+
* the outer-deadline sites: per-type override wins, else the explicit global
|
|
20632
|
+
* value. The compile-time default (`DEFAULT_RESOURCE_TIMEOUT_MS`) is
|
|
20633
|
+
* deliberately NOT applied here — an inner waiter's own floor (e.g. ECS 600s)
|
|
20634
|
+
* must only be raised by an EXPLICIT user value, never by the generic 30m
|
|
20635
|
+
* default silently multiplying every `--full-wait` failure by 3x.
|
|
20636
|
+
*/
|
|
20637
|
+
function resolvedResourceTimeoutMs(resourceType) {
|
|
20638
|
+
if (!resolved) return void 0;
|
|
20639
|
+
return resolved.perTypeMs?.[resourceType] ?? resolved.globalMs;
|
|
20640
|
+
}
|
|
20641
|
+
|
|
20607
20642
|
//#endregion
|
|
20608
20643
|
//#region src/provisioning/providers/cloudfront-distribution-provider.ts
|
|
20609
20644
|
/**
|
|
@@ -20676,10 +20711,7 @@ var CloudFrontDistributionProvider = class {
|
|
|
20676
20711
|
const distributionId = distribution.Id;
|
|
20677
20712
|
const domainName = distribution.DomainName;
|
|
20678
20713
|
this.logger.debug(`Created CloudFront Distribution: ${distributionId} (${domainName})`);
|
|
20679
|
-
|
|
20680
|
-
this.logger.debug(`Waiting for Distribution ${distributionId} to reach Deployed status...`);
|
|
20681
|
-
await this.waitForDistributionStable(distributionId);
|
|
20682
|
-
}
|
|
20714
|
+
await this.settleDistribution(logicalId, distributionId);
|
|
20683
20715
|
return {
|
|
20684
20716
|
physicalId: distributionId,
|
|
20685
20717
|
attributes: {
|
|
@@ -20719,6 +20751,7 @@ var CloudFrontDistributionProvider = class {
|
|
|
20719
20751
|
const domainName = getResponse.Distribution?.DomainName ?? "";
|
|
20720
20752
|
const arn = getResponse.Distribution?.ARN;
|
|
20721
20753
|
await this.applyTagDiff(arn, previousProperties["Tags"], properties["Tags"], physicalId, logicalId, resourceType);
|
|
20754
|
+
await this.settleDistribution(logicalId, physicalId);
|
|
20722
20755
|
this.logger.debug(`Updated CloudFront Distribution ${physicalId}`);
|
|
20723
20756
|
return {
|
|
20724
20757
|
physicalId,
|
|
@@ -20769,7 +20802,7 @@ var CloudFrontDistributionProvider = class {
|
|
|
20769
20802
|
IfMatch: etag,
|
|
20770
20803
|
DistributionConfig: config
|
|
20771
20804
|
}))).ETag;
|
|
20772
|
-
await this.waitForDistributionStable(physicalId, false);
|
|
20805
|
+
if (!await this.waitForDistributionStable(physicalId, false)) this.logger.warn(`Distribution ${physicalId} disable did not settle (Deployed + disabled) within the wait budget; attempting delete anyway. If it fails with DistributionNotDisabled, retry the destroy or raise the budget with --resource-timeout AWS::CloudFront::Distribution=<duration>.`);
|
|
20773
20806
|
etag = (await this.cloudFrontClient.send(new GetDistributionConfigCommand({ Id: physicalId }))).ETag;
|
|
20774
20807
|
}
|
|
20775
20808
|
await this.cloudFrontClient.send(new DeleteDistributionCommand({
|
|
@@ -20869,17 +20902,39 @@ var CloudFrontDistributionProvider = class {
|
|
|
20869
20902
|
throw new Error(`Unsupported attribute: ${attributeName} for AWS::CloudFront::Distribution`);
|
|
20870
20903
|
}
|
|
20871
20904
|
/**
|
|
20872
|
-
*
|
|
20905
|
+
* Settle a CloudFront Distribution according to the run's wait mode.
|
|
20873
20906
|
*
|
|
20874
|
-
*
|
|
20875
|
-
*
|
|
20876
|
-
* this
|
|
20877
|
-
*
|
|
20907
|
+
* cdkd does NOT wait for `Deployed` by default (issue #1282). Both
|
|
20908
|
+
* CloudFormation and Terraform (`wait_for_deployment`, default `true`) wait
|
|
20909
|
+
* here, so this is a deliberate divergence under the wait-semantics policy's
|
|
20910
|
+
* fast-side clause: every `Fn::GetAtt` (Id / DomainName) is final in the
|
|
20911
|
+
* Create/Update response so nothing in-deploy consumes `Deployed`, the wait
|
|
20912
|
+
* carries no failure signal (a distribution deploy cannot fail — a long
|
|
20913
|
+
* wait means slow edge propagation, not brokenness), and Terraform's
|
|
20914
|
+
* `wait_for_deployment` toggle keeps the benchmark comparison measurable in
|
|
20915
|
+
* both modes. `--full-wait` opts back into the CloudFormation behavior.
|
|
20916
|
+
*/
|
|
20917
|
+
async settleDistribution(logicalId, distributionId) {
|
|
20918
|
+
if (process.env["CDKD_FULL_WAIT"] === "true") {
|
|
20919
|
+
this.logger.debug(`Waiting for Distribution ${distributionId} to reach Deployed status...`);
|
|
20920
|
+
if (!await this.waitForDistributionStable(distributionId)) this.logger.warn(`CloudFront Distribution ${logicalId} (${distributionId}) did not reach Deployed within the wait budget; continuing (propagation finishes in the background). To wait manually: aws cloudfront wait distribution-deployed --id ${distributionId}. Raise the budget with --resource-timeout AWS::CloudFront::Distribution=<duration>.`);
|
|
20921
|
+
return;
|
|
20922
|
+
}
|
|
20923
|
+
const fullWaitHint = process.env["CDKD_WAIT_FLAGS_AVAILABLE"] === "true" ? "; pass --full-wait to wait" : "";
|
|
20924
|
+
this.logger.info(`CloudFront Distribution ${logicalId} accepted (not waiting for Deployed${fullWaitHint}). To wait manually: aws cloudfront wait distribution-deployed --id ${distributionId}`);
|
|
20925
|
+
}
|
|
20926
|
+
/**
|
|
20927
|
+
* Poll until the distribution reports `Status: Deployed` (and, when
|
|
20928
|
+
* `expectedEnabled` is given, the matching `Enabled` value — the delete
|
|
20929
|
+
* path's disable-then-delete requirement).
|
|
20878
20930
|
*
|
|
20879
|
-
*
|
|
20931
|
+
* Returns `true` when the stable state was observed (or the wait was
|
|
20932
|
+
* interrupted by SIGINT — the caller is shutting down, so no timeout
|
|
20933
|
+
* warning applies), `false` on budget exhaustion.
|
|
20880
20934
|
*/
|
|
20881
20935
|
async waitForDistributionStable(distributionId, expectedEnabled) {
|
|
20882
|
-
const
|
|
20936
|
+
const budgetMs = Math.max(1200 * 1e3, resolvedResourceTimeoutMs("AWS::CloudFront::Distribution") ?? 0);
|
|
20937
|
+
const deadline = Date.now() + budgetMs;
|
|
20883
20938
|
let delay = 5e3;
|
|
20884
20939
|
const maxDelay = 1e4;
|
|
20885
20940
|
let interrupted = false;
|
|
@@ -20888,24 +20943,37 @@ var CloudFrontDistributionProvider = class {
|
|
|
20888
20943
|
};
|
|
20889
20944
|
process.on("SIGINT", sigintHandler);
|
|
20890
20945
|
try {
|
|
20891
|
-
|
|
20946
|
+
while (Date.now() < deadline) {
|
|
20892
20947
|
if (interrupted) {
|
|
20893
20948
|
this.logger.debug(`Distribution ${distributionId} wait interrupted by SIGINT, proceeding`);
|
|
20894
|
-
return;
|
|
20949
|
+
return true;
|
|
20895
20950
|
}
|
|
20896
|
-
|
|
20897
|
-
|
|
20898
|
-
|
|
20899
|
-
|
|
20900
|
-
|
|
20901
|
-
|
|
20951
|
+
let response;
|
|
20952
|
+
try {
|
|
20953
|
+
response = await this.cloudFrontClient.send(new GetDistributionCommand({ Id: distributionId }));
|
|
20954
|
+
} catch (error) {
|
|
20955
|
+
if (error instanceof NoSuchDistribution) throw error;
|
|
20956
|
+
this.logger.debug(`Distribution ${distributionId} status read failed (${error instanceof Error ? error.message : String(error)}); retrying`);
|
|
20957
|
+
}
|
|
20958
|
+
if (response) {
|
|
20959
|
+
const status = response.Distribution?.Status;
|
|
20960
|
+
const enabled = response.Distribution?.DistributionConfig?.Enabled;
|
|
20961
|
+
if (status === "Deployed" && (expectedEnabled === void 0 || enabled === expectedEnabled)) {
|
|
20962
|
+
this.logger.debug(`Distribution ${distributionId} is stable (Status=Deployed, Enabled=${enabled})`);
|
|
20963
|
+
return true;
|
|
20964
|
+
}
|
|
20965
|
+
this.logger.debug(`Distribution ${distributionId} status: ${status}, enabled: ${enabled}` + (expectedEnabled === void 0 ? "" : ` (waiting for Enabled=${expectedEnabled})`));
|
|
20902
20966
|
}
|
|
20903
|
-
this.logger.debug(`Distribution ${distributionId} status: ${status}, enabled: ${enabled}` + (expectedEnabled === void 0 ? "" : ` (waiting for Enabled=${expectedEnabled})`) + ` (attempt ${attempt}/${maxAttempts})`);
|
|
20904
20967
|
const sleepEnd = Date.now() + delay;
|
|
20905
20968
|
while (Date.now() < sleepEnd && !interrupted) await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
20906
20969
|
delay = Math.min(delay * 1.5, maxDelay);
|
|
20907
20970
|
}
|
|
20971
|
+
if (interrupted) {
|
|
20972
|
+
this.logger.debug(`Distribution ${distributionId} wait interrupted by SIGINT, proceeding`);
|
|
20973
|
+
return true;
|
|
20974
|
+
}
|
|
20908
20975
|
this.logger.debug(`Distribution ${distributionId} did not reach stable state within timeout, proceeding with next step`);
|
|
20976
|
+
return false;
|
|
20909
20977
|
} finally {
|
|
20910
20978
|
process.removeListener("SIGINT", sigintHandler);
|
|
20911
20979
|
}
|
|
@@ -22531,32 +22599,6 @@ function wasMeaningfullyConfigured(value, discriminatorKey) {
|
|
|
22531
22599
|
return value[discriminatorKey] !== void 0;
|
|
22532
22600
|
}
|
|
22533
22601
|
|
|
22534
|
-
//#endregion
|
|
22535
|
-
//#region src/provisioning/resource-timeout-registry.ts
|
|
22536
|
-
let resolved;
|
|
22537
|
-
/**
|
|
22538
|
-
* Seed the registry with the validated `--resource-timeout` input. Call once
|
|
22539
|
-
* per CLI invocation, right after `validateResourceTimeouts`. Passing
|
|
22540
|
-
* `undefined` (flag not supplied) clears the registry, so consumers fall back
|
|
22541
|
-
* to their own compile-time floors.
|
|
22542
|
-
*/
|
|
22543
|
-
function setResolvedResourceTimeouts(opt) {
|
|
22544
|
-
resolved = opt;
|
|
22545
|
-
}
|
|
22546
|
-
/**
|
|
22547
|
-
* The user's resolved timeout for `resourceType` in milliseconds, or
|
|
22548
|
-
* `undefined` when the user supplied nothing applicable. Resolution matches
|
|
22549
|
-
* the outer-deadline sites: per-type override wins, else the explicit global
|
|
22550
|
-
* value. The compile-time default (`DEFAULT_RESOURCE_TIMEOUT_MS`) is
|
|
22551
|
-
* deliberately NOT applied here — an inner waiter's own floor (e.g. ECS 600s)
|
|
22552
|
-
* must only be raised by an EXPLICIT user value, never by the generic 30m
|
|
22553
|
-
* default silently multiplying every `--full-wait` failure by 3x.
|
|
22554
|
-
*/
|
|
22555
|
-
function resolvedResourceTimeoutMs(resourceType) {
|
|
22556
|
-
if (!resolved) return void 0;
|
|
22557
|
-
return resolved.perTypeMs?.[resourceType] ?? resolved.globalMs;
|
|
22558
|
-
}
|
|
22559
|
-
|
|
22560
22602
|
//#endregion
|
|
22561
22603
|
//#region src/provisioning/providers/ecs-provider.ts
|
|
22562
22604
|
/**
|
|
@@ -63162,7 +63204,7 @@ function createMigrateCommand() {
|
|
|
63162
63204
|
*/
|
|
63163
63205
|
function buildProgram() {
|
|
63164
63206
|
const program = new Command();
|
|
63165
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.
|
|
63207
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.271.0");
|
|
63166
63208
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
63167
63209
|
const { profile } = actionCommand.optsWithGlobals();
|
|
63168
63210
|
if (profile !== void 0) process.env["AWS_PROFILE"] = profile;
|