diff --git a/README.md b/README.md index 5643aad..e6b9704 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,10 @@ Install PNPM package manager. **Optional** Registry to download PNPM from. +### `run_install` + +**Optional** If specified, run `pnpm install`. + ## Outputs ### `dest` diff --git a/action.yml b/action.yml index 4da87a9..9de6293 100644 --- a/action.yml +++ b/action.yml @@ -19,6 +19,10 @@ inputs: description: Registry to download PNPM from required: false default: https://registry.npmjs.com + run_install: + description: If specified, run `pnpm install` + required: false + default: 'null' runs: using: node12 main: dist/index.js diff --git a/dist/index.js b/dist/index.js index c1a9000..96a6802 100644 Binary files a/dist/index.js and b/dist/index.js differ diff --git a/package.json b/package.json index a433b49..020857e 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,11 @@ "dependencies": { "node-fetch": "^2.6.0", "expand-tilde": "^2.0.2", + "js-yaml": "^3.13.1", "@actions/core": "^1.2.4", "@types/expand-tilde": "^2.0.0", "@types/node-fetch": "^2.5.7", + "@types/js-yaml": "^3.12.3", "@types/node": "^13.13.5" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94d47d9..fb3c880 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,11 @@ dependencies: '@actions/core': 1.2.4 '@types/expand-tilde': 2.0.0 + '@types/js-yaml': 3.12.3 '@types/node': 13.13.5 '@types/node-fetch': 2.5.7 expand-tilde: 2.0.2 + js-yaml: 3.13.1 node-fetch: 2.6.0 devDependencies: '@zeit/ncc': 0.22.1 @@ -18,6 +20,10 @@ packages: dev: false resolution: integrity: sha512-17h/6MRHoetV2QVUVnUfrmaFCXNIFJ3uDJmXlklX2xDtlEb1W0OXLgP+qwND2Ibg/PtQfQi0vx19KGuPayjLiw== + /@types/js-yaml/3.12.3: + dev: false + resolution: + integrity: sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA== /@types/node-fetch/2.5.7: dependencies: '@types/node': 13.13.5 @@ -34,6 +40,12 @@ packages: hasBin: true resolution: integrity: sha512-Qq3bMuonkcnV/96jhy9SQYdh39NXHxNMJ1O31ZFzWG9n52fR2DLtgrNzhj/ahlEjnBziMLGVWDbaS9sf03/fEw== + /argparse/1.0.10: + dependencies: + sprintf-js: 1.0.3 + dev: false + resolution: + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== /asynckit/0.4.0: dev: false resolution: @@ -52,6 +64,13 @@ packages: node: '>=0.4.0' resolution: integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + /esprima/4.0.1: + dev: false + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== /expand-tilde/2.0.2: dependencies: homedir-polyfill: 1.0.3 @@ -78,6 +97,14 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + /js-yaml/3.13.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + hasBin: true + resolution: + integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== /mime-db/1.44.0: dev: false engines: @@ -104,6 +131,10 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + /sprintf-js/1.0.3: + dev: false + resolution: + integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= /typescript/3.8.3: dev: true engines: @@ -114,9 +145,11 @@ packages: specifiers: '@actions/core': ^1.2.4 '@types/expand-tilde': ^2.0.0 + '@types/js-yaml': ^3.12.3 '@types/node': ^13.13.5 '@types/node-fetch': ^2.5.7 '@zeit/ncc': ^0.22.1 expand-tilde: ^2.0.2 + js-yaml: ^3.13.1 node-fetch: ^2.6.0 typescript: ^3.8.3 diff --git a/src/inputs/index.ts b/src/inputs/index.ts index 9fa12ab..c99b619 100644 --- a/src/inputs/index.ts +++ b/src/inputs/index.ts @@ -1,11 +1,25 @@ import { getInput, InputOptions } from '@actions/core' import expandTilde from 'expand-tilde' +import { safeLoad } from 'js-yaml' + +interface RunInstall { + readonly recursive?: boolean + readonly cwd?: string + readonly args?: readonly string[] +} + +type RunInstallInput = + | null + | boolean + | RunInstall + | RunInstall[] export interface Inputs { readonly version: string readonly dest: string readonly binDest: string readonly registry: string + readonly runInstall: RunInstall[] } const options: InputOptions = { @@ -14,11 +28,20 @@ const options: InputOptions = { const parseInputPath = (name: string) => expandTilde(getInput(name, options)) +function parseRunInstall(name: string): RunInstall[] { + const result: RunInstallInput = safeLoad(getInput(name, options)) + if (!result) return [] + if (result === true) return [{ recursive: true }] + if (Array.isArray(result)) return result + return [result] +} + export const getInputs = (): Inputs => ({ version: getInput('version', options), dest: parseInputPath('dest'), binDest: parseInputPath('bin_dest'), registry: getInput('registry', options), + runInstall: parseRunInstall('run_install'), }) export default getInputs