diff --git a/packages/artifact/package-lock.json b/packages/artifact/package-lock.json index d8cd2feb44..d4a64a1e36 100644 --- a/packages/artifact/package-lock.json +++ b/packages/artifact/package-lock.json @@ -4,11 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@actions/core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.1.tgz", - "integrity": "sha512-xD+CQd9p4lU7ZfRqmUcbJpqR+Ss51rJRVeXMyOLrZQImN9/8Sy/BEUBnHO/UKD3z03R686PVTLfEPmkropGuLw==" - }, "@actions/http-client": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.6.tgz", diff --git a/packages/core/__tests__/core.test.ts b/packages/core/__tests__/core.test.ts index 90235428e8..fe1f985642 100644 --- a/packages/core/__tests__/core.test.ts +++ b/packages/core/__tests__/core.test.ts @@ -18,6 +18,8 @@ const testEnvVars = { INPUT_MISSING: '', 'INPUT_SPECIAL_CHARS_\'\t"\\': '\'\t"\\ response ', INPUT_MULTIPLE_SPACES_VARIABLE: 'I have multiple spaces', + INPUT_YAML_BOOLEAN_FALSE: 'OFF', + INPUT_YAML_BOOLEAN_TRUE: 'y', // Save inputs STATE_TEST_1: 'state_val' @@ -99,6 +101,11 @@ describe('@actions/core', () => { ) }) + it('getInput handles boolean values', () => { + expect(core.getInput('yaml boolean false')).toBe(false) + expect(core.getInput('yaml boolean true')).toBe(true) + }) + it('setOutput produces the correct command', () => { core.setOutput('some output', 'some value') assertWriteCalls([`::set-output name=some output::some value${os.EOL}`]) diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index dcaab53e58..52f042285f 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -57,20 +57,29 @@ export function addPath(inputPath: string): void { process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}` } +const isBoolRegex = /^(y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)$/ +const isTrueRegex = /^(y|Y|yes|Yes|YES|true|True|TRUE|on|On|ON)$/ /** * Gets the value of an input. The value is also trimmed. * * @param name name of the input to get * @param options optional. See InputOptions. - * @returns string + * @returns {(string|boolean)} */ -export function getInput(name: string, options?: InputOptions): string { +export function getInput( + name: string, + options?: InputOptions +): string | boolean { const val: string = - process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '' - if (options && options.required && !val) { + process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] ?? '' + if (options?.required && val === '') { throw new Error(`Input required and not supplied: ${name}`) } + if (isBoolRegex.test(val)) { + return isTrueRegex.test(val) + } + return val.trim() }