From f8ead03bf1665f8dcae6821ddcb74e7ffc21cca1 Mon Sep 17 00:00:00 2001 From: Vladimir Starkov Date: Sun, 5 Jan 2025 11:54:59 +0100 Subject: [PATCH 1/2] feat: add core.getStringAsArray to parse array-like inputs (separated by either commas or new lines) --- packages/core/README.md | 1 + packages/core/__tests__/core.test.ts | 13 +++++++++++++ packages/core/src/core.ts | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+) 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..fedc3224d1 100644 --- a/packages/core/__tests__/core.test.ts +++ b/packages/core/__tests__/core.test.ts @@ -294,6 +294,19 @@ 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,, + `, { + trimWhitespace: false + }) + ).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` . From f43201768f9c5a7307c88d326501608300f32c48 Mon Sep 17 00:00:00 2001 From: Vladimir Starkov Date: Sun, 5 Jan 2025 11:59:53 +0100 Subject: [PATCH 2/2] test: getStringAsArray doesnt take options, so those are removed from tests --- packages/core/__tests__/core.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/core/__tests__/core.test.ts b/packages/core/__tests__/core.test.ts index fedc3224d1..4556032a3d 100644 --- a/packages/core/__tests__/core.test.ts +++ b/packages/core/__tests__/core.test.ts @@ -301,9 +301,7 @@ describe('@actions/core', () => { line 2, comma 1, comma 2,, - `, { - trimWhitespace: false - }) + `) ).toEqual(['line 1', 'line 2', 'comma 1', 'comma 2']) })