UNPKG

a2r

Version:
158 lines (157 loc) 5.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkForFrameworkOnServer = exports.isDockerRunning = exports.dockerExists = exports.removeImage = exports.imageExists = exports.touch = exports.rm = exports.stop = exports.removeFolderFromDocker = exports.removeFileFromDocker = exports.copyPathToDocker = void 0; const execa_1 = __importDefault(require("execa")); const telemetry_1 = require("@a2r/telemetry"); const exec_1 = __importDefault(require("../tools/exec")); /** * Copies path to docker (works with files and folders) * @param sourcePath Source path * @param destPath Destination path (in docker) * @param dockerName Docker name */ const copyPathToDocker = async (sourcePath, destPath, dockerName) => { const dockerParams = ['cp', sourcePath, `${dockerName}:${destPath}`]; await (0, execa_1.default)('docker', dockerParams); }; exports.copyPathToDocker = copyPathToDocker; /** * Removes a file from docker * @param filePath Path of file to remove * @param dockerName Docker name */ const removeFileFromDocker = async (filePath, dockerName) => { const dockerParams = ['exec', dockerName, 'rm', filePath]; await (0, execa_1.default)('docker', dockerParams); }; exports.removeFileFromDocker = removeFileFromDocker; /** * Removes a folder from docker * @param folderPath Path of folder to remove * @param dockerName Docker name */ const removeFolderFromDocker = async (folderPath, dockerName) => { const dockerParams = ['exec', dockerName, 'rm', '-rf', folderPath]; await (0, execa_1.default)('docker', dockerParams); }; exports.removeFolderFromDocker = removeFolderFromDocker; /** * Stops docker container * @param dockerName Docker name */ const stop = async (dockerName) => { const dockerParams = ['stop', dockerName]; try { await (0, execa_1.default)('docker', dockerParams); } catch (ex) { telemetry_1.out.verbose(`Error stopping docker "${dockerName}", probably it wasn't running. Error: ${ex.stack || ex.message}`); } }; exports.stop = stop; /** * Removes docker container * @param dockerName Docker name */ const rm = async (dockerName) => { const dockerParams = ['rm', dockerName]; try { await (0, execa_1.default)('docker', dockerParams); } catch (ex) { telemetry_1.out.verbose(`Error removing docker "${dockerName}", probably it didn't exist. Error: ${ex.stack || ex.message}`); } }; exports.rm = rm; /** * Touches file in docker * @param filePath File path in docker * @param dockerName Docker name */ const touch = async (filePath, dockerName) => { const dockerParams = ['exec', dockerName, 'touch', filePath]; await (0, execa_1.default)('docker', dockerParams); }; exports.touch = touch; /** * Checks if image with given name exists on machine * @param imageName Image name */ const imageExists = async (imageName) => { const res = await (0, exec_1.default)('docker', ['images', '-q', imageName]); return !!res.stdout.trim(); }; exports.imageExists = imageExists; /** * Removes docker image from local machine * @param imageName Image name */ const removeImage = async (imageName) => { await (0, execa_1.default)('docker', ['image', 'rm', imageName]); }; exports.removeImage = removeImage; /** * Checks is docker exists applying given filter * @param filter Filter (as in `docker ps --filter`) */ const dockerExists = async (filter, checkStopped) => { const psParams = ['ps', '-q', '--filter', filter]; if (checkStopped) { psParams.push('-a'); } const res = await (0, exec_1.default)('docker', psParams); return !!res.stdout.trim(); }; exports.dockerExists = dockerExists; /** * Checks if docker with provided name is running * @param dockerName DOcker name * @param timeout Timeout (default: `5000`) */ const isDockerRunning = async (dockerName, timeout = 5000) => { const isRunning = await (0, exports.dockerExists)(`name=${dockerName}`); if (isRunning) { return true; } if (timeout) { await (() => new Promise((resolve) => setTimeout(resolve, 1000)))(); return (0, exports.isDockerRunning)(dockerName, Math.max(timeout - 1000, 0)); } return false; }; exports.isDockerRunning = isDockerRunning; /** * Check for framework and uninstall if installed * @param dockerName Docker name (dev-server) */ const checkForFrameworkOnServer = async (dockerName) => { const res = await (0, exec_1.default)('docker', [ 'exec', dockerName, 'npm', 'list', 'a2r', '--depth=0', '--prefix', './server', '|', 'grep', 'a2r', ]); const feedback = res.stdout.trim(); if (feedback === null || feedback === void 0 ? void 0 : feedback.includes('empty')) { await (0, execa_1.default)('docker', [ 'exec', dockerName, 'npm', 'uninstall', 'a2r', '--prefix', './server', ]); } }; exports.checkForFrameworkOnServer = checkForFrameworkOnServer;