| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  | import * as core from '@actions/core'; | 
					
						
							| 
									
										
										
										
											2020-03-26 12:40:41 -04:00
										 |  |  | import * as io from '@actions/io'; | 
					
						
							| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  | import * as tc from '@actions/tool-cache'; | 
					
						
							|  |  |  | import * as installer from './installer'; | 
					
						
							|  |  |  | import * as path from 'path'; | 
					
						
							| 
									
										
										
										
											2020-03-26 12:02:52 -04:00
										 |  |  | import * as cp from 'child_process'; | 
					
						
							|  |  |  | import * as fs from 'fs'; | 
					
						
							| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | export async function run() { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     //
 | 
					
						
							|  |  |  |     // versionSpec is optional.  If supplied, install / use from the tool cache
 | 
					
						
							|  |  |  |     // If not supplied then problem matchers will still be setup.  Useful for self-hosted.
 | 
					
						
							|  |  |  |     //
 | 
					
						
							|  |  |  |     let versionSpec = core.getInput('go-version'); | 
					
						
							| 
									
										
										
										
											2020-02-09 08:47:38 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-09 08:44:32 -05:00
										 |  |  |     // stable will be true unless false is the exact input
 | 
					
						
							|  |  |  |     // since getting unstable versions should be explicit
 | 
					
						
							| 
									
										
										
										
											2020-02-10 15:21:04 -05:00
										 |  |  |     let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE'; | 
					
						
							| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-09 22:39:44 -05:00
										 |  |  |     console.log( | 
					
						
							|  |  |  |       `Setup go ${stable ? 'stable' : ''} version spec ${versionSpec}` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  |     if (versionSpec) { | 
					
						
							| 
									
										
										
										
											2020-02-09 00:29:21 -05:00
										 |  |  |       let installDir: string | undefined = tc.find('go', versionSpec); | 
					
						
							| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-09 00:29:21 -05:00
										 |  |  |       if (!installDir) { | 
					
						
							| 
									
										
										
										
											2020-02-09 22:39:44 -05:00
										 |  |  |         console.log( | 
					
						
							|  |  |  |           `A version satisfying ${versionSpec} not found locally, attempting to download ...` | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2020-02-09 00:29:21 -05:00
										 |  |  |         installDir = await installer.downloadGo(versionSpec, stable); | 
					
						
							| 
									
										
										
										
											2020-02-09 22:42:10 -05:00
										 |  |  |         console.log('Installed'); | 
					
						
							| 
									
										
										
										
											2020-02-09 00:29:21 -05:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (installDir) { | 
					
						
							|  |  |  |         core.exportVariable('GOROOT', installDir); | 
					
						
							|  |  |  |         core.addPath(path.join(installDir, 'bin')); | 
					
						
							| 
									
										
										
										
											2020-02-09 22:42:10 -05:00
										 |  |  |         console.log('Added go to the path'); | 
					
						
							| 
									
										
										
										
											2020-03-26 12:02:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 13:46:15 -04:00
										 |  |  |         let added = addBinToPath(); | 
					
						
							|  |  |  |         core.debug(`add bin ${added}`); | 
					
						
							| 
									
										
										
										
											2020-02-09 00:29:21 -05:00
										 |  |  |       } else { | 
					
						
							|  |  |  |         throw new Error( | 
					
						
							|  |  |  |           `Could not find a version that satisfied version spec: ${versionSpec}` | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2020-02-09 00:21:39 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // add problem matchers
 | 
					
						
							|  |  |  |     const matchersPath = path.join(__dirname, '..', 'matchers.json'); | 
					
						
							|  |  |  |     console.log(`##[add-matcher]${matchersPath}`); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     core.setFailed(error.message); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2020-02-09 00:29:21 -05:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-03-26 12:02:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 12:40:41 -04:00
										 |  |  | async function addBinToPath(): Promise<boolean> { | 
					
						
							| 
									
										
										
										
											2020-03-26 12:02:52 -04:00
										 |  |  |   let added = false; | 
					
						
							| 
									
										
										
										
											2020-03-26 12:40:41 -04:00
										 |  |  |   let g = await io.which('go'); | 
					
						
							| 
									
										
										
										
											2020-03-26 13:00:45 -04:00
										 |  |  |   core.debug(`which go :${g}:`); | 
					
						
							| 
									
										
										
										
											2020-03-26 12:40:41 -04:00
										 |  |  |   if (!g) { | 
					
						
							|  |  |  |     core.debug('go not in the path'); | 
					
						
							|  |  |  |     return added; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2020-03-26 12:17:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 12:40:41 -04:00
										 |  |  |   let buf = cp.execSync('go env GOPATH'); | 
					
						
							| 
									
										
										
										
											2020-03-26 12:02:52 -04:00
										 |  |  |   if (buf) { | 
					
						
							| 
									
										
										
										
											2020-03-26 12:40:41 -04:00
										 |  |  |     let gp = buf.toString().trim(); | 
					
						
							| 
									
										
										
										
											2020-03-26 12:54:21 -04:00
										 |  |  |     core.debug(`go env GOPATH :${gp}:`); | 
					
						
							| 
									
										
										
										
											2020-03-26 13:00:45 -04:00
										 |  |  |     if (!fs.existsSync(gp)) { | 
					
						
							|  |  |  |       // some of the hosted images have go install but not profile dir
 | 
					
						
							|  |  |  |       core.debug(`creating ${gp}`); | 
					
						
							|  |  |  |       io.mkdirP(gp); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-03-26 12:23:38 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-26 13:00:45 -04:00
										 |  |  |     let bp = path.join(gp, 'bin'); | 
					
						
							|  |  |  |     if (!fs.existsSync(bp)) { | 
					
						
							|  |  |  |       core.debug(`creating ${bp}`); | 
					
						
							|  |  |  |       io.mkdirP(bp); | 
					
						
							| 
									
										
										
										
											2020-03-26 12:54:21 -04:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-03-26 13:00:45 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     core.addPath(bp); | 
					
						
							|  |  |  |     added = true; | 
					
						
							| 
									
										
										
										
											2020-03-26 12:02:52 -04:00
										 |  |  |   } | 
					
						
							|  |  |  |   return added; | 
					
						
							|  |  |  | } |