a2r
Version:
A2R Framework
158 lines (157 loc) • 5.25 kB
JavaScript
;
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;