Skip to content

Commit c2c5d3f

Browse files
authored
feat: modify multiple feature flag values to their recommended states (#750)
Allows users to change multiple feature flags to their recommended states and displays differences in CloudFormation templates. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license
1 parent 8be6aad commit c2c5d3f

File tree

9 files changed

+475
-141
lines changed

9 files changed

+475
-141
lines changed

packages/@aws-cdk/toolkit-lib/lib/toolkit/toolkit.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,7 @@ export class Toolkit extends CloudAssemblySourceBuilder {
12961296
recommendedValue: flagInfo.recommendedValue,
12971297
userValue: flagInfo.userValue ?? undefined,
12981298
explanation: flagInfo.explanation ?? '',
1299+
unconfiguredBehavesLike: flagInfo.unconfiguredBehavesLike,
12991300
}));
13001301
});
13011302
}

packages/@aws-cdk/toolkit-lib/lib/toolkit/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,5 @@ export interface FeatureFlag {
123123
readonly recommendedValue: unknown;
124124
readonly userValue?: unknown;
125125
readonly explanation?: string;
126+
readonly unconfiguredBehavesLike?: { [key: string]: any };
126127
}

packages/aws-cdk/lib/cli/cli-config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ export async function makeConfig(): Promise<CliConfig> {
123123
value: { type: 'string', desc: 'The value the user would like to set the feature flag configuration to', requiresArg: true },
124124
set: { type: 'boolean', desc: 'Signifies the user would like to modify their feature flag configuration', requiresArg: false },
125125
all: { type: 'boolean', desc: 'Modify or view all feature flags', requiresArg: false },
126+
unconfigured: { type: 'boolean', desc: 'Modify unconfigured feature flags', requiresArg: false },
127+
recommended: { type: 'boolean', desc: 'Change flags to recommended states', requiresArg: false },
128+
default: { type: 'boolean', desc: 'Change flags to default state', requiresArg: false },
126129
},
127130
},
128131
'deploy': {

packages/aws-cdk/lib/cli/cli-type-registry.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,21 @@
350350
"type": "boolean",
351351
"desc": "Modify or view all feature flags",
352352
"requiresArg": false
353+
},
354+
"unconfigured": {
355+
"type": "boolean",
356+
"desc": "Modify unconfigured feature flags",
357+
"requiresArg": false
358+
},
359+
"recommended": {
360+
"type": "boolean",
361+
"desc": "Change flags to recommended states",
362+
"requiresArg": false
363+
},
364+
"default": {
365+
"type": "boolean",
366+
"desc": "Change flags to default state",
367+
"requiresArg": false
353368
}
354369
}
355370
},

packages/aws-cdk/lib/cli/convert-to-user-input.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ export function convertYargsToUserInput(args: any): UserInput {
9999
value: args.value,
100100
set: args.set,
101101
all: args.all,
102+
unconfigured: args.unconfigured,
103+
recommended: args.recommended,
104+
default: args.default,
102105
FLAGNAME: args.FLAGNAME,
103106
};
104107
break;
@@ -375,6 +378,9 @@ export function convertConfigToUserInput(config: any): UserInput {
375378
value: config.flags?.value,
376379
set: config.flags?.set,
377380
all: config.flags?.all,
381+
unconfigured: config.flags?.unconfigured,
382+
recommended: config.flags?.recommended,
383+
default: config.flags?.default,
378384
};
379385
const deployOptions = {
380386
all: config.deploy?.all,

packages/aws-cdk/lib/cli/parse-command-line-arguments.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,24 @@ export function parseCommandLineArguments(args: Array<string>): any {
371371
type: 'boolean',
372372
desc: 'Modify or view all feature flags',
373373
requiresArg: false,
374+
})
375+
.option('unconfigured', {
376+
default: undefined,
377+
type: 'boolean',
378+
desc: 'Modify unconfigured feature flags',
379+
requiresArg: false,
380+
})
381+
.option('recommended', {
382+
default: undefined,
383+
type: 'boolean',
384+
desc: 'Change flags to recommended states',
385+
requiresArg: false,
386+
})
387+
.option('default', {
388+
default: undefined,
389+
type: 'boolean',
390+
desc: 'Change flags to default state',
391+
requiresArg: false,
374392
}),
375393
)
376394
.command('deploy [STACKS..]', 'Deploys the stack(s) named STACKS into your AWS account', (yargs: Argv) =>

packages/aws-cdk/lib/cli/user-input.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,27 @@ export interface FlagsOptions {
636636
*/
637637
readonly all?: boolean;
638638

639+
/**
640+
* Modify unconfigured feature flags
641+
*
642+
* @default - undefined
643+
*/
644+
readonly unconfigured?: boolean;
645+
646+
/**
647+
* Change flags to recommended states
648+
*
649+
* @default - undefined
650+
*/
651+
readonly recommended?: boolean;
652+
653+
/**
654+
* Change flags to default state
655+
*
656+
* @default - undefined
657+
*/
658+
readonly default?: boolean;
659+
639660
/**
640661
* Positional argument for flags
641662
*/

0 commit comments

Comments
 (0)