mirror of
				https://kkgithub.com/actions/setup-node.git
				synced 2025-10-31 10:41:57 +08:00 
			
		
		
		
	Add auth support (#21)
* Updates * Update * Update * Update * Update * Yarn sometimes prefers npmrc, so use same token * Description * Update readme * Feedback * Add type * new toolkit and scoped registries * npmrc in RUNNER_TEMP * Dont always auth * Try exporting blank token * Get auth working for now pending runner changes * Fix string interpolation for auth token. * Don't export both userconfigs * Update authutil.js * Add single quotes for authString * Fix the registry string. * Use userconfig and append trailing slash * Keep in root of repo * Try just adding auth token * Remove auth token * Try changes again * Add tests * Npm and GPR samples * Add types
This commit is contained in:
		
							
								
								
									
										50
									
								
								src/authutil.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/authutil.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| import * as fs from 'fs'; | ||||
| import * as os from 'os'; | ||||
| import * as path from 'path'; | ||||
| import * as core from '@actions/core'; | ||||
| import * as github from '@actions/github'; | ||||
|  | ||||
| export function configAuthentication(registryUrl: string) { | ||||
|   const npmrc: string = path.resolve( | ||||
|     process.env['RUNNER_TEMP'] || process.cwd(), | ||||
|     '.npmrc' | ||||
|   ); | ||||
|   if (!registryUrl.endsWith('/')) { | ||||
|     registryUrl += '/'; | ||||
|   } | ||||
|  | ||||
|   writeRegistryToFile(registryUrl, npmrc); | ||||
| } | ||||
|  | ||||
| function writeRegistryToFile(registryUrl: string, fileLocation: string) { | ||||
|   let scope: string = core.getInput('scope'); | ||||
|   if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { | ||||
|     scope = github.context.repo.owner; | ||||
|   } | ||||
|   if (scope && scope[0] != '@') { | ||||
|     scope = '@' + scope; | ||||
|   } | ||||
|  | ||||
|   core.debug(`Setting auth in ${fileLocation}`); | ||||
|   let newContents: string = ''; | ||||
|   if (fs.existsSync(fileLocation)) { | ||||
|     const curContents: string = fs.readFileSync(fileLocation, 'utf8'); | ||||
|     curContents.split(os.EOL).forEach((line: string) => { | ||||
|       // Add current contents unless they are setting the registry | ||||
|       if (!line.toLowerCase().startsWith('registry')) { | ||||
|         newContents += line + os.EOL; | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|   // Remove http: or https: from front of registry. | ||||
|   const authString: string = | ||||
|     registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}'; | ||||
|   const registryString: string = scope | ||||
|     ? `${scope}:registry=${registryUrl}` | ||||
|     : `registry=${registryUrl}`; | ||||
|   newContents += `${authString}${os.EOL}${registryString}`; | ||||
|   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 | ||||
|   core.exportVariable('NODE_AUTH_TOKEN', 'XXXXX-XXXXX-XXXXX-XXXXX'); | ||||
| } | ||||
| @ -1,5 +1,6 @@ | ||||
| import * as core from '@actions/core'; | ||||
| import * as installer from './installer'; | ||||
| import * as auth from './authutil'; | ||||
| import * as path from 'path'; | ||||
|  | ||||
| async function run() { | ||||
| @ -14,6 +15,11 @@ async function run() { | ||||
|       await installer.getNode(version); | ||||
|     } | ||||
|  | ||||
|     const registryUrl: string = core.getInput('registry-url'); | ||||
|     if (registryUrl) { | ||||
|       auth.configAuthentication(registryUrl); | ||||
|     } | ||||
|  | ||||
|     // TODO: setup proxy from runner proxy config | ||||
|     const matchersPath = path.join(__dirname, '..', '.github'); | ||||
|     console.log(`##[add-matcher]${path.join(matchersPath, 'tsc.json')}`); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Danny McCormick
					Danny McCormick