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
|