mirror of
				https://github.com/actions/setup-node.git
				synced 2025-10-31 16:03:33 +00: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:
		
							parent
							
								
									57adacb752
								
							
						
					
					
						commit
						7a3ce83626
					
				| @ -2,20 +2,30 @@ | ||||
| 
 | ||||
| exports[`installer tests Appends trailing slash to registry 1`] = ` | ||||
| "//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`] = ` | ||||
| "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`] = ` | ||||
| "//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`] = ` | ||||
| "//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 () => { | ||||
|     await auth.configAuthentication('https://registry.npmjs.org/'); | ||||
|     await auth.configAuthentication('https://registry.npmjs.org/', 'false'); | ||||
|     expect(fs.existsSync(rcFile)).toBe(true); | ||||
|     expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||||
|   }); | ||||
| 
 | ||||
|   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.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||||
| @ -47,16 +47,22 @@ describe('installer tests', () => { | ||||
| 
 | ||||
|   it('Configures scoped npm registries', async () => { | ||||
|     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.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||||
|   }); | ||||
| 
 | ||||
|   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.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' | ||||
| 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' | ||||
|  | ||||
| @ -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, 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
 | ||||
|  | ||||
| @ -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'); | ||||
|  | ||||
| @ -4,7 +4,7 @@ import * as path from 'path'; | ||||
| import * as core from '@actions/core'; | ||||
| import * as github from '@actions/github'; | ||||
| 
 | ||||
| export function configAuthentication(registryUrl: string) { | ||||
| export function configAuthentication(registryUrl: string, alwaysAuth: string) { | ||||
|   const npmrc: string = path.resolve( | ||||
|     process.env['RUNNER_TEMP'] || process.cwd(), | ||||
|     '.npmrc' | ||||
| @ -13,10 +13,14 @@ export function configAuthentication(registryUrl: string) { | ||||
|     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'); | ||||
|   if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { | ||||
|     scope = github.context.repo.owner; | ||||
| @ -45,7 +49,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
 | ||||
|  | ||||
| @ -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
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user