From 8dda0a7612fe7e2ffb6948147535425d89dc930b Mon Sep 17 00:00:00 2001 From: snaksa Date: Wed, 13 Sep 2023 17:13:01 +0300 Subject: [PATCH 1/2] fix(cli): equals sign in a tag value is dropped --- packages/aws-cdk/lib/settings.ts | 2 +- packages/aws-cdk/test/settings.test.ts | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk/lib/settings.ts b/packages/aws-cdk/lib/settings.ts index e24ca92468162..f8a4b0b789dd4 100644 --- a/packages/aws-cdk/lib/settings.ts +++ b/packages/aws-cdk/lib/settings.ts @@ -336,7 +336,7 @@ export class Settings { const tags: Tag[] = []; for (const assignment of nonEmptyTags) { - const parts = assignment.split('=', 2); + const parts = assignment.split(/=(.*)/, 2); if (parts.length === 2) { debug('CLI argument tags: %s=%s', parts[0], parts[1]); tags.push({ diff --git a/packages/aws-cdk/test/settings.test.ts b/packages/aws-cdk/test/settings.test.ts index 0738febc435c0..0a4289a13e5e9 100644 --- a/packages/aws-cdk/test/settings.test.ts +++ b/packages/aws-cdk/test/settings.test.ts @@ -1,5 +1,6 @@ /* eslint-disable import/order */ import { Command, Context, Settings } from '../lib/settings'; +import { Tag } from '../lib/cdk-toolkit'; test('can delete values from Context object', () => { // GIVEN @@ -81,6 +82,26 @@ test('can parse string context from command line arguments with equals sign in v expect(settings2.get(['context']).foo).toEqual( 'bar='); }); +test('can parse tag values from command line arguments', () => { + // GIVEN + const settings1 = Settings.fromCommandLineArguments({ tags: ['foo=bar'], _: [Command.DEPLOY] }); + const settings2 = Settings.fromCommandLineArguments({ tags: ['foo='], _: [Command.DEPLOY] }); + + // THEN + expect(settings1.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( 'bar'); + expect(settings2.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( ''); +}); + +test('can parse tag values from command line arguments with equals sign in value', () => { + // GIVEN + const settings1 = Settings.fromCommandLineArguments({ tags: ['foo==bar='], _: [Command.DEPLOY] }); + const settings2 = Settings.fromCommandLineArguments({ tags: ['foo=bar='], _: [Command.DEPLOY] }); + + // THEN + expect(settings1.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( '=bar='); + expect(settings2.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( 'bar='); +}); + test('bundling stacks defaults to an empty list', () => { // GIVEN const settings = Settings.fromCommandLineArguments({ From e9ba066d614569328c49ffa8755745baee2e89e6 Mon Sep 17 00:00:00 2001 From: snaksa Date: Wed, 13 Sep 2023 17:27:03 +0300 Subject: [PATCH 2/2] fix(cli): equals sign in a tag value is dropped --- packages/aws-cdk/test/settings.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/aws-cdk/test/settings.test.ts b/packages/aws-cdk/test/settings.test.ts index 0a4289a13e5e9..fde5c1c74665c 100644 --- a/packages/aws-cdk/test/settings.test.ts +++ b/packages/aws-cdk/test/settings.test.ts @@ -88,8 +88,8 @@ test('can parse tag values from command line arguments', () => { const settings2 = Settings.fromCommandLineArguments({ tags: ['foo='], _: [Command.DEPLOY] }); // THEN - expect(settings1.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( 'bar'); - expect(settings2.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( ''); + expect(settings1.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual('bar'); + expect(settings2.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual(''); }); test('can parse tag values from command line arguments with equals sign in value', () => { @@ -98,8 +98,8 @@ test('can parse tag values from command line arguments with equals sign in value const settings2 = Settings.fromCommandLineArguments({ tags: ['foo=bar='], _: [Command.DEPLOY] }); // THEN - expect(settings1.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( '=bar='); - expect(settings2.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual( 'bar='); + expect(settings1.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual('=bar='); + expect(settings2.get(['tags']).find((tag: Tag) => tag.Key === 'foo').Value).toEqual('bar='); }); test('bundling stacks defaults to an empty list', () => {