diff --git a/packages/core/README.md b/packages/core/README.md index ac8ced92bb..0799701b05 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -24,6 +24,7 @@ Outputs can be set with `setOutput` which makes them available to be mapped into const myInput = core.getInput('inputName', { required: true }); const myBooleanInput = core.getBooleanInput('booleanInputName', { required: true }); const myMultilineInput = core.getMultilineInput('multilineInputName', { required: true }); +const myArrayInput = core.getStringAsArray('stringAsArray', { required: true }); core.setOutput('outputKey', 'outputVal'); ``` diff --git a/packages/core/__tests__/core.test.ts b/packages/core/__tests__/core.test.ts index 2928788d7f..4556032a3d 100644 --- a/packages/core/__tests__/core.test.ts +++ b/packages/core/__tests__/core.test.ts @@ -294,6 +294,17 @@ describe('@actions/core', () => { ).toEqual([' val1 ', ' val2 ', ' ']) }) + it('getStringAsArray; separated by either comma or new line', () => { + expect( + core.getStringAsArray(` + line 1, + line 2, + + comma 1, comma 2,, + `) + ).toEqual(['line 1', 'line 2', 'comma 1', 'comma 2']) + }) + it('legacy setOutput produces the correct command', () => { core.setOutput('some output', 'some value') assertWriteCalls([ diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 0a1416937c..1725af68e9 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -160,6 +160,25 @@ export function getMultilineInput( return inputs.map(input => input.trim()) } +/** + * Gets the values of an array-like input (separated by comma or new lines). Each value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string[] + * + */ +export function getStringAsArray( + name: string, + options?: InputOptions +): string[] { + const inputs: string[] = getInput(name, options) + .split(/[\n,]+/) + .map(s => s.trim()) + .filter(x => x !== ''); + return inputs; +} + /** * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. * Support boolean input list: `true | True | TRUE | false | False | FALSE` .