UNPKG

navy

Version:

Quick and powerful development environments using Docker and Docker Compose

98 lines (75 loc) 2.81 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _chalk = _interopRequireDefault(require("chalk")); var _readline = _interopRequireDefault(require("readline")); var _cliSpinners = require("cli-spinners"); var _ = require("../"); var _table = _interopRequireDefault(require("../util/table")); var _hasUpdate = _interopRequireDefault(require("../util/has-update")); const debug = require('debug')('navy:updates'); let spinnerIndex = 0; let spinnerFrame = _cliSpinners.dots.frames[0]; function renderStatus(status) { if (status == null) { return _chalk.default.yellow(spinnerFrame) + ' ' + _chalk.default.dim('Checking...'); } else if (status === true) { return _chalk.default.yellow('• Update available'); } else if (status === 'UNKNOWN_REMOTE') { return _chalk.default.red('• Not found'); } else if (status === 'UNKNOWN_ERROR') { return _chalk.default.red('• Internal error'); } else if (status === 'NO_IMAGE') { return _chalk.default.red('• No image for service'); } else { return _chalk.default.green('✔ Up to date'); } } async function _default(opts) { const navy = (0, _.getNavy)(opts.navy); const navyFile = await navy.getNavyFile(); const ps = await navy.ps(); const updateStatus = {}; let drawnLines = 0; function draw() { drawnLines = 0; const buffer = (0, _table.default)([['NAME', 'IMAGE', 'UPDATES'], ...ps.map(service => [service.name, service.image, renderStatus(updateStatus[service.id])])]); drawnLines = buffer.split('\n').length; console.log(buffer); } function redraw() { _readline.default.clearLine(process.stdout, 0); _readline.default.cursorTo(process.stdout, 0); for (let i = 0; i < drawnLines; i++) { _readline.default.moveCursor(process.stdout, 0, -1); _readline.default.clearLine(process.stdout, 0); } draw(); } const spinner = setInterval(() => { spinnerIndex++; if (spinnerIndex >= _cliSpinners.dots.frames.length) { spinnerIndex = 0; } spinnerFrame = _cliSpinners.dots.frames[spinnerIndex]; redraw(); }, _cliSpinners.dots.interval); draw(); await Promise.all(ps.map(async service => { try { if (!service || !service.raw || !service.raw.Image) { return updateStatus[service.id] = 'NO_IMAGE'; } updateStatus[service.id] = await (0, _hasUpdate.default)(service.image, service.raw.Image, navyFile); } catch (ex) { debug('Error checking update for', service.name, ex.stack || ex.message); updateStatus[service.id] = 'UNKNOWN_ERROR'; } })); redraw(); clearInterval(spinner); } module.exports = exports.default;