mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-04 19:38:22 +08:00 
			
		
		
		
	Add setting for always-auth (#48)
* Add setting for always-auth - https://docs.npmjs.com/misc/config#always-auth - Allow private repos for stuff like artifactory to work * Fix tests for always-auth
This commit is contained in:
		
				
					committed by
					
						
						Danny McCormick
					
				
			
			
				
	
			
			
			
						parent
						
							57adacb752
						
					
				
				
					commit
					7a3ce83626
				
			@@ -2,20 +2,30 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
exports[`installer tests Appends trailing slash to registry 1`] = `
 | 
					exports[`installer tests Appends trailing slash to registry 1`] = `
 | 
				
			||||||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
					"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
				
			||||||
registry=https://registry.npmjs.org/"
 | 
					registry=https://registry.npmjs.org/
 | 
				
			||||||
 | 
					always-auth=false"
 | 
				
			||||||
`;
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports[`installer tests Automatically configures GPR scope 1`] = `
 | 
					exports[`installer tests Automatically configures GPR scope 1`] = `
 | 
				
			||||||
"npm.pkg.github.com/:_authToken=\${NODE_AUTH_TOKEN}
 | 
					"npm.pkg.github.com/:_authToken=\${NODE_AUTH_TOKEN}
 | 
				
			||||||
@ownername:registry=npm.pkg.github.com/"
 | 
					@ownername:registry=npm.pkg.github.com/
 | 
				
			||||||
 | 
					always-auth=false"
 | 
				
			||||||
`;
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports[`installer tests Configures scoped npm registries 1`] = `
 | 
					exports[`installer tests Configures scoped npm registries 1`] = `
 | 
				
			||||||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
					"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
				
			||||||
@myscope:registry=https://registry.npmjs.org/"
 | 
					@myscope:registry=https://registry.npmjs.org/
 | 
				
			||||||
 | 
					always-auth=false"
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports[`installer tests Sets up npmrc for always-auth true 1`] = `
 | 
				
			||||||
 | 
					"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
				
			||||||
 | 
					registry=https://registry.npmjs.org/
 | 
				
			||||||
 | 
					always-auth=true"
 | 
				
			||||||
`;
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports[`installer tests Sets up npmrc for npmjs 1`] = `
 | 
					exports[`installer tests Sets up npmrc for npmjs 1`] = `
 | 
				
			||||||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
					"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
 | 
				
			||||||
registry=https://registry.npmjs.org/"
 | 
					registry=https://registry.npmjs.org/
 | 
				
			||||||
 | 
					always-auth=false"
 | 
				
			||||||
`;
 | 
					`;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,13 +33,13 @@ describe('installer tests', () => {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('Sets up npmrc for npmjs', async () => {
 | 
					  it('Sets up npmrc for npmjs', async () => {
 | 
				
			||||||
    await auth.configAuthentication('https://registry.npmjs.org/');
 | 
					    await auth.configAuthentication('https://registry.npmjs.org/', 'false');
 | 
				
			||||||
    expect(fs.existsSync(rcFile)).toBe(true);
 | 
					    expect(fs.existsSync(rcFile)).toBe(true);
 | 
				
			||||||
    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
					    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('Appends trailing slash to registry', async () => {
 | 
					  it('Appends trailing slash to registry', async () => {
 | 
				
			||||||
    await auth.configAuthentication('https://registry.npmjs.org');
 | 
					    await auth.configAuthentication('https://registry.npmjs.org', 'false');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(fs.existsSync(rcFile)).toBe(true);
 | 
					    expect(fs.existsSync(rcFile)).toBe(true);
 | 
				
			||||||
    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
					    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
				
			||||||
@@ -47,16 +47,22 @@ describe('installer tests', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  it('Configures scoped npm registries', async () => {
 | 
					  it('Configures scoped npm registries', async () => {
 | 
				
			||||||
    process.env['INPUT_SCOPE'] = 'myScope';
 | 
					    process.env['INPUT_SCOPE'] = 'myScope';
 | 
				
			||||||
    await auth.configAuthentication('https://registry.npmjs.org');
 | 
					    await auth.configAuthentication('https://registry.npmjs.org', 'false');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(fs.existsSync(rcFile)).toBe(true);
 | 
					    expect(fs.existsSync(rcFile)).toBe(true);
 | 
				
			||||||
    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
					    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('Automatically configures GPR scope', async () => {
 | 
					  it('Automatically configures GPR scope', async () => {
 | 
				
			||||||
    await auth.configAuthentication('npm.pkg.github.com');
 | 
					    await auth.configAuthentication('npm.pkg.github.com', 'false');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(fs.existsSync(rcFile)).toBe(true);
 | 
					    expect(fs.existsSync(rcFile)).toBe(true);
 | 
				
			||||||
    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
					    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('Sets up npmrc for always-auth true', async () => {
 | 
				
			||||||
 | 
					    await auth.configAuthentication('https://registry.npmjs.org/', 'true');
 | 
				
			||||||
 | 
					    expect(fs.existsSync(rcFile)).toBe(true);
 | 
				
			||||||
 | 
					    expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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'
 | 
					description: 'Setup a Node.js environment and add it to the PATH, additionally providing proxy support'
 | 
				
			||||||
author: 'GitHub'
 | 
					author: 'GitHub'
 | 
				
			||||||
inputs:
 | 
					inputs:
 | 
				
			||||||
 | 
					  always-auth:
 | 
				
			||||||
 | 
					    description: 'Set always-auth in npmrc'
 | 
				
			||||||
 | 
					    default: 'false'
 | 
				
			||||||
  node-version:
 | 
					  node-version:
 | 
				
			||||||
    description: 'Version Spec of the version to use.  Examples: 10.x, 10.15.1, >=10.15.0'
 | 
					    description: 'Version Spec of the version to use.  Examples: 10.x, 10.15.1, >=10.15.0'
 | 
				
			||||||
    default: '10.x'
 | 
					    default: '10.x'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,15 +12,15 @@ const os = __importStar(require("os"));
 | 
				
			|||||||
const path = __importStar(require("path"));
 | 
					const path = __importStar(require("path"));
 | 
				
			||||||
const core = __importStar(require("@actions/core"));
 | 
					const core = __importStar(require("@actions/core"));
 | 
				
			||||||
const github = __importStar(require("@actions/github"));
 | 
					const github = __importStar(require("@actions/github"));
 | 
				
			||||||
function configAuthentication(registryUrl) {
 | 
					function configAuthentication(registryUrl, alwaysAuth) {
 | 
				
			||||||
    const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
 | 
					    const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
 | 
				
			||||||
    if (!registryUrl.endsWith('/')) {
 | 
					    if (!registryUrl.endsWith('/')) {
 | 
				
			||||||
        registryUrl += '/';
 | 
					        registryUrl += '/';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    writeRegistryToFile(registryUrl, npmrc);
 | 
					    writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.configAuthentication = configAuthentication;
 | 
					exports.configAuthentication = configAuthentication;
 | 
				
			||||||
function writeRegistryToFile(registryUrl, fileLocation) {
 | 
					function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
 | 
				
			||||||
    let scope = core.getInput('scope');
 | 
					    let scope = core.getInput('scope');
 | 
				
			||||||
    if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
 | 
					    if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
 | 
				
			||||||
        scope = github.context.repo.owner;
 | 
					        scope = github.context.repo.owner;
 | 
				
			||||||
@@ -47,7 +47,8 @@ function writeRegistryToFile(registryUrl, fileLocation) {
 | 
				
			|||||||
    const registryString = scope
 | 
					    const registryString = scope
 | 
				
			||||||
        ? `${scope}:registry=${registryUrl}`
 | 
					        ? `${scope}:registry=${registryUrl}`
 | 
				
			||||||
        : `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);
 | 
					    fs.writeFileSync(fileLocation, newContents);
 | 
				
			||||||
    core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
 | 
					    core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
 | 
				
			||||||
    // Export empty node_auth_token so npm doesn't complain about not being able to find it
 | 
					    // Export empty node_auth_token so npm doesn't complain about not being able to find it
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,8 +35,9 @@ function run() {
 | 
				
			|||||||
                yield installer.getNode(version);
 | 
					                yield installer.getNode(version);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            const registryUrl = core.getInput('registry-url');
 | 
					            const registryUrl = core.getInput('registry-url');
 | 
				
			||||||
 | 
					            const alwaysAuth = core.getInput('always-auth');
 | 
				
			||||||
            if (registryUrl) {
 | 
					            if (registryUrl) {
 | 
				
			||||||
                auth.configAuthentication(registryUrl);
 | 
					                auth.configAuthentication(registryUrl, alwaysAuth);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // TODO: setup proxy from runner proxy config
 | 
					            // TODO: setup proxy from runner proxy config
 | 
				
			||||||
            const matchersPath = path.join(__dirname, '..', '.github');
 | 
					            const matchersPath = path.join(__dirname, '..', '.github');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ import * as path from 'path';
 | 
				
			|||||||
import * as core from '@actions/core';
 | 
					import * as core from '@actions/core';
 | 
				
			||||||
import * as github from '@actions/github';
 | 
					import * as github from '@actions/github';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function configAuthentication(registryUrl: string) {
 | 
					export function configAuthentication(registryUrl: string, alwaysAuth: string) {
 | 
				
			||||||
  const npmrc: string = path.resolve(
 | 
					  const npmrc: string = path.resolve(
 | 
				
			||||||
    process.env['RUNNER_TEMP'] || process.cwd(),
 | 
					    process.env['RUNNER_TEMP'] || process.cwd(),
 | 
				
			||||||
    '.npmrc'
 | 
					    '.npmrc'
 | 
				
			||||||
@@ -13,10 +13,14 @@ export function configAuthentication(registryUrl: string) {
 | 
				
			|||||||
    registryUrl += '/';
 | 
					    registryUrl += '/';
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  writeRegistryToFile(registryUrl, npmrc);
 | 
					  writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function writeRegistryToFile(registryUrl: string, fileLocation: string) {
 | 
					function writeRegistryToFile(
 | 
				
			||||||
 | 
					  registryUrl: string,
 | 
				
			||||||
 | 
					  fileLocation: string,
 | 
				
			||||||
 | 
					  alwaysAuth: string
 | 
				
			||||||
 | 
					) {
 | 
				
			||||||
  let scope: string = core.getInput('scope');
 | 
					  let scope: string = core.getInput('scope');
 | 
				
			||||||
  if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
 | 
					  if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
 | 
				
			||||||
    scope = github.context.repo.owner;
 | 
					    scope = github.context.repo.owner;
 | 
				
			||||||
@@ -45,7 +49,8 @@ function writeRegistryToFile(registryUrl: string, fileLocation: string) {
 | 
				
			|||||||
  const registryString: string = scope
 | 
					  const registryString: string = scope
 | 
				
			||||||
    ? `${scope}:registry=${registryUrl}`
 | 
					    ? `${scope}:registry=${registryUrl}`
 | 
				
			||||||
    : `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);
 | 
					  fs.writeFileSync(fileLocation, newContents);
 | 
				
			||||||
  core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
 | 
					  core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
 | 
				
			||||||
  // Export empty node_auth_token so npm doesn't complain about not being able to find it
 | 
					  // Export empty node_auth_token so npm doesn't complain about not being able to find it
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,8 +19,9 @@ async function run() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const registryUrl: string = core.getInput('registry-url');
 | 
					    const registryUrl: string = core.getInput('registry-url');
 | 
				
			||||||
 | 
					    const alwaysAuth: string = core.getInput('always-auth');
 | 
				
			||||||
    if (registryUrl) {
 | 
					    if (registryUrl) {
 | 
				
			||||||
      auth.configAuthentication(registryUrl);
 | 
					      auth.configAuthentication(registryUrl, alwaysAuth);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO: setup proxy from runner proxy config
 | 
					    // TODO: setup proxy from runner proxy config
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user