106 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "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 semver = __importStar(require("semver")); | ||
|  | const core_1 = require("@actions/core"); | ||
|  | // needs to be require for core node modules to be mocked
 | ||
|  | /* eslint @typescript-eslint/no-require-imports: 0 */ | ||
|  | const os = require("os"); | ||
|  | const cp = require("child_process"); | ||
|  | const fs = require("fs"); | ||
|  | function _findMatch(versionSpec, stable, candidates, archFilter) { | ||
|  |     return __awaiter(this, void 0, void 0, function* () { | ||
|  |         const platFilter = os.platform(); | ||
|  |         let result; | ||
|  |         let match; | ||
|  |         let file; | ||
|  |         for (const candidate of candidates) { | ||
|  |             const version = candidate.version; | ||
|  |             core_1.debug(`check ${version} satisfies ${versionSpec}`); | ||
|  |             if (semver.satisfies(version, versionSpec) && | ||
|  |                 (!stable || candidate.stable === stable)) { | ||
|  |                 file = candidate.files.find(item => { | ||
|  |                     core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); | ||
|  |                     let chk = item.arch === archFilter && item.platform === platFilter; | ||
|  |                     if (chk && item.platform_version) { | ||
|  |                         const osVersion = module.exports._getOsVersion(); | ||
|  |                         if (osVersion === item.platform_version) { | ||
|  |                             chk = true; | ||
|  |                         } | ||
|  |                         else { | ||
|  |                             chk = semver.satisfies(osVersion, item.platform_version); | ||
|  |                         } | ||
|  |                     } | ||
|  |                     return chk; | ||
|  |                 }); | ||
|  |                 if (file) { | ||
|  |                     core_1.debug(`matched ${candidate.version}`); | ||
|  |                     match = candidate; | ||
|  |                     break; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         if (match && file) { | ||
|  |             // clone since we're mutating the file list to be only the file that matches
 | ||
|  |             result = Object.assign({}, match); | ||
|  |             result.files = [file]; | ||
|  |         } | ||
|  |         return result; | ||
|  |     }); | ||
|  | } | ||
|  | exports._findMatch = _findMatch; | ||
|  | function _getOsVersion() { | ||
|  |     // TODO: add windows and other linux, arm variants
 | ||
|  |     // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python)
 | ||
|  |     const plat = os.platform(); | ||
|  |     let version = ''; | ||
|  |     if (plat === 'darwin') { | ||
|  |         version = cp.execSync('sw_vers -productVersion').toString(); | ||
|  |     } | ||
|  |     else if (plat === 'linux') { | ||
|  |         // lsb_release process not in some containers, readfile
 | ||
|  |         // Run cat /etc/lsb-release
 | ||
|  |         // DISTRIB_ID=Ubuntu
 | ||
|  |         // DISTRIB_RELEASE=18.04
 | ||
|  |         // DISTRIB_CODENAME=bionic
 | ||
|  |         // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
 | ||
|  |         const lsbContents = module.exports._readLinuxVersionFile(); | ||
|  |         if (lsbContents) { | ||
|  |             const lines = lsbContents.split('\n'); | ||
|  |             for (const line of lines) { | ||
|  |                 const parts = line.split('='); | ||
|  |                 if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') { | ||
|  |                     version = parts[1].trim(); | ||
|  |                     break; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     return version; | ||
|  | } | ||
|  | exports._getOsVersion = _getOsVersion; | ||
|  | function _readLinuxVersionFile() { | ||
|  |     const lsbFile = '/etc/lsb-release'; | ||
|  |     let contents = ''; | ||
|  |     if (fs.existsSync(lsbFile)) { | ||
|  |         contents = fs.readFileSync(lsbFile).toString(); | ||
|  |     } | ||
|  |     return contents; | ||
|  | } | ||
|  | exports._readLinuxVersionFile = _readLinuxVersionFile; | ||
|  | //# sourceMappingURL=manifest.js.map
 |