UNPKG

@mountainpass/hooked-cli

Version:
72 lines (71 loc) 3.93 kB
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 };