| 
									
										
										
										
											2019-11-15 16:01:13 -08:00
										 |  |  | import * as fs from 'fs'; | 
					
						
							|  |  |  | import * as os from 'os'; | 
					
						
							|  |  |  | import * as path from 'path'; | 
					
						
							|  |  |  | import * as core from '@actions/core'; | 
					
						
							|  |  |  | import * as io from '@actions/io'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-20 10:25:21 -08:00
										 |  |  | export const M2_DIR = '.m2'; | 
					
						
							|  |  |  | export const SETTINGS_FILE = 'settings.xml'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-19 11:28:11 -08:00
										 |  |  | export const DEFAULT_ID = 'github'; | 
					
						
							|  |  |  | export const DEFAULT_USERNAME = 'GITHUB_ACTOR'; | 
					
						
							|  |  |  | export const DEFAULT_PASSWORD = 'GITHUB_TOKEN'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-28 12:40:45 -08:00
										 |  |  | export async function configAuthentication( | 
					
						
							| 
									
										
										
										
											2019-12-19 11:28:11 -08:00
										 |  |  |   id = DEFAULT_ID, | 
					
						
							|  |  |  |   username = DEFAULT_USERNAME, | 
					
						
							|  |  |  |   password = DEFAULT_PASSWORD | 
					
						
							| 
									
										
										
										
											2019-11-28 12:40:45 -08:00
										 |  |  | ) { | 
					
						
							| 
									
										
										
										
											2019-12-19 11:28:11 -08:00
										 |  |  |   console.log( | 
					
						
							|  |  |  |     `creating ${SETTINGS_FILE} with server-id: ${id};`, | 
					
						
							|  |  |  |     `environment variables: username=\$${username} and password=\$${password}` | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  |   // when an alternate m2 location is specified use only that location (no .m2 directory)
 | 
					
						
							|  |  |  |   // otherwise use the home/.m2/ path
 | 
					
						
							|  |  |  |   const directory: string = path.join( | 
					
						
							|  |  |  |     core.getInput('settings-path') || os.homedir(), | 
					
						
							|  |  |  |     core.getInput('settings-path') ? '' : M2_DIR | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  |   await io.mkdirP(directory); | 
					
						
							|  |  |  |   core.debug(`created directory ${directory}`); | 
					
						
							|  |  |  |   await write(directory, generate(id, username, password)); | 
					
						
							| 
									
										
										
										
											2019-11-15 16:01:13 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-10 09:26:51 -08:00
										 |  |  | function escapeXML(value: string) { | 
					
						
							|  |  |  |   return value | 
					
						
							|  |  |  |     .replace(/&/g, '&') | 
					
						
							|  |  |  |     .replace(/</g, '<') | 
					
						
							|  |  |  |     .replace(/>/g, '>') | 
					
						
							|  |  |  |     .replace(/"/g, '"') | 
					
						
							|  |  |  |     .replace(/'/g, '''); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-15 16:01:13 -08:00
										 |  |  | // only exported for testing purposes
 | 
					
						
							| 
									
										
										
										
											2019-12-19 11:28:11 -08:00
										 |  |  | export function generate( | 
					
						
							|  |  |  |   id = DEFAULT_ID, | 
					
						
							|  |  |  |   username = DEFAULT_USERNAME, | 
					
						
							|  |  |  |   password = DEFAULT_PASSWORD | 
					
						
							|  |  |  | ) { | 
					
						
							| 
									
										
										
										
											2019-11-20 10:25:21 -08:00
										 |  |  |   return `
 | 
					
						
							|  |  |  |   <settings> | 
					
						
							|  |  |  |       <servers> | 
					
						
							|  |  |  |         <server> | 
					
						
							| 
									
										
										
										
											2019-12-10 09:26:51 -08:00
										 |  |  |           <id>${escapeXML(id)}</id> | 
					
						
							| 
									
										
										
										
											2019-12-19 11:28:11 -08:00
										 |  |  |           <username>\${env.${escapeXML(username)}}</username> | 
					
						
							|  |  |  |           <password>\${env.${escapeXML(password)}}</password> | 
					
						
							| 
									
										
										
										
											2019-11-20 10:25:21 -08:00
										 |  |  |         </server> | 
					
						
							|  |  |  |       </servers> | 
					
						
							|  |  |  |   </settings> | 
					
						
							|  |  |  |   `;
 | 
					
						
							| 
									
										
										
										
											2019-11-15 16:01:13 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function write(directory: string, settings: string) { | 
					
						
							| 
									
										
										
										
											2019-11-20 10:25:21 -08:00
										 |  |  |   const location = path.join(directory, SETTINGS_FILE); | 
					
						
							| 
									
										
										
										
											2019-12-19 08:52:26 -08:00
										 |  |  |   if (fs.existsSync(location)) { | 
					
						
							|  |  |  |     console.warn(`overwriting existing file ${location}`); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     console.log(`writing ${location}`); | 
					
						
							| 
									
										
										
										
											2019-12-04 23:54:21 -05:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2019-12-19 08:52:26 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return fs.writeFileSync(location, settings, { | 
					
						
							|  |  |  |     encoding: 'utf-8', | 
					
						
							|  |  |  |     flag: 'w' | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2019-11-15 16:01:13 -08:00
										 |  |  | } |