Skip to content

Commit a684ff4

Browse files
authored
fix(pipelines): "Maximum schema version supported" error (#18404)
We are currently releasing both v1 and v2 streams of the CDK in parallel, with changes landing on v1 before they land on v2. By default, CDK Pipelines will use the "latest" CLI version. However, because "latest" always comes from the v2 version stream (since that has the highest number), there may be changes to the cx protocol in a v1 app that aren't supported by the v2 CLI yet. The "correct" solution to this would be one of (a) releasing v1 and v2 synchronously and making sure both have the same change set; or (b) not having a v2 CLI at all. Both of these would require significant engineering effort to resolve though. In the mean time, add the concept of a "preferred CLI version" to CDK Pipelines, set to `1` for most packages but to `2` for `aws-cdk-lib`, and have NPM install the "latest" CLI from the same version stream that the library is from. Fixes #18370. ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent 02d7b40 commit a684ff4

13 files changed

+83
-27
lines changed

packages/@aws-cdk/pipelines/lib/codepipeline/codepipeline.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { DockerCredential, dockerCredentialsInstallCommands, DockerCredentialUsa
1212
import { GraphNodeCollection, isGraph, AGraphNode, PipelineGraph } from '../helpers-internal';
1313
import { PipelineBase } from '../main';
1414
import { AssetSingletonRole } from '../private/asset-singleton-role';
15+
import { preferredCliVersion } from '../private/cli-version';
1516
import { appOf, assemblyBuilderOf, embeddedAsmPath, obtainScope } from '../private/construct-internals';
1617
import { toPosixPath } from '../private/fs';
1718
import { actionName, stackVariableNamespace } from '../private/identifiers';
@@ -303,13 +304,15 @@ export class CodePipeline extends PipelineBase {
303304
private _cloudAssemblyFileSet?: FileSet;
304305

305306
private readonly singlePublisherPerAssetType: boolean;
307+
private readonly cliVersion?: string;
306308

307309
constructor(scope: Construct, id: string, private readonly props: CodePipelineProps) {
308310
super(scope, id, props);
309311

310312
this.selfMutation = props.selfMutation ?? true;
311313
this.dockerCredentials = props.dockerCredentials ?? [];
312314
this.singlePublisherPerAssetType = !(props.publishAssetsInParallel ?? true);
315+
this.cliVersion = props.cliVersion ?? preferredCliVersion();
313316
}
314317

315318
/**
@@ -603,7 +606,7 @@ export class CodePipeline extends PipelineBase {
603606
}
604607

605608
private selfMutateAction(): ICodePipelineActionFactory {
606-
const installSuffix = this.props.cliVersion ? `@${this.props.cliVersion}` : '';
609+
const installSuffix = this.cliVersion ? `@${this.cliVersion}` : '';
607610

608611
const pipelineStack = Stack.of(this.pipeline);
609612
const pipelineStackIdentifier = pipelineStack.node.path ?? pipelineStack.stackName;
@@ -649,7 +652,7 @@ export class CodePipeline extends PipelineBase {
649652
}
650653

651654
private publishAssetsAction(node: AGraphNode, assets: StackAsset[]): ICodePipelineActionFactory {
652-
const installSuffix = this.props.cliVersion ? `@${this.props.cliVersion}` : '';
655+
const installSuffix = this.cliVersion ? `@${this.cliVersion}` : '';
653656

654657
const commands = assets.map(asset => {
655658
const relativeAssetManifestPath = path.relative(this.myCxAsmRoot, asset.assetManifestPath);

packages/@aws-cdk/pipelines/lib/legacy/pipeline.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { AssetType } from '../blueprint/asset-type';
99
import { dockerCredentialsInstallCommands, DockerCredential, DockerCredentialUsage } from '../docker-credentials';
1010
import { ApplicationSecurityCheck } from '../private/application-security-check';
1111
import { AssetSingletonRole } from '../private/asset-singleton-role';
12+
import { preferredCliVersion } from '../private/cli-version';
1213
import { appOf, assemblyBuilderOf } from '../private/construct-internals';
1314
import { DeployCdkStackAction, PublishAssetsAction, UpdatePipelineAction } from './actions';
1415
import { AddStageOptions, AssetPublishingCommand, BaseStageOptions, CdkStage, StackOutput } from './stage';
@@ -219,9 +220,11 @@ export class CdkPipeline extends CoreConstruct {
219220
private readonly _cloudAssemblyArtifact: codepipeline.Artifact;
220221
private readonly _dockerCredentials: DockerCredential[];
221222
private _applicationSecurityCheck?: ApplicationSecurityCheck;
223+
private readonly cliVersion?: string;
222224

223225
constructor(scope: Construct, id: string, props: CdkPipelineProps) {
224226
super(scope, id);
227+
this.cliVersion = props.cdkCliVersion ?? preferredCliVersion();
225228

226229
if (!App.isApp(this.node.root)) {
227230
throw new Error('CdkPipeline must be created under an App');
@@ -287,7 +290,7 @@ export class CdkPipeline extends CoreConstruct {
287290
actions: [new UpdatePipelineAction(this, 'UpdatePipeline', {
288291
cloudAssemblyInput: this._cloudAssemblyArtifact,
289292
pipelineStackHierarchicalId: pipelineStack.node.path,
290-
cdkCliVersion: props.cdkCliVersion,
293+
cdkCliVersion: this.cliVersion,
291294
projectName: maybeSuffix(props.pipelineName, '-selfupdate'),
292295
privileged: props.supportDockerAssets,
293296
dockerCredentials: this._dockerCredentials,
@@ -298,7 +301,7 @@ export class CdkPipeline extends CoreConstruct {
298301

299302
this._assets = new AssetPublishing(this, 'Assets', {
300303
cloudAssemblyInput: this._cloudAssemblyArtifact,
301-
cdkCliVersion: props.cdkCliVersion,
304+
cdkCliVersion: this.cliVersion,
302305
pipeline: this._pipeline,
303306
projectName: maybeSuffix(props.pipelineName, '-publish'),
304307
vpc: props.vpc,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import * as fs from 'fs';
2+
import * as path from 'path';
3+
4+
/**
5+
* Return the preferred CLI version for the current CDK Library version
6+
*
7+
* This is necessary to prevent cxapi version incompatibility between the two
8+
* CDK major versions. Since changes currently go into v1 before they go into
9+
* v2, a cxapi change can be released in v1 while the v2 CLI doesn't support it
10+
* yet.
11+
*
12+
* In those cases, simply installing the "latest" CLI (2) is not good enough
13+
* because it won't be able to read the Cloud Assembly of the v1 app.
14+
*
15+
* Find this version by finding the containing `package.json` and reading
16+
* `preferredCdkCliVersion` from it.
17+
*/
18+
export function preferredCliVersion(): string | undefined {
19+
const pjLocation = findUp('package.json', __dirname);
20+
if (!pjLocation) {
21+
return undefined;
22+
}
23+
const pj = JSON.parse(fs.readFileSync(pjLocation, { encoding: 'utf-8' }));
24+
return pj.preferredCdkCliVersion ? `${pj.preferredCdkCliVersion}` : undefined;
25+
}
26+
27+
export function findUp(name: string, directory: string): string | undefined {
28+
const absoluteDirectory = path.resolve(directory);
29+
30+
const file = path.join(directory, name);
31+
if (fs.existsSync(file)) {
32+
return file;
33+
}
34+
35+
const { root } = path.parse(absoluteDirectory);
36+
if (absoluteDirectory == root) {
37+
return undefined;
38+
}
39+
40+
return findUp(name, path.dirname(absoluteDirectory));
41+
}

packages/@aws-cdk/pipelines/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,6 @@
156156
"homepage": "https://github.com/aws/aws-cdk",
157157
"publishConfig": {
158158
"tag": "latest"
159-
}
159+
},
160+
"preferredCdkCliVersion": "1"
160161
}

packages/@aws-cdk/pipelines/test/compliance/assets.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ behavior('can supply pre-install scripts to asset upload', (suite) => {
599599
BuildSpec: Match.serializedJson(Match.objectLike({
600600
phases: {
601601
install: {
602-
commands: ['npm config set registry https://registry.com', 'npm install -g cdk-assets'],
602+
commands: ['npm config set registry https://registry.com', 'npm install -g cdk-assets@1'],
603603
},
604604
},
605605
})),

packages/@aws-cdk/pipelines/test/compliance/self-mutation.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ behavior('CodePipeline has self-mutation stage', (suite) => {
5252
BuildSpec: Match.serializedJson(Match.objectLike({
5353
phases: {
5454
install: {
55-
commands: ['npm install -g aws-cdk'],
55+
commands: ['npm install -g aws-cdk@1'],
5656
},
5757
build: {
5858
commands: Match.arrayWith(['cdk -a . deploy PipelineStack --require-approval=never --verbose']),
@@ -288,7 +288,7 @@ behavior('self-mutation stage can be customized with BuildSpec', (suite) => {
288288
BuildSpec: Match.serializedJson(Match.objectLike({
289289
phases: {
290290
install: {
291-
commands: ['npm config set registry example.com', 'npm install -g aws-cdk'],
291+
commands: ['npm config set registry example.com', 'npm install -g aws-cdk@1'],
292292
},
293293
build: {
294294
commands: Match.arrayWith(['cdk -a . deploy PipelineStack --require-approval=never --verbose']),

packages/@aws-cdk/pipelines/test/integ.newpipeline-with-vpc.expected.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@
858858
"ProjectName": {
859859
"Ref": "PipelineUpdatePipelineSelfMutationDAA41400"
860860
},
861-
"EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"9eda7f97d24aac861052bb47a41b80eecdd56096bf9a88a27c88d94c463785c8\"}]"
861+
"EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"c0779bd925c3a7f19be75a4973c668d10d00ce3552b882c7d2ba3fa3cee6d976\"}]"
862862
},
863863
"InputArtifacts": [
864864
{
@@ -1936,7 +1936,7 @@
19361936
]
19371937
},
19381938
"Source": {
1939-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
1939+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
19401940
"Type": "CODEPIPELINE"
19411941
},
19421942
"Cache": {
@@ -2278,7 +2278,7 @@
22782278
]
22792279
},
22802280
"Source": {
2281-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5:current_account-current_region\\\"\"\n ]\n }\n }\n}",
2281+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5:current_account-current_region\\\"\"\n ]\n }\n }\n}",
22822282
"Type": "CODEPIPELINE"
22832283
},
22842284
"Cache": {
@@ -2379,7 +2379,7 @@
23792379
]
23802380
},
23812381
"Source": {
2382-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"ac76997971c3f6ddf37120660003f1ced72b4fc58c498dfd99c78fa77e721e0e:current_account-current_region\\\"\"\n ]\n }\n }\n}",
2382+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-Beta/PipelineStackBetaStack1E6541489.assets.json\\\" --verbose publish \\\"ac76997971c3f6ddf37120660003f1ced72b4fc58c498dfd99c78fa77e721e0e:current_account-current_region\\\"\"\n ]\n }\n }\n}",
23832383
"Type": "CODEPIPELINE"
23842384
},
23852385
"Cache": {

packages/@aws-cdk/pipelines/test/integ.newpipeline.expected.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@
324324
"ProjectName": {
325325
"Ref": "PipelineUpdatePipelineSelfMutationDAA41400"
326326
},
327-
"EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"9eda7f97d24aac861052bb47a41b80eecdd56096bf9a88a27c88d94c463785c8\"}]"
327+
"EnvironmentVariables": "[{\"name\":\"_PROJECT_CONFIG_HASH\",\"type\":\"PLAINTEXT\",\"value\":\"c0779bd925c3a7f19be75a4973c668d10d00ce3552b882c7d2ba3fa3cee6d976\"}]"
328328
},
329329
"InputArtifacts": [
330330
{
@@ -2329,7 +2329,7 @@
23292329
]
23302330
},
23312331
"Source": {
2332-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
2332+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
23332333
"Type": "CODEPIPELINE"
23342334
},
23352335
"Cache": {

packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets-single-upload.expected.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,8 @@
413413
"Configuration": {
414414
"ProjectName": {
415415
"Ref": "PipelineUpdatePipelineSelfMutationDAA41400"
416-
}
416+
},
417+
"EnvironmentVariables": "[{\"name\":\"CDK_CLI_VERSION\",\"type\":\"PLAINTEXT\",\"value\":\"1\"}]"
417418
},
418419
"InputArtifacts": [
419420
{
@@ -444,7 +445,8 @@
444445
"Configuration": {
445446
"ProjectName": {
446447
"Ref": "PipelineAssetsFileAsset5D8C5DA6"
447-
}
448+
},
449+
"EnvironmentVariables": "[{\"name\":\"CDK_CLI_VERSION\",\"type\":\"PLAINTEXT\",\"value\":\"1\"}]"
448450
},
449451
"InputArtifacts": [
450452
{
@@ -1364,7 +1366,7 @@
13641366
]
13651367
},
13661368
"Source": {
1367-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
1369+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
13681370
"Type": "CODEPIPELINE"
13691371
},
13701372
"Cache": {

packages/@aws-cdk/pipelines/test/integ.pipeline-with-assets.expected.json

+9-6
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,8 @@
413413
"Configuration": {
414414
"ProjectName": {
415415
"Ref": "PipelineUpdatePipelineSelfMutationDAA41400"
416-
}
416+
},
417+
"EnvironmentVariables": "[{\"name\":\"CDK_CLI_VERSION\",\"type\":\"PLAINTEXT\",\"value\":\"1\"}]"
417418
},
418419
"InputArtifacts": [
419420
{
@@ -444,7 +445,8 @@
444445
"Configuration": {
445446
"ProjectName": {
446447
"Ref": "PipelineAssetsFileAsset185A67CB4"
447-
}
448+
},
449+
"EnvironmentVariables": "[{\"name\":\"CDK_CLI_VERSION\",\"type\":\"PLAINTEXT\",\"value\":\"1\"}]"
448450
},
449451
"InputArtifacts": [
450452
{
@@ -470,7 +472,8 @@
470472
"Configuration": {
471473
"ProjectName": {
472474
"Ref": "PipelineAssetsFileAsset24D2D639B"
473-
}
475+
},
476+
"EnvironmentVariables": "[{\"name\":\"CDK_CLI_VERSION\",\"type\":\"PLAINTEXT\",\"value\":\"1\"}]"
474477
},
475478
"InputArtifacts": [
476479
{
@@ -1390,7 +1393,7 @@
13901393
]
13911394
},
13921395
"Source": {
1393-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
1396+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
13941397
"Type": "CODEPIPELINE"
13951398
},
13961399
"Cache": {
@@ -1578,7 +1581,7 @@
15781581
]
15791582
},
15801583
"Source": {
1581-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-PreProd/PipelineStackPreProdStack65A0AD1F.assets.json\\\" --verbose publish \\\"8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5:12345678-test-region\\\"\"\n ]\n }\n }\n}",
1584+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-PreProd/PipelineStackPreProdStack65A0AD1F.assets.json\\\" --verbose publish \\\"8289faf53c7da377bb2b90615999171adef5e1d8f6b88810e5fef75e6ca09ba5:12345678-test-region\\\"\"\n ]\n }\n }\n}",
15821585
"Type": "CODEPIPELINE"
15831586
},
15841587
"Cache": {
@@ -1612,7 +1615,7 @@
16121615
]
16131616
},
16141617
"Source": {
1615-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-PreProd/PipelineStackPreProdStack65A0AD1F.assets.json\\\" --verbose publish \\\"ac76997971c3f6ddf37120660003f1ced72b4fc58c498dfd99c78fa77e721e0e:12345678-test-region\\\"\"\n ]\n }\n }\n}",
1618+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g cdk-assets@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk-assets --path \\\"assembly-PipelineStack-PreProd/PipelineStackPreProdStack65A0AD1F.assets.json\\\" --verbose publish \\\"ac76997971c3f6ddf37120660003f1ced72b4fc58c498dfd99c78fa77e721e0e:12345678-test-region\\\"\"\n ]\n }\n }\n}",
16161619
"Type": "CODEPIPELINE"
16171620
},
16181621
"Cache": {

packages/@aws-cdk/pipelines/test/integ.pipeline.expected.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,8 @@
403403
"Configuration": {
404404
"ProjectName": {
405405
"Ref": "PipelineUpdatePipelineSelfMutationDAA41400"
406-
}
406+
},
407+
"EnvironmentVariables": "[{\"name\":\"CDK_CLI_VERSION\",\"type\":\"PLAINTEXT\",\"value\":\"1\"}]"
407408
},
408409
"InputArtifacts": [
409410
{
@@ -1323,7 +1324,7 @@
13231324
]
13241325
},
13251326
"Source": {
1326-
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
1327+
"BuildSpec": "{\n \"version\": \"0.2\",\n \"phases\": {\n \"install\": {\n \"commands\": [\n \"npm install -g aws-cdk@1\"\n ]\n },\n \"build\": {\n \"commands\": [\n \"cdk -a . deploy PipelineStack --require-approval=never --verbose\"\n ]\n }\n }\n}",
13271328
"Type": "CODEPIPELINE"
13281329
},
13291330
"Cache": {

packages/aws-cdk-lib/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -594,5 +594,6 @@
594594
"./pipelines/.warnings.jsii.js": "./pipelines/.warnings.jsii.js",
595595
"./pipelines/lib/helpers-internal": "./pipelines/lib/helpers-internal/index.js",
596596
"./region-info": "./region-info/index.js"
597-
}
597+
},
598+
"preferredCdkCliVersion": "2"
598599
}

packages/monocdk/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -365,5 +365,6 @@
365365
},
366366
"publishConfig": {
367367
"tag": "latest"
368-
}
368+
},
369+
"preferredCdkCliVersion": "1"
369370
}

0 commit comments

Comments
 (0)