UNPKG

navy

Version:

Quick and powerful development environments using Docker and Docker Compose

85 lines (66 loc) 2.71 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _path = _interopRequireDefault(require("path")); var _chalk = _interopRequireDefault(require("chalk")); var _invariant = _interopRequireDefault(require("invariant")); var _ = require("../"); var _errors = require("../errors"); var _dockerClient = _interopRequireDefault(require("../util/docker-client")); var _navyrc = _interopRequireDefault(require("../util/navyrc")); async function _default(service, opts) { const navy = (0, _.getNavy)(opts.navy); const cwd = process.cwd(); const navyRc = await (0, _navyrc.default)(cwd); if (!navyRc || !navyRc.services) { throw new _errors.NavyError(`No valid .navyrc file was found in "${cwd}"`); } if (!navyRc.develop) { throw new _errors.NavyError('No develop mounts found in .navyrc'); } if (navyRc.services.length > 1 && !service) { throw new _errors.NavyError('Multiple service mappings are defined in .navyrc, you need to explicitly specify what service to develop'); } if (!service) service = navyRc.services[0]; if (navyRc.services.indexOf(service) === -1) { throw new _errors.NavyError(`Service "${service}" is not a valid development target`); } const mounts = {}; Object.keys(navyRc.develop.mounts).forEach(localPath => mounts[_path.default.resolve(localPath)] = navyRc.develop.mounts[localPath]); const state = (await navy.getState()) || {}; await navy.saveState({ ...state, services: { ...state.services, [service]: { ...(state.services || {})[service], _develop: { mounts, command: navyRc.develop.command } } } }); await navy.emitAsync('cli.develop.beforeLaunch'); await navy.kill([service]); await navy.launch([service], { noDeps: true }); console.log(`🚧 ${service} has now restarted in development 🚧`); console.log(_chalk.default.dim('-----------')); console.log(); const container = (await navy.ps()).filter(_service => _service.name === service)[0]; (0, _invariant.default)(container, "DEVELOP_NO_CONTAINER_ID: Could not determine container ID for log attachment"); const containerId = container.id; const containerObj = _dockerClient.default.getContainer(containerId); containerObj.attach({ stream: true, stdout: true, stderr: true }).then(stream => containerObj.modem.demuxStream(stream, process.stdout, process.stderr)).catch(() => { console.log(); console.log(_chalk.default.dim(`-------> ${service} exited`)); console.log(); }); } module.exports = exports.default;