UNPKG

navy

Version:

Quick and powerful development environments using Docker and Docker Compose

86 lines (69 loc) 2.81 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createComposeClient = createComposeClient; var _path = _interopRequireDefault(require("path")); var _invariant = _interopRequireDefault(require("invariant")); var _fs = _interopRequireDefault(require("../../util/fs")); var _execAsync = require("../../util/exec-async"); var _driverLogging = require("../../driver-logging"); var _state = require("../../navy/state"); function createComposeClient(navy) { const client = { async exec(command, args = [], opts = {}) { const composeArgs = ['-p', navy.normalisedName]; const { useOriginalDockerComposeFiles, noLog, pipeLog, maxBuffer } = opts; const composeOpts = { maxBuffer: maxBuffer || Infinity }; const composeFilePath = await client.getDockerComposeFilePath(); if (composeFilePath && !useOriginalDockerComposeFiles) { composeArgs.push('-f', composeFilePath); } else { composeOpts.cwd = await client.getOriginalDockerComposeDirectory(); } composeArgs.push(command, ...args); try { return await (0, _execAsync.execAsync)('docker compose', composeArgs, childProcess => { if (!noLog && !pipeLog) { childProcess.stdout.on('data', data => (0, _driverLogging.log)(data)); childProcess.stderr.on('data', data => (0, _driverLogging.log)(data)); } else if (pipeLog) { childProcess.stdout.on('data', data => process.stdout.write(data)); childProcess.stderr.on('data', data => process.stderr.write(data)); } }, composeOpts); } catch (ex) { if (ex.message && ex.message.indexOf('Can\'t find a suitable configuration file') !== -1) { (0, _invariant.default)(false, "NO_DOCKER_COMPOSE_FILE: No docker-compose.yml (or valid Docker Compose config) found"); } throw ex; } }, getCompiledDockerComposePath() { return _path.default.join((0, _state.pathToNavy)(navy.normalisedName), 'docker-compose.tmp.yml'); }, async getOriginalDockerComposeDirectory() { const configProvider = await navy.getConfigProvider(); (0, _invariant.default)(configProvider, "NO_CONFIG_PROVIDER: Couldn't determine config provider for navy %s", navy.name); return configProvider.getNavyPath(); }, async getDockerComposeFilePath() { try { const compiledComposePath = await client.getCompiledDockerComposePath(); await _fs.default.statAsync(compiledComposePath); return compiledComposePath; } catch (ex) { return null; } } }; return client; }