@mountainpass/hooked-cli
Version:
A tool for runnable scripts
72 lines (71 loc) • 3.93 kB
JavaScript
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());
});
};
import { isDefined } from '../types.js';
import { Environment } from '../utils/Environment.js';
import logger from '../utils/logger.js';
import { loadRootPackageJsonSync } from '../utils/packageJson.js';
import { executeCmd } from './$cmd.js';
// lazy initialise variable, but then cache it for future invocations
let lazyCheckDockerExists;
const verifyLatestVersion = () => __awaiter(void 0, void 0, void 0, function* () {
try {
const packageJson = loadRootPackageJsonSync();
// eslint-disable-next-line no-template-curly-in-string
logger.debug('Checking if latest version...');
const env = new Environment();
env.putAllGlobal(process.env);
// NOTE: don't wait longer than 3 seconds!
const latestPublishedVersion = (yield executeCmd('system', { $cmd: `\${NPM_BIN=npm} view ${packageJson.name} version 2>/dev/null || true` }, {}, { env: process.env }, env, { printStdio: false, captureStdout: true }, 3000)).trim();
if (latestPublishedVersion.trim().length === 0) {
logger.warn(`Unable to check latest version for package '${packageJson.name}'.`);
}
else if (latestPublishedVersion !== packageJson.version) {
// eslint-disable-next-line max-len
logger.warn(`Not using latest ${packageJson.name}. Please consider upgrading to ${latestPublishedVersion} (current: ${packageJson.version})\n` +
`Run: npm i -g --prefer-online --force ${packageJson.name}`);
}
else {
logger.debug(`Found self: ${packageJson.version} (LATEST)`);
}
}
catch (e) {
// ignore errors - this is purely informational
// logger.warn(e.message)
}
});
const verifyDockerExists = (env) => __awaiter(void 0, void 0, void 0, function* () {
if (!isDefined(lazyCheckDockerExists)) {
try {
const version = yield executeCmd('-',
// eslint-disable-next-line no-template-curly-in-string
{ $cmd: '${DOCKER_BIN=docker} -v' }, {}, { env: env.resolved }, env, { printStdio: false, captureStdout: true }, 5000);
logger.debug(`Found docker: ${version.trim()}`);
lazyCheckDockerExists = true;
}
catch (e) {
// logger.warn(e.message)
// eslint-disable-next-line max-len
throw new Error('Docker not found (required by `$image`). Please specify the location using `DOCKER_BIN`, or install: https://docs.docker.com/engine/install/');
}
}
else if (lazyCheckDockerExists !== true) {
// I don't if the previous error will ever be ignored, but here it is again just in case!
// eslint-disable-next-line max-len
throw new Error('Docker not found (required by `$image`). Please specify the location using `DOCKER_BIN`, or install: https://docs.docker.com/engine/install/');
}
});
const verifyDockerKilled = (dockerName) => __awaiter(void 0, void 0, void 0, function* () {
return yield executeCmd('-', { $cmd: `docker kill ${dockerName} 2>/dev/null || true` }, {}, {}, new Environment(), { printStdio: false, captureStdout: false }, 5000);
});
export default {
verifyLatestVersion,
verifyDockerExists,
verifyDockerKilled
};