Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/adk-core/lib/toolkit/sdk/core/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export function getEnvironmentVariable(inputVar: string) {
/**
* Sets the output value for the action output parameter.
*
* @param varName The name of the environment variable. The variable must match the ^[A-Za-z0-9][A-Za-z0-9\-_]{1,30}[A-Za-z0-9]$ pattern.
* @param varName The name of the environment variable. The variable must match the ^[A-Za-z0-9@\-_]+$ pattern.
* @param varValue The fully resolved value of the output variable.
*
* @return The result of running `echo ${varName}`.
Expand Down
22 changes: 12 additions & 10 deletions packages/adk-core/test/core.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,20 @@ describe('@aws/codecatalyst-adk-core', () => {
it('test setOutput validation', () => {
const errorMessage = `Invalid output parameter name, it must match the following pattern ${outputVariableNamePattern}`;
const outputParamValue = 'outputParamValue';
const validInput30Chars = 'Stack_ID_12345678910111213145';
const validInput40Chars = 'Stack_ID-1234567891011121314512345678911';

const validInput = 'Stack_ID';
const emptyInput = '';
const invalidInput = 'Stack ID';
const tooLongInput = 'longer_than_30_chars_123456789101112131415161718';
const startsWithInvalidChar = '-Stack_ID';
const endsWithInvalidChar = 'Stack_ID-';
const maxInput = 'max_input_255_chars_1234567891011121314151617184876123578457689295628925764582347652874956284956824123456789101112131415161718487612357845768929562892576458234765287495628495682412345678910111213141516171848761235784576892956289257645823476528749562849591';
const tooLongInput = 'longer_than_255_chars_123456789101112131415161718487612357845768929562892576458234765287495628495682412345678910111213141516171848761235784576892956289257645823476528749562849568241234567891011121314151617184876123578457689295628925764582347652874956284959';
const validInputSpecialChar = '-StackA_a-@_ID';
const invalidInputWithInvalidSpecialChar = 'Stack$#:ID';

expect(adkCore.setOutput(validInput30Chars, outputParamValue).code === undefined).toBeTruthy();
expect(adkCore.setOutput(validInput40Chars, outputParamValue).code === undefined).toBeTruthy();
expect(adkCore.setOutput(validInput, outputParamValue).code === undefined).toBeTruthy();
expect(adkCore.setOutput(validInputSpecialChar, outputParamValue).code === undefined).toBeTruthy();
expect(adkCore.setOutput(maxInput, outputParamValue).code === undefined).toBeTruthy();

expect(adkCore.setOutput(emptyInput, outputParamValue).code === 1).toBeTruthy();
expect(adkCore.setOutput(emptyInput, outputParamValue).stdout === errorMessage).toBeTruthy();
Expand All @@ -96,11 +101,8 @@ describe('@aws/codecatalyst-adk-core', () => {
expect(adkCore.setOutput(tooLongInput, outputParamValue).code === 1).toBeTruthy();
expect(adkCore.setOutput(tooLongInput, outputParamValue).stdout === errorMessage).toBeTruthy();

expect(adkCore.setOutput(startsWithInvalidChar, outputParamValue).code === 1).toBeTruthy();
expect(adkCore.setOutput(startsWithInvalidChar, outputParamValue).stdout === errorMessage).toBeTruthy();

expect(adkCore.setOutput(endsWithInvalidChar, outputParamValue).code === 1).toBeTruthy();
expect(adkCore.setOutput(endsWithInvalidChar, outputParamValue).stdout === errorMessage).toBeTruthy();
expect(adkCore.setOutput(invalidInputWithInvalidSpecialChar, outputParamValue).code === 1).toBeTruthy();
expect(adkCore.setOutput(invalidInputWithInvalidSpecialChar, outputParamValue).stdout === errorMessage).toBeTruthy();
});

});
5 changes: 4 additions & 1 deletion packages/adk-utils/lib/util/util.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import fs from 'fs';

export const outputVariableNamePattern = new RegExp(/^[A-Za-z0-9][A-Za-z0-9\-_]{1,30}[A-Za-z0-9]$/);
export const outputVariableNamePattern = new RegExp(/^[A-Za-z0-9@\-_]+$/);

/**
* Sanitizes (escapes) special characters in the command and its arguments.
Expand Down Expand Up @@ -91,5 +91,8 @@ export function writeContentToFileSync(dest: string, content: string, overrideDe
* @param varName The destination file.
*/
export function isValidOutputVariableName(varName: string): boolean {
if (!varName || varName.length < 1 || varName.length > 255) {
return false;
}
return outputVariableNamePattern.test(varName);
}
16 changes: 9 additions & 7 deletions packages/adk-utils/test/util.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,19 +129,21 @@ describe('ADK-Util test', () => {

it('test validateOutputVariableName', async () => {
const validInput = 'Stack_ID';
const validInput30Chars = 'Stack_ID_12345678910111213145';
const validInput40Chars = 'Stack_ID-1234567891011121314512345678911';
const emptyInput = '';
const invalidInput = 'Stack ID';
const tooLongInput = 'longer_than_30_chars_123456789101112131415161718';
const startsWithInvalidChar = '-Stack_ID';
const endsWithInvalidChar = 'Stack_ID-';
const maxInput = 'max_input_255_chars_1234567891011121314151617184876123578457689295628925764582347652874956284956824123456789101112131415161718487612357845768929562892576458234765287495628495682412345678910111213141516171848761235784576892956289257645823476528749562849591';
const tooLongInput = 'longer_than_255_chars_123456789101112131415161718487612357845768929562892576458234765287495628495682412345678910111213141516171848761235784576892956289257645823476528749562849568241234567891011121314151617184876123578457689295628925764582347652874956284959';
const validInputSpecialChar = '-StackA_a-@_ID';
const invalidInputWithInvalidSpecialChar = 'Stack/$#:ID';

expect(isValidOutputVariableName(validInput)).toBeTruthy();
expect(isValidOutputVariableName(validInput30Chars)).toBeTruthy();
expect(isValidOutputVariableName(validInput40Chars)).toBeTruthy();
expect(isValidOutputVariableName(emptyInput)).toBeFalsy();
expect(isValidOutputVariableName(invalidInput)).toBeFalsy();
expect(isValidOutputVariableName(maxInput)).toBeTruthy();
expect(isValidOutputVariableName(tooLongInput)).toBeFalsy();
expect(isValidOutputVariableName(startsWithInvalidChar)).toBeFalsy();
expect(isValidOutputVariableName(endsWithInvalidChar)).toBeFalsy();
expect(isValidOutputVariableName(validInputSpecialChar)).toBeTruthy();
expect(isValidOutputVariableName(invalidInputWithInvalidSpecialChar)).toBeFalsy();
});
});
2 changes: 1 addition & 1 deletion packages/adk/templates/codecatalyst_model_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@
"description": "Action output variables",
"type": "object",
"propertyNames": {
"pattern": "^[A-Za-z0-9][A-Za-z0-9\\-_]{1,30}[A-Za-z0-9]$"
"pattern": "^[A-Za-z0-9@\\-_]+$"
},
"minProperties": 1,
"maxProperties": 10,
Expand Down