mirror of
				https://github.com/actions/setup-node.git
				synced 2025-10-31 16:14:00 +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:
		 David J. Felix
					David J. Felix
				
			
				
					committed by
					
						 Danny McCormick
						Danny McCormick
					
				
			
			
				
	
			
			
			 Danny McCormick
						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