From 9c950f557cdfa1d99096907f1f914fb3469c1c81 Mon Sep 17 00:00:00 2001 From: "David J. Felix" Date: Wed, 28 Aug 2019 20:03:12 -0400 Subject: [PATCH] Add setting for always-auth - https://docs.npmjs.com/misc/config#always-auth - Allow private repos for stuff like artifactory to work --- action.yml | 3 +++ lib/authutil.js | 9 +++++---- lib/setup-node.js | 3 ++- src/authutil.ts | 25 +++++++++++++++++++++---- src/setup-node.ts | 3 ++- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/action.yml b/action.yml index 49c9efe6..d6feb020 100644 --- a/action.yml +++ b/action.yml @@ -2,6 +2,9 @@ name: 'Setup Node.js environment' description: 'Setup a Node.js environment and add it to the PATH, additionally providing proxy support' author: 'GitHub' inputs: + always-auth: + description: 'Set always-auth in npmrc' + default: 'false' node-version: description: 'Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0' default: '10.x' diff --git a/lib/authutil.js b/lib/authutil.js index bb85fff3..1be060ac 100644 --- a/lib/authutil.js +++ b/lib/authutil.js @@ -12,15 +12,15 @@ const os = __importStar(require("os")); const path = __importStar(require("path")); const core = __importStar(require("@actions/core")); const github = __importStar(require("@actions/github")); -function configAuthentication(registryUrl) { +function configAuthentication({ registryUrl, alwaysAuth }) { const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc'); if (!registryUrl.endsWith('/')) { registryUrl += '/'; } - writeRegistryToFile(registryUrl, npmrc); + writeRegistryToFile({ registryUrl, fileLocation: npmrc, alwaysAuth }); } exports.configAuthentication = configAuthentication; -function writeRegistryToFile(registryUrl, fileLocation) { +function writeRegistryToFile({ registryUrl, fileLocation, alwaysAuth }) { let scope = core.getInput('scope'); if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { scope = github.context.repo.owner; @@ -47,7 +47,8 @@ function writeRegistryToFile(registryUrl, fileLocation) { const registryString = scope ? `${scope}:registry=${registryUrl}` : `registry=${registryUrl}`; - newContents += `${authString}${os.EOL}${registryString}`; + const alwaysAuthString = `always-auth=${alwaysAuth}`; + newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`; fs.writeFileSync(fileLocation, newContents); core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation); // Export empty node_auth_token so npm doesn't complain about not being able to find it diff --git a/lib/setup-node.js b/lib/setup-node.js index dc65699b..aa2cf306 100644 --- a/lib/setup-node.js +++ b/lib/setup-node.js @@ -35,8 +35,9 @@ function run() { yield installer.getNode(version); } const registryUrl = core.getInput('registry-url'); + const alwaysAuth = core.getInput('always-auth'); if (registryUrl) { - auth.configAuthentication(registryUrl); + auth.configAuthentication({ registryUrl, alwaysAuth }); } // TODO: setup proxy from runner proxy config const matchersPath = path.join(__dirname, '..', '.github'); diff --git a/src/authutil.ts b/src/authutil.ts index 99f78efe..0dbeb487 100644 --- a/src/authutil.ts +++ b/src/authutil.ts @@ -4,7 +4,14 @@ import * as path from 'path'; import * as core from '@actions/core'; import * as github from '@actions/github'; -export function configAuthentication(registryUrl: string) { +interface ConfigureAuthenticationParams { + registryUrl: string; + alwaysAuth: string; +} +export function configAuthentication({ + registryUrl, + alwaysAuth +}: ConfigureAuthenticationParams) { const npmrc: string = path.resolve( process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc' @@ -13,10 +20,19 @@ export function configAuthentication(registryUrl: string) { registryUrl += '/'; } - writeRegistryToFile(registryUrl, npmrc); + writeRegistryToFile({registryUrl, fileLocation: npmrc, alwaysAuth}); } -function writeRegistryToFile(registryUrl: string, fileLocation: string) { +interface WriteRegistryToFileParams { + registryUrl: string; + fileLocation: string; + alwaysAuth: string; +} +function writeRegistryToFile({ + registryUrl, + fileLocation, + alwaysAuth +}: WriteRegistryToFileParams) { let scope: string = core.getInput('scope'); if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { scope = github.context.repo.owner; @@ -45,7 +61,8 @@ function writeRegistryToFile(registryUrl: string, fileLocation: string) { const registryString: string = scope ? `${scope}:registry=${registryUrl}` : `registry=${registryUrl}`; - newContents += `${authString}${os.EOL}${registryString}`; + const alwaysAuthString: string = `always-auth=${alwaysAuth}`; + newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`; fs.writeFileSync(fileLocation, newContents); core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation); // Export empty node_auth_token so npm doesn't complain about not being able to find it diff --git a/src/setup-node.ts b/src/setup-node.ts index f82413a0..b3ee36d5 100644 --- a/src/setup-node.ts +++ b/src/setup-node.ts @@ -19,8 +19,9 @@ async function run() { } const registryUrl: string = core.getInput('registry-url'); + const alwaysAuth: string = core.getInput('always-auth'); if (registryUrl) { - auth.configAuthentication(registryUrl); + auth.configAuthentication({registryUrl, alwaysAuth}); } // TODO: setup proxy from runner proxy config