| "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 |