sst 2.15.0 → 2.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdk/deploy-stack.d.ts +2 -1
- package/cdk/deploy-stack.js +15 -4
- package/cdk/{cloudformation-deployments-wrapper.d.ts → deployments-wrapper.d.ts} +1 -1
- package/cdk/{cloudformation-deployments-wrapper.js → deployments-wrapper.js} +25 -8
- package/cdk/{cloudformation-deployments.d.ts → deployments.d.ts} +76 -44
- package/cdk/deployments.js +362 -0
- package/cli/commands/dev.js +2 -0
- package/constructs/App.d.ts +2 -2
- package/constructs/App.js +2 -2
- package/constructs/RDS.d.ts +11 -11
- package/constructs/RDS.js +31 -23
- package/constructs/Script.js +2 -3
- package/package.json +10 -10
- package/sst.mjs +266 -135
- package/stacks/deploy.js +3 -5
- package/stacks/synth.d.ts +1 -0
- package/stacks/synth.js +1 -0
- package/cdk/cloudformation-deployments.js +0 -267
package/sst.mjs
CHANGED
|
@@ -2164,6 +2164,7 @@ import { AssetManifestBuilder } from "sst-aws-cdk/lib/util/asset-manifest-builde
|
|
|
2164
2164
|
import { publishAssets } from "sst-aws-cdk/lib/util/asset-publishing.js";
|
|
2165
2165
|
import { contentHash } from "sst-aws-cdk/lib/util/content-hash.js";
|
|
2166
2166
|
import { CfnEvaluationException } from "sst-aws-cdk/lib/api/evaluate-cloudformation-template.js";
|
|
2167
|
+
import { HotswapMode } from "sst-aws-cdk/lib/api/hotswap/common.js";
|
|
2167
2168
|
import { tryHotswapDeployment } from "sst-aws-cdk/lib/api/hotswap-deployments.js";
|
|
2168
2169
|
import {
|
|
2169
2170
|
changeSetHasNoChanges,
|
|
@@ -2243,13 +2244,15 @@ async function deployStack(options) {
|
|
|
2243
2244
|
parallel: options.assetParallelism
|
|
2244
2245
|
}
|
|
2245
2246
|
);
|
|
2246
|
-
|
|
2247
|
+
const hotswapMode = options.hotswap;
|
|
2248
|
+
if (hotswapMode && hotswapMode !== HotswapMode.FULL_DEPLOYMENT) {
|
|
2247
2249
|
try {
|
|
2248
2250
|
const hotswapDeploymentResult = await tryHotswapDeployment(
|
|
2249
2251
|
options.sdkProvider,
|
|
2250
|
-
|
|
2252
|
+
stackParams.values,
|
|
2251
2253
|
cloudFormationStack,
|
|
2252
|
-
stackArtifact
|
|
2254
|
+
stackArtifact,
|
|
2255
|
+
hotswapMode
|
|
2253
2256
|
);
|
|
2254
2257
|
if (hotswapDeploymentResult) {
|
|
2255
2258
|
return hotswapDeploymentResult;
|
|
@@ -2267,8 +2270,16 @@ async function deployStack(options) {
|
|
|
2267
2270
|
e.message
|
|
2268
2271
|
);
|
|
2269
2272
|
}
|
|
2270
|
-
|
|
2271
|
-
|
|
2273
|
+
if (hotswapMode === HotswapMode.FALL_BACK) {
|
|
2274
|
+
print("Falling back to doing a full deployment");
|
|
2275
|
+
options.sdk.appendCustomUserAgent("cdk-hotswap/fallback");
|
|
2276
|
+
} else {
|
|
2277
|
+
return {
|
|
2278
|
+
noOp: true,
|
|
2279
|
+
stackArn: cloudFormationStack.stackId,
|
|
2280
|
+
outputs: cloudFormationStack.outputs
|
|
2281
|
+
};
|
|
2282
|
+
}
|
|
2272
2283
|
}
|
|
2273
2284
|
const fullDeployment = new FullCloudFormationDeployment(
|
|
2274
2285
|
options,
|
|
@@ -2673,18 +2684,21 @@ var init_deploy_stack = __esm({
|
|
|
2673
2684
|
}
|
|
2674
2685
|
});
|
|
2675
2686
|
|
|
2676
|
-
// src/cdk/
|
|
2677
|
-
var
|
|
2678
|
-
__export(
|
|
2687
|
+
// src/cdk/deployments.ts
|
|
2688
|
+
var deployments_exports = {};
|
|
2689
|
+
__export(deployments_exports, {
|
|
2679
2690
|
CloudFormationDeployments: () => CloudFormationDeployments,
|
|
2680
|
-
|
|
2691
|
+
Deployments: () => Deployments
|
|
2681
2692
|
});
|
|
2682
2693
|
import * as cxapi2 from "@aws-cdk/cx-api";
|
|
2694
|
+
import * as cdk_assets from "cdk-assets";
|
|
2683
2695
|
import { AssetManifest } from "cdk-assets";
|
|
2684
2696
|
import { debug as debug2, warning } from "sst-aws-cdk/lib/logging.js";
|
|
2685
2697
|
import {
|
|
2686
2698
|
buildAssets,
|
|
2687
|
-
publishAssets as publishAssets2
|
|
2699
|
+
publishAssets as publishAssets2,
|
|
2700
|
+
PublishingAws,
|
|
2701
|
+
EVENT_TO_LOGGER
|
|
2688
2702
|
} from "sst-aws-cdk/lib/util/asset-publishing.js";
|
|
2689
2703
|
import { Mode } from "sst-aws-cdk/lib/api/aws-auth/credentials.js";
|
|
2690
2704
|
import {
|
|
@@ -2696,62 +2710,21 @@ import {
|
|
|
2696
2710
|
CloudFormationStack as CloudFormationStack2
|
|
2697
2711
|
} from "sst-aws-cdk/lib/api/util/cloudformation.js";
|
|
2698
2712
|
import { replaceEnvPlaceholders } from "sst-aws-cdk/lib/api/util/placeholders.js";
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
);
|
|
2703
|
-
const arns = await replaceEnvPlaceholders(
|
|
2704
|
-
{
|
|
2705
|
-
lookupRoleArn: stack.lookupRole?.arn
|
|
2706
|
-
},
|
|
2707
|
-
resolvedEnvironment,
|
|
2708
|
-
sdkProvider
|
|
2709
|
-
);
|
|
2710
|
-
const warningMessage = `Could not assume ${arns.lookupRoleArn}, proceeding anyway.`;
|
|
2711
|
-
const upgradeMessage = `(To get rid of this warning, please upgrade to bootstrap version >= ${stack.lookupRole?.requiresBootstrapStackVersion})`;
|
|
2712
|
-
try {
|
|
2713
|
-
const stackSdk = await sdkProvider.forEnvironment(
|
|
2714
|
-
resolvedEnvironment,
|
|
2715
|
-
Mode.ForReading,
|
|
2716
|
-
{
|
|
2717
|
-
assumeRoleArn: arns.lookupRoleArn,
|
|
2718
|
-
assumeRoleExternalId: stack.lookupRole?.assumeRoleExternalId
|
|
2719
|
-
}
|
|
2720
|
-
);
|
|
2721
|
-
if (stackSdk.didAssumeRole && stack.lookupRole?.bootstrapStackVersionSsmParameter && stack.lookupRole.requiresBootstrapStackVersion) {
|
|
2722
|
-
const version2 = await ToolkitInfo.versionFromSsmParameter(
|
|
2723
|
-
stackSdk.sdk,
|
|
2724
|
-
stack.lookupRole.bootstrapStackVersionSsmParameter
|
|
2725
|
-
);
|
|
2726
|
-
if (version2 < stack.lookupRole.requiresBootstrapStackVersion) {
|
|
2727
|
-
throw new Error(
|
|
2728
|
-
`Bootstrap stack version '${stack.lookupRole.requiresBootstrapStackVersion}' is required, found version '${version2}'.`
|
|
2729
|
-
);
|
|
2730
|
-
}
|
|
2731
|
-
} else if (!stackSdk.didAssumeRole && stack.lookupRole?.requiresBootstrapStackVersion) {
|
|
2732
|
-
warning(upgradeMessage);
|
|
2733
|
-
}
|
|
2734
|
-
return { ...stackSdk, resolvedEnvironment };
|
|
2735
|
-
} catch (e) {
|
|
2736
|
-
debug2(e);
|
|
2737
|
-
if (stack.lookupRole && stack.lookupRole.requiresBootstrapStackVersion) {
|
|
2738
|
-
warning(warningMessage);
|
|
2739
|
-
warning(upgradeMessage);
|
|
2740
|
-
}
|
|
2741
|
-
throw e;
|
|
2742
|
-
}
|
|
2743
|
-
}
|
|
2744
|
-
var CloudFormationDeployments;
|
|
2745
|
-
var init_cloudformation_deployments = __esm({
|
|
2746
|
-
"src/cdk/cloudformation-deployments.ts"() {
|
|
2713
|
+
var Deployments, ParallelSafeAssetProgress, CloudFormationDeployments;
|
|
2714
|
+
var init_deployments = __esm({
|
|
2715
|
+
"src/cdk/deployments.ts"() {
|
|
2747
2716
|
"use strict";
|
|
2748
2717
|
init_deploy_stack();
|
|
2749
2718
|
init_util();
|
|
2750
|
-
|
|
2751
|
-
sdkProvider;
|
|
2719
|
+
Deployments = class {
|
|
2752
2720
|
constructor(props) {
|
|
2721
|
+
this.props = props;
|
|
2753
2722
|
this.sdkProvider = props.sdkProvider;
|
|
2754
2723
|
}
|
|
2724
|
+
sdkProvider;
|
|
2725
|
+
toolkitInfoCache = /* @__PURE__ */ new Map();
|
|
2726
|
+
sdkCache = /* @__PURE__ */ new Map();
|
|
2727
|
+
publisherCache = /* @__PURE__ */ new Map();
|
|
2755
2728
|
async readCurrentTemplateWithNestedStacks(rootStackArtifact, retrieveProcessedTemplate = false) {
|
|
2756
2729
|
const sdk = (await this.prepareSdkWithLookupOrDeployRole(rootStackArtifact)).stackSdk;
|
|
2757
2730
|
return (await loadCurrentTemplateWithNestedStacks(
|
|
@@ -2775,7 +2748,7 @@ var init_cloudformation_deployments = __esm({
|
|
|
2775
2748
|
Mode.ForReading
|
|
2776
2749
|
);
|
|
2777
2750
|
const cfn = stackSdk.cloudFormation();
|
|
2778
|
-
const toolkitInfo = await
|
|
2751
|
+
const toolkitInfo = await this.lookupToolkit(
|
|
2779
2752
|
resolvedEnvironment,
|
|
2780
2753
|
stackSdk,
|
|
2781
2754
|
toolkitStackName
|
|
@@ -2809,29 +2782,31 @@ var init_cloudformation_deployments = __esm({
|
|
|
2809
2782
|
execute: options.execute
|
|
2810
2783
|
};
|
|
2811
2784
|
}
|
|
2812
|
-
const { stackSdk, resolvedEnvironment, cloudFormationRoleArn } = await this.prepareSdkFor(options.stack, options.roleArn);
|
|
2785
|
+
const { stackSdk, resolvedEnvironment, cloudFormationRoleArn } = await this.prepareSdkFor(options.stack, options.roleArn, Mode.ForWriting);
|
|
2813
2786
|
const toolkitInfo = await callWithRetry(
|
|
2814
|
-
() =>
|
|
2787
|
+
() => this.lookupToolkit(
|
|
2815
2788
|
resolvedEnvironment,
|
|
2816
2789
|
stackSdk,
|
|
2817
2790
|
options.toolkitStackName
|
|
2818
2791
|
)
|
|
2819
2792
|
);
|
|
2820
|
-
if (options.resourcesToImport === void 0) {
|
|
2821
|
-
await this.publishStackAssets(options.stack, toolkitInfo, {
|
|
2822
|
-
buildAssets: options.buildAssets ?? true,
|
|
2823
|
-
publishOptions: {
|
|
2824
|
-
quiet: options.quiet,
|
|
2825
|
-
parallel: options.assetParallelism
|
|
2826
|
-
}
|
|
2827
|
-
});
|
|
2828
|
-
}
|
|
2829
2793
|
await this.validateBootstrapStackVersion(
|
|
2830
2794
|
options.stack.stackName,
|
|
2831
2795
|
options.stack.requiresBootstrapStackVersion,
|
|
2832
2796
|
options.stack.bootstrapStackVersionSsmParameter,
|
|
2833
2797
|
toolkitInfo
|
|
2834
2798
|
);
|
|
2799
|
+
const assetArtifacts = options.stack.dependencies.filter(
|
|
2800
|
+
cxapi2.AssetManifestArtifact.isAssetManifestArtifact
|
|
2801
|
+
);
|
|
2802
|
+
for (const asset of assetArtifacts) {
|
|
2803
|
+
const manifest = AssetManifest.fromFile(asset.file);
|
|
2804
|
+
await publishAssets2(manifest, this.sdkProvider, resolvedEnvironment, {
|
|
2805
|
+
buildAssets: true,
|
|
2806
|
+
quiet: options.quiet,
|
|
2807
|
+
parallel: options.assetParallelism
|
|
2808
|
+
});
|
|
2809
|
+
}
|
|
2835
2810
|
return deployStack({
|
|
2836
2811
|
stack: options.stack,
|
|
2837
2812
|
noMonitor: true,
|
|
@@ -2860,7 +2835,7 @@ var init_cloudformation_deployments = __esm({
|
|
|
2860
2835
|
});
|
|
2861
2836
|
}
|
|
2862
2837
|
async destroyStack(options) {
|
|
2863
|
-
const { stackSdk, cloudFormationRoleArn: roleArn } = await this.prepareSdkFor(options.stack, options.roleArn);
|
|
2838
|
+
const { stackSdk, cloudFormationRoleArn: roleArn } = await this.prepareSdkFor(options.stack, options.roleArn, Mode.ForWriting);
|
|
2864
2839
|
return destroyStack({
|
|
2865
2840
|
sdk: stackSdk,
|
|
2866
2841
|
roleArn,
|
|
@@ -2884,10 +2859,7 @@ var init_cloudformation_deployments = __esm({
|
|
|
2884
2859
|
}
|
|
2885
2860
|
async prepareSdkWithLookupOrDeployRole(stackArtifact) {
|
|
2886
2861
|
try {
|
|
2887
|
-
const result = await prepareSdkWithLookupRoleFor(
|
|
2888
|
-
this.sdkProvider,
|
|
2889
|
-
stackArtifact
|
|
2890
|
-
);
|
|
2862
|
+
const result = await this.prepareSdkWithLookupRoleFor(stackArtifact);
|
|
2891
2863
|
if (result.didAssumeRole) {
|
|
2892
2864
|
return {
|
|
2893
2865
|
resolvedEnvironment: result.resolvedEnvironment,
|
|
@@ -2898,7 +2870,7 @@ var init_cloudformation_deployments = __esm({
|
|
|
2898
2870
|
}
|
|
2899
2871
|
return this.prepareSdkFor(stackArtifact, void 0, Mode.ForReading);
|
|
2900
2872
|
}
|
|
2901
|
-
async prepareSdkFor(stack, roleArn, mode
|
|
2873
|
+
async prepareSdkFor(stack, roleArn, mode) {
|
|
2902
2874
|
if (!stack.environment) {
|
|
2903
2875
|
throw new Error(
|
|
2904
2876
|
`The stack ${stack.displayName} does not have an environment`
|
|
@@ -2915,7 +2887,7 @@ var init_cloudformation_deployments = __esm({
|
|
|
2915
2887
|
resolvedEnvironment,
|
|
2916
2888
|
this.sdkProvider
|
|
2917
2889
|
);
|
|
2918
|
-
const stackSdk = await this.
|
|
2890
|
+
const stackSdk = await this.cachedSdkForEnvironment(
|
|
2919
2891
|
resolvedEnvironment,
|
|
2920
2892
|
mode,
|
|
2921
2893
|
{
|
|
@@ -2929,12 +2901,72 @@ var init_cloudformation_deployments = __esm({
|
|
|
2929
2901
|
cloudFormationRoleArn: arns.cloudFormationRoleArn
|
|
2930
2902
|
};
|
|
2931
2903
|
}
|
|
2932
|
-
async
|
|
2904
|
+
async prepareSdkWithLookupRoleFor(stack) {
|
|
2905
|
+
const resolvedEnvironment = await this.sdkProvider.resolveEnvironment(
|
|
2906
|
+
stack.environment
|
|
2907
|
+
);
|
|
2908
|
+
const arns = await replaceEnvPlaceholders(
|
|
2909
|
+
{
|
|
2910
|
+
lookupRoleArn: stack.lookupRole?.arn
|
|
2911
|
+
},
|
|
2912
|
+
resolvedEnvironment,
|
|
2913
|
+
this.sdkProvider
|
|
2914
|
+
);
|
|
2915
|
+
const warningMessage = `Could not assume ${arns.lookupRoleArn}, proceeding anyway.`;
|
|
2916
|
+
const upgradeMessage = `(To get rid of this warning, please upgrade to bootstrap version >= ${stack.lookupRole?.requiresBootstrapStackVersion})`;
|
|
2917
|
+
try {
|
|
2918
|
+
const stackSdk = await this.cachedSdkForEnvironment(
|
|
2919
|
+
resolvedEnvironment,
|
|
2920
|
+
Mode.ForReading,
|
|
2921
|
+
{
|
|
2922
|
+
assumeRoleArn: arns.lookupRoleArn,
|
|
2923
|
+
assumeRoleExternalId: stack.lookupRole?.assumeRoleExternalId
|
|
2924
|
+
}
|
|
2925
|
+
);
|
|
2926
|
+
if (stackSdk.didAssumeRole && stack.lookupRole?.bootstrapStackVersionSsmParameter && stack.lookupRole.requiresBootstrapStackVersion) {
|
|
2927
|
+
const version2 = await ToolkitInfo.versionFromSsmParameter(
|
|
2928
|
+
stackSdk.sdk,
|
|
2929
|
+
stack.lookupRole.bootstrapStackVersionSsmParameter
|
|
2930
|
+
);
|
|
2931
|
+
if (version2 < stack.lookupRole.requiresBootstrapStackVersion) {
|
|
2932
|
+
throw new Error(
|
|
2933
|
+
`Bootstrap stack version '${stack.lookupRole.requiresBootstrapStackVersion}' is required, found version '${version2}'.`
|
|
2934
|
+
);
|
|
2935
|
+
}
|
|
2936
|
+
} else if (!stackSdk.didAssumeRole && stack.lookupRole?.requiresBootstrapStackVersion) {
|
|
2937
|
+
warning(upgradeMessage);
|
|
2938
|
+
}
|
|
2939
|
+
return { ...stackSdk, resolvedEnvironment };
|
|
2940
|
+
} catch (e) {
|
|
2941
|
+
debug2(e);
|
|
2942
|
+
if (stack.lookupRole && stack.lookupRole.requiresBootstrapStackVersion) {
|
|
2943
|
+
warning(warningMessage);
|
|
2944
|
+
warning(upgradeMessage);
|
|
2945
|
+
}
|
|
2946
|
+
throw e;
|
|
2947
|
+
}
|
|
2948
|
+
}
|
|
2949
|
+
async lookupToolkit(resolvedEnvironment, sdk, toolkitStackName) {
|
|
2950
|
+
const key = `${resolvedEnvironment.account}:${resolvedEnvironment.region}:${toolkitStackName}`;
|
|
2951
|
+
const existing = this.toolkitInfoCache.get(key);
|
|
2952
|
+
if (existing) {
|
|
2953
|
+
return existing;
|
|
2954
|
+
}
|
|
2955
|
+
const ret = await ToolkitInfo.lookup(
|
|
2956
|
+
resolvedEnvironment,
|
|
2957
|
+
sdk,
|
|
2958
|
+
toolkitStackName
|
|
2959
|
+
);
|
|
2960
|
+
this.toolkitInfoCache.set(key, ret);
|
|
2961
|
+
return ret;
|
|
2962
|
+
}
|
|
2963
|
+
async prepareAndValidateAssets(asset, options) {
|
|
2933
2964
|
const { stackSdk, resolvedEnvironment } = await this.prepareSdkFor(
|
|
2934
2965
|
options.stack,
|
|
2935
|
-
options.roleArn
|
|
2966
|
+
options.roleArn,
|
|
2967
|
+
Mode.ForWriting
|
|
2936
2968
|
);
|
|
2937
|
-
const toolkitInfo = await
|
|
2969
|
+
const toolkitInfo = await this.lookupToolkit(
|
|
2938
2970
|
resolvedEnvironment,
|
|
2939
2971
|
stackSdk,
|
|
2940
2972
|
options.toolkitStackName
|
|
@@ -2942,45 +2974,84 @@ var init_cloudformation_deployments = __esm({
|
|
|
2942
2974
|
const stackEnv = await this.sdkProvider.resolveEnvironment(
|
|
2943
2975
|
options.stack.environment
|
|
2944
2976
|
);
|
|
2945
|
-
|
|
2946
|
-
|
|
2977
|
+
await this.validateBootstrapStackVersion(
|
|
2978
|
+
options.stack.stackName,
|
|
2979
|
+
asset.requiresBootstrapStackVersion,
|
|
2980
|
+
asset.bootstrapStackVersionSsmParameter,
|
|
2981
|
+
toolkitInfo
|
|
2947
2982
|
);
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
options.stack.stackName,
|
|
2951
|
-
assetArtifact.requiresBootstrapStackVersion,
|
|
2952
|
-
assetArtifact.bootstrapStackVersionSsmParameter,
|
|
2953
|
-
toolkitInfo
|
|
2954
|
-
);
|
|
2955
|
-
const manifest = AssetManifest.fromFile(assetArtifact.file);
|
|
2956
|
-
await buildAssets(
|
|
2957
|
-
manifest,
|
|
2958
|
-
this.sdkProvider,
|
|
2959
|
-
stackEnv,
|
|
2960
|
-
options.buildOptions
|
|
2961
|
-
);
|
|
2962
|
-
}
|
|
2983
|
+
const manifest = AssetManifest.fromFile(asset.file);
|
|
2984
|
+
return { manifest, stackEnv };
|
|
2963
2985
|
}
|
|
2964
|
-
async
|
|
2965
|
-
const stackEnv = await this.
|
|
2966
|
-
|
|
2986
|
+
async buildAssets(asset, options) {
|
|
2987
|
+
const { manifest, stackEnv } = await this.prepareAndValidateAssets(
|
|
2988
|
+
asset,
|
|
2989
|
+
options
|
|
2967
2990
|
);
|
|
2968
|
-
|
|
2969
|
-
|
|
2991
|
+
await buildAssets(
|
|
2992
|
+
manifest,
|
|
2993
|
+
this.sdkProvider,
|
|
2994
|
+
stackEnv,
|
|
2995
|
+
options.buildOptions
|
|
2970
2996
|
);
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2997
|
+
}
|
|
2998
|
+
async publishAssets(asset, options) {
|
|
2999
|
+
const { manifest, stackEnv } = await this.prepareAndValidateAssets(
|
|
3000
|
+
asset,
|
|
3001
|
+
options
|
|
3002
|
+
);
|
|
3003
|
+
await publishAssets2(
|
|
3004
|
+
manifest,
|
|
3005
|
+
this.sdkProvider,
|
|
3006
|
+
stackEnv,
|
|
3007
|
+
options.publishOptions
|
|
3008
|
+
);
|
|
3009
|
+
}
|
|
3010
|
+
async buildSingleAsset(assetArtifact, assetManifest, asset, options) {
|
|
3011
|
+
const { stackSdk, resolvedEnvironment: stackEnv } = await this.prepareSdkFor(options.stack, options.roleArn, Mode.ForWriting);
|
|
3012
|
+
const toolkitInfo = await this.lookupToolkit(
|
|
3013
|
+
stackEnv,
|
|
3014
|
+
stackSdk,
|
|
3015
|
+
options.toolkitStackName
|
|
3016
|
+
);
|
|
3017
|
+
await this.validateBootstrapStackVersion(
|
|
3018
|
+
options.stack.stackName,
|
|
3019
|
+
assetArtifact.requiresBootstrapStackVersion,
|
|
3020
|
+
assetArtifact.bootstrapStackVersionSsmParameter,
|
|
3021
|
+
toolkitInfo
|
|
3022
|
+
);
|
|
3023
|
+
const publisher = this.cachedPublisher(
|
|
3024
|
+
assetManifest,
|
|
3025
|
+
stackEnv,
|
|
3026
|
+
options.stackName
|
|
3027
|
+
);
|
|
3028
|
+
await publisher.buildEntry(asset);
|
|
3029
|
+
}
|
|
3030
|
+
async publishSingleAsset(assetManifest, asset, options) {
|
|
3031
|
+
const { resolvedEnvironment: stackEnv } = await this.prepareSdkFor(
|
|
3032
|
+
options.stack,
|
|
3033
|
+
options.roleArn,
|
|
3034
|
+
Mode.ForWriting
|
|
3035
|
+
);
|
|
3036
|
+
const publisher = this.cachedPublisher(
|
|
3037
|
+
assetManifest,
|
|
3038
|
+
stackEnv,
|
|
3039
|
+
options.stackName
|
|
3040
|
+
);
|
|
3041
|
+
await publisher.publishEntry(asset);
|
|
3042
|
+
}
|
|
3043
|
+
async isSingleAssetPublished(assetManifest, asset, options) {
|
|
3044
|
+
const { resolvedEnvironment: stackEnv } = await this.prepareSdkFor(
|
|
3045
|
+
options.stack,
|
|
3046
|
+
options.roleArn,
|
|
3047
|
+
Mode.ForWriting
|
|
3048
|
+
);
|
|
3049
|
+
const publisher = this.cachedPublisher(
|
|
3050
|
+
assetManifest,
|
|
3051
|
+
stackEnv,
|
|
3052
|
+
options.stackName
|
|
3053
|
+
);
|
|
3054
|
+
return publisher.isEntryPublished(asset);
|
|
2984
3055
|
}
|
|
2985
3056
|
async validateBootstrapStackVersion(stackName, requiresBootstrapStackVersion, bootstrapStackVersionSsmParameter, toolkitInfo) {
|
|
2986
3057
|
if (requiresBootstrapStackVersion === void 0) {
|
|
@@ -2995,21 +3066,72 @@ var init_cloudformation_deployments = __esm({
|
|
|
2995
3066
|
throw new Error(`${stackName}: ${e.message}`);
|
|
2996
3067
|
}
|
|
2997
3068
|
}
|
|
3069
|
+
async cachedSdkForEnvironment(environment, mode, options) {
|
|
3070
|
+
const cacheKey = [
|
|
3071
|
+
environment.account,
|
|
3072
|
+
environment.region,
|
|
3073
|
+
`${mode}`,
|
|
3074
|
+
options?.assumeRoleArn ?? "",
|
|
3075
|
+
options?.assumeRoleExternalId ?? ""
|
|
3076
|
+
].join(":");
|
|
3077
|
+
const existing = this.sdkCache.get(cacheKey);
|
|
3078
|
+
if (existing) {
|
|
3079
|
+
return existing;
|
|
3080
|
+
}
|
|
3081
|
+
const ret = await this.sdkProvider.forEnvironment(
|
|
3082
|
+
environment,
|
|
3083
|
+
mode,
|
|
3084
|
+
options
|
|
3085
|
+
);
|
|
3086
|
+
this.sdkCache.set(cacheKey, ret);
|
|
3087
|
+
return ret;
|
|
3088
|
+
}
|
|
3089
|
+
cachedPublisher(assetManifest, env, stackName) {
|
|
3090
|
+
const existing = this.publisherCache.get(assetManifest);
|
|
3091
|
+
if (existing) {
|
|
3092
|
+
return existing;
|
|
3093
|
+
}
|
|
3094
|
+
const prefix = stackName ? `${stackName}: ` : "";
|
|
3095
|
+
const publisher = new cdk_assets.AssetPublishing(assetManifest, {
|
|
3096
|
+
aws: new PublishingAws(this.sdkProvider, env),
|
|
3097
|
+
progressListener: new ParallelSafeAssetProgress(
|
|
3098
|
+
prefix,
|
|
3099
|
+
this.props.quiet ?? false
|
|
3100
|
+
)
|
|
3101
|
+
});
|
|
3102
|
+
this.publisherCache.set(assetManifest, publisher);
|
|
3103
|
+
return publisher;
|
|
3104
|
+
}
|
|
3105
|
+
};
|
|
3106
|
+
ParallelSafeAssetProgress = class {
|
|
3107
|
+
constructor(prefix, quiet) {
|
|
3108
|
+
this.prefix = prefix;
|
|
3109
|
+
this.quiet = quiet;
|
|
3110
|
+
}
|
|
3111
|
+
onPublishEvent(type, event) {
|
|
3112
|
+
const handler = this.quiet && type !== "fail" ? debug2 : EVENT_TO_LOGGER[type];
|
|
3113
|
+
handler(`${this.prefix} ${type}: ${event.message}`);
|
|
3114
|
+
}
|
|
3115
|
+
};
|
|
3116
|
+
CloudFormationDeployments = class extends Deployments {
|
|
2998
3117
|
};
|
|
2999
3118
|
}
|
|
3000
3119
|
});
|
|
3001
3120
|
|
|
3002
|
-
// src/cdk/
|
|
3003
|
-
var
|
|
3004
|
-
__export(
|
|
3121
|
+
// src/cdk/deployments-wrapper.ts
|
|
3122
|
+
var deployments_wrapper_exports = {};
|
|
3123
|
+
__export(deployments_wrapper_exports, {
|
|
3005
3124
|
publishDeployAssets: () => publishDeployAssets
|
|
3006
3125
|
});
|
|
3126
|
+
import * as cxapi3 from "@aws-cdk/cx-api";
|
|
3127
|
+
import { AssetManifest as AssetManifest2 } from "cdk-assets";
|
|
3007
3128
|
import { debug as debug3 } from "sst-aws-cdk/lib/logging.js";
|
|
3008
3129
|
import {
|
|
3009
3130
|
CloudFormationStack as CloudFormationStack3,
|
|
3010
3131
|
TemplateParameters as TemplateParameters2,
|
|
3011
3132
|
waitForStackDelete as waitForStackDelete2
|
|
3012
3133
|
} from "sst-aws-cdk/lib/api/util/cloudformation.js";
|
|
3134
|
+
import { Mode as Mode2 } from "sst-aws-cdk/lib/api/aws-auth/credentials.js";
|
|
3013
3135
|
import { ToolkitInfo as ToolkitInfo2 } from "sst-aws-cdk/lib/api/toolkit-info.js";
|
|
3014
3136
|
import { addMetadataAssetsToManifest as addMetadataAssetsToManifest2 } from "sst-aws-cdk/lib/assets.js";
|
|
3015
3137
|
import { publishAssets as publishAssets3 } from "sst-aws-cdk/lib/util/asset-publishing.js";
|
|
@@ -3022,13 +3144,17 @@ async function publishDeployAssets(sdkProvider, options) {
|
|
|
3022
3144
|
resolvedEnvironment,
|
|
3023
3145
|
cloudFormationRoleArn
|
|
3024
3146
|
} = await useDeployment().get(sdkProvider, options);
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3147
|
+
const assetArtifacts = options.stack.dependencies.filter(
|
|
3148
|
+
cxapi3.AssetManifestArtifact.isAssetManifestArtifact
|
|
3149
|
+
);
|
|
3150
|
+
for (const asset of assetArtifacts) {
|
|
3151
|
+
const manifest = AssetManifest2.fromFile(asset.file);
|
|
3152
|
+
await publishAssets3(manifest, sdkProvider, resolvedEnvironment, {
|
|
3153
|
+
buildAssets: true,
|
|
3028
3154
|
quiet: options.quiet,
|
|
3029
3155
|
parallel: options.assetParallelism
|
|
3030
|
-
}
|
|
3031
|
-
}
|
|
3156
|
+
});
|
|
3157
|
+
}
|
|
3032
3158
|
return deployStack2({
|
|
3033
3159
|
stack: options.stack,
|
|
3034
3160
|
noMonitor: true,
|
|
@@ -3124,10 +3250,10 @@ async function deployStack2(options) {
|
|
|
3124
3250
|
};
|
|
3125
3251
|
}
|
|
3126
3252
|
var useDeployment;
|
|
3127
|
-
var
|
|
3128
|
-
"src/cdk/
|
|
3253
|
+
var init_deployments_wrapper = __esm({
|
|
3254
|
+
"src/cdk/deployments-wrapper.ts"() {
|
|
3129
3255
|
"use strict";
|
|
3130
|
-
|
|
3256
|
+
init_deployments();
|
|
3131
3257
|
init_deploy_stack();
|
|
3132
3258
|
init_context();
|
|
3133
3259
|
useDeployment = Context.memo(() => {
|
|
@@ -3136,8 +3262,12 @@ var init_cloudformation_deployments_wrapper = __esm({
|
|
|
3136
3262
|
async get(sdkProvider, options) {
|
|
3137
3263
|
const region = options.stack.environment.region;
|
|
3138
3264
|
if (!state2.has(region)) {
|
|
3139
|
-
const deployment = new
|
|
3140
|
-
const { stackSdk, resolvedEnvironment, cloudFormationRoleArn } = await deployment.prepareSdkFor(
|
|
3265
|
+
const deployment = new Deployments({ sdkProvider });
|
|
3266
|
+
const { stackSdk, resolvedEnvironment, cloudFormationRoleArn } = await deployment.prepareSdkFor(
|
|
3267
|
+
options.stack,
|
|
3268
|
+
options.roleArn,
|
|
3269
|
+
Mode2.ForWriting
|
|
3270
|
+
);
|
|
3141
3271
|
const toolkitInfo = await ToolkitInfo2.lookup(
|
|
3142
3272
|
resolvedEnvironment,
|
|
3143
3273
|
stackSdk,
|
|
@@ -3168,7 +3298,7 @@ var init_cloudformation_deployments_wrapper = __esm({
|
|
|
3168
3298
|
async function publishAssets4(stacks) {
|
|
3169
3299
|
Logger.debug("Publishing assets");
|
|
3170
3300
|
const provider = await useAWSProvider();
|
|
3171
|
-
const { publishDeployAssets: publishDeployAssets2 } = await Promise.resolve().then(() => (
|
|
3301
|
+
const { publishDeployAssets: publishDeployAssets2 } = await Promise.resolve().then(() => (init_deployments_wrapper(), deployments_wrapper_exports));
|
|
3172
3302
|
const results = {};
|
|
3173
3303
|
for (const stack of stacks) {
|
|
3174
3304
|
const result = await publishDeployAssets2(provider, {
|
|
@@ -3239,10 +3369,8 @@ async function deploy(stack) {
|
|
|
3239
3369
|
const bus = useBus();
|
|
3240
3370
|
Logger.debug("Deploying stack", stack.id);
|
|
3241
3371
|
const provider = await useAWSProvider();
|
|
3242
|
-
const {
|
|
3243
|
-
const deployment = new
|
|
3244
|
-
sdkProvider: provider
|
|
3245
|
-
});
|
|
3372
|
+
const { Deployments: Deployments2 } = await Promise.resolve().then(() => (init_deployments(), deployments_exports));
|
|
3373
|
+
const deployment = new Deployments2({ sdkProvider: provider });
|
|
3246
3374
|
const stackTags = Object.entries(stack.tags ?? {}).map(([Key, Value]) => ({
|
|
3247
3375
|
Key,
|
|
3248
3376
|
Value
|
|
@@ -5023,6 +5151,7 @@ async function synth(opts) {
|
|
|
5023
5151
|
region: project.config.region,
|
|
5024
5152
|
mode: opts.mode,
|
|
5025
5153
|
debugIncreaseTimeout: opts.increaseTimeout,
|
|
5154
|
+
debugScriptVersion: opts.scriptVersion,
|
|
5026
5155
|
isActiveStack: opts.isActiveStack
|
|
5027
5156
|
},
|
|
5028
5157
|
{
|
|
@@ -7012,6 +7141,7 @@ var dev = (program2) => program2.command(
|
|
|
7012
7141
|
const useStackBuilder = Context2.memo(async () => {
|
|
7013
7142
|
const watcher = useWatcher2();
|
|
7014
7143
|
const project = useProject2();
|
|
7144
|
+
const scriptVersion = Date.now().toString();
|
|
7015
7145
|
let lastDeployed;
|
|
7016
7146
|
let isWorking = false;
|
|
7017
7147
|
let isDirty = false;
|
|
@@ -7035,6 +7165,7 @@ var dev = (program2) => program2.command(
|
|
|
7035
7165
|
project.stacks = sstConfig.stacks;
|
|
7036
7166
|
const assembly = await Stacks.synth({
|
|
7037
7167
|
increaseTimeout: args["increase-timeout"],
|
|
7168
|
+
scriptVersion,
|
|
7038
7169
|
fn: project.stacks,
|
|
7039
7170
|
outDir: `.sst/cdk.out`,
|
|
7040
7171
|
mode: "dev"
|
package/stacks/deploy.js
CHANGED
|
@@ -6,7 +6,7 @@ import { VisibleError } from "../error.js";
|
|
|
6
6
|
export async function publishAssets(stacks) {
|
|
7
7
|
Logger.debug("Publishing assets");
|
|
8
8
|
const provider = await useAWSProvider();
|
|
9
|
-
const { publishDeployAssets } = await import("../cdk/
|
|
9
|
+
const { publishDeployAssets } = await import("../cdk/deployments-wrapper.js");
|
|
10
10
|
const results = {};
|
|
11
11
|
for (const stack of stacks) {
|
|
12
12
|
const result = await publishDeployAssets(provider, {
|
|
@@ -74,10 +74,8 @@ export async function deploy(stack) {
|
|
|
74
74
|
const bus = useBus();
|
|
75
75
|
Logger.debug("Deploying stack", stack.id);
|
|
76
76
|
const provider = await useAWSProvider();
|
|
77
|
-
const {
|
|
78
|
-
const deployment = new
|
|
79
|
-
sdkProvider: provider,
|
|
80
|
-
});
|
|
77
|
+
const { Deployments } = await import("../cdk/deployments.js");
|
|
78
|
+
const deployment = new Deployments({ sdkProvider: provider });
|
|
81
79
|
const stackTags = Object.entries(stack.tags ?? {}).map(([Key, Value]) => ({
|
|
82
80
|
Key,
|
|
83
81
|
Value,
|
package/stacks/synth.d.ts
CHANGED
package/stacks/synth.js
CHANGED