diff --git a/dist/index.js b/dist/index.js index 00e4a4b3..cbf8b89d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -45,7 +45,18 @@ async function run() { containerDef.image = imageURI; if (command) { - containerDef.command = command.split(' ') + const invalidCommandErrorMessage = `Invalid command: '${command}'. command must be a valid JSON array.` + try { + const parsedCommand = JSON.parse(command); + if (!Array.isArray(parsedCommand)) { + // The parsed object is not an array. + throw new Error(invalidCommandErrorMessage); + } + containerDef.command = parsedCommand; + } catch (e) { + // The string is not a valid array. + throw new Error(invalidCommandErrorMessage); + } } if (envFiles) { diff --git a/index.js b/index.js index 9bb3227b..7f240a5c 100644 --- a/index.js +++ b/index.js @@ -39,7 +39,18 @@ async function run() { containerDef.image = imageURI; if (command) { - containerDef.command = command.split(' ') + const invalidCommandErrorMessage = `Invalid command: '${command}'. command must be a valid JSON array.` + try { + const parsedCommand = JSON.parse(command); + if (!Array.isArray(parsedCommand)) { + // The parsed object is not an array. + throw new Error(invalidCommandErrorMessage); + } + containerDef.command = parsedCommand; + } catch (e) { + // The string is not a valid array. + throw new Error(invalidCommandErrorMessage); + } } if (envFiles) { diff --git a/index.test.js b/index.test.js index 90a55943..3a4e632a 100644 --- a/index.test.js +++ b/index.test.js @@ -423,7 +423,7 @@ describe('Render task definition', () => { .mockReturnValueOnce('awslogs') .mockReturnValueOnce('awslogs-create-group=true\nawslogs-group=/ecs/web\nawslogs-region=us-east-1\nawslogs-stream-prefix=ecs') .mockReturnValueOnce('key1=value1\nkey2=value2') - .mockReturnValueOnce('npm start --nice --please'); + .mockReturnValueOnce('["npm", "start", "--nice", "--please"]'); await run(); @@ -489,4 +489,21 @@ describe('Render task definition', () => { }, null, 2) ); }); + + test('error returned for invalid command', async () => { + core.getInput = jest + .fn() + .mockReturnValueOnce('task-definition.json') + .mockReturnValueOnce('web') + .mockReturnValueOnce('nginx:latest') + .mockReturnValueOnce('EXAMPLE=here') + .mockReturnValueOnce('awslogs') + .mockReturnValueOnce('awslogs-create-group=true\nawslogs-group=/ecs/web\nawslogs-region=us-east-1\nawslogs-stream-prefix=ecs') + .mockReturnValueOnce('key1=value1\nkey2=value2') + .mockReturnValueOnce('npm start --nice --please'); + + await run(); + + expect(core.setFailed).toBeCalledWith('Invalid command: \'npm start --nice --please\'. command must be a valid JSON array.'); + }); });