mirror of
				https://github.com/actions/setup-go.git
				synced 2025-10-31 07:30:31 +00:00 
			
		
		
		
	Compare commits
	
		
			18 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | a030287975 | ||
|   | 3349559e91 | ||
|   | dec4fc5647 | ||
|   | 262468e92f | ||
|   | 4e8106ca18 | ||
|   | 93ddff5bef | ||
|   | 3d89e603f2 | ||
|   | 1fea44b3f0 | ||
|   | 3e014ec8a4 | ||
|   | 75899f8cdf | ||
|   | 1fdcb9b160 | ||
|   | 3d0e3826ed | ||
|   | 9c31f591e9 | ||
|   | e0b6a4d694 | ||
|   | 1295b8c552 | ||
|   | 9b1c41166a | ||
|   | 655555d319 | ||
|   | 2096a2c66a | 
							
								
								
									
										9
									
								
								.github/workflows/versions.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/versions.yml
									
									
									
									
										vendored
									
									
								
							| @@ -25,7 +25,7 @@ jobs: | ||||
|         go-version: ^1.13.6 | ||||
|  | ||||
|     - name: validate version  | ||||
|       run: go version | grep "go1.13." | ||||
|       run: go version | grep "go1." | ||||
|  | ||||
|     - name: setup-go 1.13 | ||||
|       uses: ./ | ||||
| @@ -42,3 +42,10 @@ jobs: | ||||
|  | ||||
|     - name: validate version  | ||||
|       run: go version | grep "go1.12.9" | ||||
|  | ||||
|     - name: dump env | ||||
|       shell: bash | ||||
|       run: | | ||||
|         echo $PATH | ||||
|         echo go versions in tool cache:  | ||||
|         echo $(ls $RUNNER_TOOL_CACHE/go)        | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| @@ -34,5 +34,5 @@ jobs: | ||||
|       run: npm test | ||||
|  | ||||
|     - name: audit packages | ||||
|       run: npm audit --audit-level=moderate | ||||
|       run: npm audit --audit-level=high | ||||
|       if: matrix.operating-system == 'ubuntu-latest' | ||||
							
								
								
									
										257
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										257
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -1276,9 +1276,12 @@ var __importStar = (this && this.__importStar) || function (mod) { | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| const core = __importStar(__webpack_require__(470)); | ||||
| const io = __importStar(__webpack_require__(1)); | ||||
| const tc = __importStar(__webpack_require__(533)); | ||||
| const installer = __importStar(__webpack_require__(749)); | ||||
| const path = __importStar(__webpack_require__(622)); | ||||
| const cp = __importStar(__webpack_require__(129)); | ||||
| const fs = __importStar(__webpack_require__(747)); | ||||
| function run() { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         try { | ||||
| @@ -1302,6 +1305,8 @@ function run() { | ||||
|                     core.exportVariable('GOROOT', installDir); | ||||
|                     core.addPath(path.join(installDir, 'bin')); | ||||
|                     console.log('Added go to the path'); | ||||
|                     let added = addBinToPath(); | ||||
|                     core.debug(`add bin ${added}`); | ||||
|                 } | ||||
|                 else { | ||||
|                     throw new Error(`Could not find a version that satisfied version spec: ${versionSpec}`); | ||||
| @@ -1317,6 +1322,35 @@ function run() { | ||||
|     }); | ||||
| } | ||||
| exports.run = run; | ||||
| function addBinToPath() { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         let added = false; | ||||
|         let g = yield io.which('go'); | ||||
|         core.debug(`which go :${g}:`); | ||||
|         if (!g) { | ||||
|             core.debug('go not in the path'); | ||||
|             return added; | ||||
|         } | ||||
|         let buf = cp.execSync('go env GOPATH'); | ||||
|         if (buf) { | ||||
|             let gp = buf.toString().trim(); | ||||
|             core.debug(`go env GOPATH :${gp}:`); | ||||
|             if (!fs.existsSync(gp)) { | ||||
|                 // some of the hosted images have go install but not profile dir | ||||
|                 core.debug(`creating ${gp}`); | ||||
|                 io.mkdirP(gp); | ||||
|             } | ||||
|             let bp = path.join(gp, 'bin'); | ||||
|             if (!fs.existsSync(bp)) { | ||||
|                 core.debug(`creating ${bp}`); | ||||
|                 io.mkdirP(bp); | ||||
|             } | ||||
|             core.addPath(bp); | ||||
|             added = true; | ||||
|         } | ||||
|         return added; | ||||
|     }); | ||||
| } | ||||
|  | ||||
|  | ||||
| /***/ }), | ||||
| @@ -3279,9 +3313,12 @@ const os = __importStar(__webpack_require__(87)); | ||||
| const path = __importStar(__webpack_require__(622)); | ||||
| const httpm = __importStar(__webpack_require__(539)); | ||||
| const semver = __importStar(__webpack_require__(280)); | ||||
| const stream = __importStar(__webpack_require__(794)); | ||||
| const util = __importStar(__webpack_require__(669)); | ||||
| const v4_1 = __importDefault(__webpack_require__(826)); | ||||
| const exec_1 = __webpack_require__(986); | ||||
| const assert_1 = __webpack_require__(357); | ||||
| const retry_helper_1 = __webpack_require__(979); | ||||
| class HTTPError extends Error { | ||||
|     constructor(httpStatusCode) { | ||||
|         super(`Unexpected HTTP response: ${httpStatusCode}`); | ||||
| @@ -3292,31 +3329,6 @@ class HTTPError extends Error { | ||||
| exports.HTTPError = HTTPError; | ||||
| const IS_WINDOWS = process.platform === 'win32'; | ||||
| const userAgent = 'actions/tool-cache'; | ||||
| // On load grab temp directory and cache directory and remove them from env (currently don't want to expose this) | ||||
| let tempDirectory = process.env['RUNNER_TEMP'] || ''; | ||||
| let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || ''; | ||||
| // If directories not found, place them in common temp locations | ||||
| if (!tempDirectory || !cacheRoot) { | ||||
|     let baseLocation; | ||||
|     if (IS_WINDOWS) { | ||||
|         // On windows use the USERPROFILE env variable | ||||
|         baseLocation = process.env['USERPROFILE'] || 'C:\\'; | ||||
|     } | ||||
|     else { | ||||
|         if (process.platform === 'darwin') { | ||||
|             baseLocation = '/Users'; | ||||
|         } | ||||
|         else { | ||||
|             baseLocation = '/home'; | ||||
|         } | ||||
|     } | ||||
|     if (!tempDirectory) { | ||||
|         tempDirectory = path.join(baseLocation, 'actions', 'temp'); | ||||
|     } | ||||
|     if (!cacheRoot) { | ||||
|         cacheRoot = path.join(baseLocation, 'actions', 'cache'); | ||||
|     } | ||||
| } | ||||
| /** | ||||
|  * Download a tool from an url and stream it into a file | ||||
|  * | ||||
| @@ -3326,52 +3338,71 @@ if (!tempDirectory || !cacheRoot) { | ||||
|  */ | ||||
| function downloadTool(url, dest) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         // Wrap in a promise so that we can resolve from within stream callbacks | ||||
|         return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { | ||||
|             try { | ||||
|                 const http = new httpm.HttpClient(userAgent, [], { | ||||
|                     allowRetries: true, | ||||
|                     maxRetries: 3 | ||||
|                 }); | ||||
|                 dest = dest || path.join(tempDirectory, v4_1.default()); | ||||
|         dest = dest || path.join(_getTempDirectory(), v4_1.default()); | ||||
|         yield io.mkdirP(path.dirname(dest)); | ||||
|         core.debug(`Downloading ${url}`); | ||||
|                 core.debug(`Downloading ${dest}`); | ||||
|         core.debug(`Destination ${dest}`); | ||||
|         const maxAttempts = 3; | ||||
|         const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); | ||||
|         const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); | ||||
|         const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); | ||||
|         return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { | ||||
|             return yield downloadToolAttempt(url, dest || ''); | ||||
|         }), (err) => { | ||||
|             if (err instanceof HTTPError && err.httpStatusCode) { | ||||
|                 // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests | ||||
|                 if (err.httpStatusCode < 500 && | ||||
|                     err.httpStatusCode !== 408 && | ||||
|                     err.httpStatusCode !== 429) { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|             // Otherwise retry | ||||
|             return true; | ||||
|         }); | ||||
|     }); | ||||
| } | ||||
| exports.downloadTool = downloadTool; | ||||
| function downloadToolAttempt(url, dest) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         if (fs.existsSync(dest)) { | ||||
|             throw new Error(`Destination file path ${dest} already exists`); | ||||
|         } | ||||
|         // Get the response headers | ||||
|         const http = new httpm.HttpClient(userAgent, [], { | ||||
|             allowRetries: false | ||||
|         }); | ||||
|         const response = yield http.get(url); | ||||
|         if (response.message.statusCode !== 200) { | ||||
|             const err = new HTTPError(response.message.statusCode); | ||||
|             core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); | ||||
|             throw err; | ||||
|         } | ||||
|                 const file = fs.createWriteStream(dest); | ||||
|                 file.on('open', () => __awaiter(this, void 0, void 0, function* () { | ||||
|         // Download the response body | ||||
|         const pipeline = util.promisify(stream.pipeline); | ||||
|         const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); | ||||
|         const readStream = responseMessageFactory(); | ||||
|         let succeeded = false; | ||||
|         try { | ||||
|                         const stream = response.message.pipe(file); | ||||
|                         stream.on('close', () => { | ||||
|             yield pipeline(readStream, fs.createWriteStream(dest)); | ||||
|             core.debug('download complete'); | ||||
|                             resolve(dest); | ||||
|                         }); | ||||
|             succeeded = true; | ||||
|             return dest; | ||||
|         } | ||||
|         finally { | ||||
|             // Error, delete dest before retry | ||||
|             if (!succeeded) { | ||||
|                 core.debug('download failed'); | ||||
|                 try { | ||||
|                     yield io.rmRF(dest); | ||||
|                 } | ||||
|                 catch (err) { | ||||
|                         core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); | ||||
|                         reject(err); | ||||
|                     core.debug(`Failed to delete '${dest}'. ${err.message}`); | ||||
|                 } | ||||
|                 })); | ||||
|                 file.on('error', err => { | ||||
|                     file.end(); | ||||
|                     reject(err); | ||||
|                 }); | ||||
|             } | ||||
|             catch (err) { | ||||
|                 reject(err); | ||||
|         } | ||||
|         })); | ||||
|     }); | ||||
| } | ||||
| exports.downloadTool = downloadTool; | ||||
| /** | ||||
|  * Extract a .7z file | ||||
|  * | ||||
| @@ -3461,14 +3492,17 @@ function extractTar(file, dest, flags = 'xz') { | ||||
|         // Create dest | ||||
|         dest = yield _createExtractFolder(dest); | ||||
|         // Determine whether GNU tar | ||||
|         core.debug('Checking tar --version'); | ||||
|         let versionOutput = ''; | ||||
|         yield exec_1.exec('tar --version', [], { | ||||
|             ignoreReturnCode: true, | ||||
|             silent: true, | ||||
|             listeners: { | ||||
|                 stdout: (data) => (versionOutput += data.toString()), | ||||
|                 stderr: (data) => (versionOutput += data.toString()) | ||||
|             } | ||||
|         }); | ||||
|         core.debug(versionOutput.trim()); | ||||
|         const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); | ||||
|         // Initialize args | ||||
|         const args = [flags]; | ||||
| @@ -3629,7 +3663,7 @@ function find(toolName, versionSpec, arch) { | ||||
|     let toolPath = ''; | ||||
|     if (versionSpec) { | ||||
|         versionSpec = semver.clean(versionSpec) || ''; | ||||
|         const cachePath = path.join(cacheRoot, toolName, versionSpec, arch); | ||||
|         const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); | ||||
|         core.debug(`checking cache: ${cachePath}`); | ||||
|         if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { | ||||
|             core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); | ||||
| @@ -3651,7 +3685,7 @@ exports.find = find; | ||||
| function findAllVersions(toolName, arch) { | ||||
|     const versions = []; | ||||
|     arch = arch || os.arch(); | ||||
|     const toolPath = path.join(cacheRoot, toolName); | ||||
|     const toolPath = path.join(_getCacheDirectory(), toolName); | ||||
|     if (fs.existsSync(toolPath)) { | ||||
|         const children = fs.readdirSync(toolPath); | ||||
|         for (const child of children) { | ||||
| @@ -3670,7 +3704,7 @@ function _createExtractFolder(dest) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         if (!dest) { | ||||
|             // create a temp dir | ||||
|             dest = path.join(tempDirectory, v4_1.default()); | ||||
|             dest = path.join(_getTempDirectory(), v4_1.default()); | ||||
|         } | ||||
|         yield io.mkdirP(dest); | ||||
|         return dest; | ||||
| @@ -3678,7 +3712,7 @@ function _createExtractFolder(dest) { | ||||
| } | ||||
| function _createToolPath(tool, version, arch) { | ||||
|     return __awaiter(this, void 0, void 0, function* () { | ||||
|         const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); | ||||
|         const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); | ||||
|         core.debug(`destination ${folderPath}`); | ||||
|         const markerPath = `${folderPath}.complete`; | ||||
|         yield io.rmRF(folderPath); | ||||
| @@ -3688,7 +3722,7 @@ function _createToolPath(tool, version, arch) { | ||||
|     }); | ||||
| } | ||||
| function _completeToolPath(tool, version, arch) { | ||||
|     const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); | ||||
|     const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); | ||||
|     const markerPath = `${folderPath}.complete`; | ||||
|     fs.writeFileSync(markerPath, ''); | ||||
|     core.debug('finished caching tool'); | ||||
| @@ -3725,6 +3759,31 @@ function _evaluateVersions(versions, versionSpec) { | ||||
|     } | ||||
|     return version; | ||||
| } | ||||
| /** | ||||
|  * Gets RUNNER_TOOL_CACHE | ||||
|  */ | ||||
| function _getCacheDirectory() { | ||||
|     const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; | ||||
|     assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); | ||||
|     return cacheDirectory; | ||||
| } | ||||
| /** | ||||
|  * Gets RUNNER_TEMP | ||||
|  */ | ||||
| function _getTempDirectory() { | ||||
|     const tempDirectory = process.env['RUNNER_TEMP'] || ''; | ||||
|     assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); | ||||
|     return tempDirectory; | ||||
| } | ||||
| /** | ||||
|  * Gets a global variable | ||||
|  */ | ||||
| function _getGlobal(key, defaultValue) { | ||||
|     /* eslint-disable @typescript-eslint/no-explicit-any */ | ||||
|     const value = global[key]; | ||||
|     /* eslint-enable @typescript-eslint/no-explicit-any */ | ||||
|     return value !== undefined ? value : defaultValue; | ||||
| } | ||||
| //# sourceMappingURL=tool-cache.js.map | ||||
|  | ||||
| /***/ }), | ||||
| @@ -4601,7 +4660,7 @@ function downloadGo(versionSpec, stable) { | ||||
|                 core_1.debug(`extracted to ${extPath}`); | ||||
|                 // extracts with a root folder that matches the fileName downloaded | ||||
|                 const toolRoot = path.join(extPath, 'go'); | ||||
|                 toolPath = yield tc.cacheDir(toolRoot, 'go', versionSpec); | ||||
|                 toolPath = yield tc.cacheDir(toolRoot, 'go', makeSemver(match.version)); | ||||
|             } | ||||
|         } | ||||
|         catch (error) { | ||||
| @@ -4684,6 +4743,13 @@ function makeSemver(version) { | ||||
| exports.makeSemver = makeSemver; | ||||
|  | ||||
|  | ||||
| /***/ }), | ||||
|  | ||||
| /***/ 794: | ||||
| /***/ (function(module) { | ||||
|  | ||||
| module.exports = require("stream"); | ||||
|  | ||||
| /***/ }), | ||||
|  | ||||
| /***/ 826: | ||||
| @@ -4792,6 +4858,83 @@ function checkBypass(reqUrl) { | ||||
| exports.checkBypass = checkBypass; | ||||
|  | ||||
|  | ||||
| /***/ }), | ||||
|  | ||||
| /***/ 979: | ||||
| /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||
|  | ||||
| "use strict"; | ||||
|  | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| var __importStar = (this && this.__importStar) || function (mod) { | ||||
|     if (mod && mod.__esModule) return mod; | ||||
|     var result = {}; | ||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||||
|     result["default"] = mod; | ||||
|     return result; | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| const core = __importStar(__webpack_require__(470)); | ||||
| /** | ||||
|  * Internal class for retries | ||||
|  */ | ||||
| class RetryHelper { | ||||
|     constructor(maxAttempts, minSeconds, maxSeconds) { | ||||
|         if (maxAttempts < 1) { | ||||
|             throw new Error('max attempts should be greater than or equal to 1'); | ||||
|         } | ||||
|         this.maxAttempts = maxAttempts; | ||||
|         this.minSeconds = Math.floor(minSeconds); | ||||
|         this.maxSeconds = Math.floor(maxSeconds); | ||||
|         if (this.minSeconds > this.maxSeconds) { | ||||
|             throw new Error('min seconds should be less than or equal to max seconds'); | ||||
|         } | ||||
|     } | ||||
|     execute(action, isRetryable) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             let attempt = 1; | ||||
|             while (attempt < this.maxAttempts) { | ||||
|                 // Try | ||||
|                 try { | ||||
|                     return yield action(); | ||||
|                 } | ||||
|                 catch (err) { | ||||
|                     if (isRetryable && !isRetryable(err)) { | ||||
|                         throw err; | ||||
|                     } | ||||
|                     core.info(err.message); | ||||
|                 } | ||||
|                 // Sleep | ||||
|                 const seconds = this.getSleepAmount(); | ||||
|                 core.info(`Waiting ${seconds} seconds before trying again`); | ||||
|                 yield this.sleep(seconds); | ||||
|                 attempt++; | ||||
|             } | ||||
|             // Last attempt | ||||
|             return yield action(); | ||||
|         }); | ||||
|     } | ||||
|     getSleepAmount() { | ||||
|         return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + | ||||
|             this.minSeconds); | ||||
|     } | ||||
|     sleep(seconds) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             return new Promise(resolve => setTimeout(resolve, seconds * 1000)); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| exports.RetryHelper = RetryHelper; | ||||
| //# sourceMappingURL=retry-helper.js.map | ||||
|  | ||||
| /***/ }), | ||||
|  | ||||
| /***/ 986: | ||||
|   | ||||
							
								
								
									
										10814
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10814
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -25,7 +25,8 @@ | ||||
|   "dependencies": { | ||||
|     "@actions/core": "^1.2.2", | ||||
|     "@actions/http-client": "^1.0.6", | ||||
|     "@actions/tool-cache": "^1.3.1", | ||||
|     "@actions/io": "^1.0.2", | ||||
|     "@actions/tool-cache": "^1.3.3", | ||||
|     "semver": "^6.1.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
| @@ -33,7 +34,7 @@ | ||||
|     "@types/node": "^12.0.4", | ||||
|     "@types/semver": "^6.0.0", | ||||
|     "@zeit/ncc": "^0.21.0", | ||||
|     "jest": "^24.8.0", | ||||
|     "jest": "^25.2.1", | ||||
|     "jest-circus": "^24.7.1", | ||||
|     "nock": "^10.0.6", | ||||
|     "prettier": "^1.17.1", | ||||
|   | ||||
| @@ -33,7 +33,7 @@ export async function downloadGo( | ||||
|  | ||||
|       // extracts with a root folder that matches the fileName downloaded | ||||
|       const toolRoot = path.join(extPath, 'go'); | ||||
|       toolPath = await tc.cacheDir(toolRoot, 'go', versionSpec); | ||||
|       toolPath = await tc.cacheDir(toolRoot, 'go', makeSemver(match.version)); | ||||
|     } | ||||
|   } catch (error) { | ||||
|     throw new Error(`Failed to download version ${versionSpec}: ${error}`); | ||||
|   | ||||
							
								
								
									
										37
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								src/main.ts
									
									
									
									
									
								
							| @@ -1,7 +1,10 @@ | ||||
| import * as core from '@actions/core'; | ||||
| import * as io from '@actions/io'; | ||||
| import * as tc from '@actions/tool-cache'; | ||||
| import * as installer from './installer'; | ||||
| import * as path from 'path'; | ||||
| import * as cp from 'child_process'; | ||||
| import * as fs from 'fs'; | ||||
|  | ||||
| export async function run() { | ||||
|   try { | ||||
| @@ -34,6 +37,9 @@ export async function run() { | ||||
|         core.exportVariable('GOROOT', installDir); | ||||
|         core.addPath(path.join(installDir, 'bin')); | ||||
|         console.log('Added go to the path'); | ||||
|  | ||||
|         let added = addBinToPath(); | ||||
|         core.debug(`add bin ${added}`); | ||||
|       } else { | ||||
|         throw new Error( | ||||
|           `Could not find a version that satisfied version spec: ${versionSpec}` | ||||
| @@ -48,3 +54,34 @@ export async function run() { | ||||
|     core.setFailed(error.message); | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function addBinToPath(): Promise<boolean> { | ||||
|   let added = false; | ||||
|   let g = await io.which('go'); | ||||
|   core.debug(`which go :${g}:`); | ||||
|   if (!g) { | ||||
|     core.debug('go not in the path'); | ||||
|     return added; | ||||
|   } | ||||
|  | ||||
|   let buf = cp.execSync('go env GOPATH'); | ||||
|   if (buf) { | ||||
|     let gp = buf.toString().trim(); | ||||
|     core.debug(`go env GOPATH :${gp}:`); | ||||
|     if (!fs.existsSync(gp)) { | ||||
|       // some of the hosted images have go install but not profile dir | ||||
|       core.debug(`creating ${gp}`); | ||||
|       io.mkdirP(gp); | ||||
|     } | ||||
|  | ||||
|     let bp = path.join(gp, 'bin'); | ||||
|     if (!fs.existsSync(bp)) { | ||||
|       core.debug(`creating ${bp}`); | ||||
|       io.mkdirP(bp); | ||||
|     } | ||||
|  | ||||
|     core.addPath(bp); | ||||
|     added = true; | ||||
|   } | ||||
|   return added; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user