UNPKG

@godspeedsystems/godspeed

Version:

Godspeed CLI

149 lines 5.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareToStartContainers = exports.getComposeOptions = exports.isDockerRunning = void 0; const docker_compose_1 = __importDefault(require("docker-compose")); const child_process_1 = require("child_process"); const chalk_1 = __importDefault(require("chalk")); const signale_1 = require("./signale"); const isDockerRunning = async () => { let isRunning = false; signale_1.log.wait(`Checking if ${chalk_1.default.yellow("docker")} is installed and running?`); try { (0, child_process_1.execSync)("docker version", { encoding: "utf8", maxBuffer: 50 * 1024 * 1024, stdio: ["pipe", "pipe", "ignore"], }).toString(); isRunning = true; signale_1.log.success(`${chalk_1.default.yellow("docker")} is up and running.`); } catch (error) { isRunning = false; signale_1.log.error(`${chalk_1.default.yellow("docker")} is not running.`); throw error; } return isRunning; }; exports.isDockerRunning = isDockerRunning; const getComposeOptions = async () => { let composeOptions; if (process.platform != "win32") { let res; try { res = (0, child_process_1.execSync)(`docker-compose -v`, { stdio: ["pipe", "pipe", "ignore"], }); } catch (err) { } if (!res) { composeOptions = { executablePath: "docker", log: true, composeOptions: ["compose", "-p"], }; } else { composeOptions = { log: true, composeOptions: ["-p"], }; } } else { composeOptions = { executablePath: "docker", log: true, composeOptions: ["compose", "-p"], }; } return composeOptions; }; exports.getComposeOptions = getComposeOptions; const prepareToStartContainers = async (projectName, composeOptions) => { signale_1.log.wait(`Stopping [if any] already running resources for project ${chalk_1.default.yellow(projectName)}`); const downResponse = await docker_compose_1.default.down({ ...composeOptions, commandOptions: ["--remove-orphans"], }); if (downResponse.err) { signale_1.log.success(`No running resources found to stop for project ${chalk_1.default.yellow(projectName)}`); } else { signale_1.log.success(`Successfully stopped all running resources for project ${chalk_1.default.yellow(projectName)}`); } }; exports.prepareToStartContainers = prepareToStartContainers; const prepareMongoDb = async (godspeedOptions, composeOptions) => { const { mongodb } = godspeedOptions; if (!mongodb) { return; } signale_1.log.wait(`Setting up MongoDB replica cluster.`); const responseUpMany = await docker_compose_1.default.upMany([`mongodb1`, `mongodb2`, `mongodb3`], composeOptions); const responseExec = await docker_compose_1.default.exec(`mongodb1`, "bash /scripts/mongodb_rs_init.sh", composeOptions); signale_1.log.success(`Successfully setup MongoDB replica cluster.`); }; // const generatePrismaClients = async ( // composeOptions: IDockerComposeOptions, // projectDirPath: string // ) => { // return new Promise((resolve, reject) => { // glob( // path.resolve(projectDirPath, "src/datasources/*.prisma"), // async (err: Error, matches: string[]) => { // if (err) { // reject(err); // } else { // if (matches.length) { // log.wait("Generating client for prisma datasources."); // try { // const responseUpAll: IDockerComposeResult = // await dockerCompose.upAll(composeOptions); // const responseExec: IDockerComposeResult = // await dockerCompose.exec( // `node`, // [ // "/bin/bash", // "-c", // "for i in src/datasources/*.prisma; do npx --yes prisma generate --schema $i && npx --yes prisma db push --schema $i; done", // ], // composeOptions // ); // } catch (error) { // console.log(error); // } // log.success( // "Successfully generated client for prisma datasources." // ); // } // resolve(""); // } // } // ); // }); // }; // export const buildContainers = async ( // projectName: string, // godspeedOptions: PlainObject, // composeOptions: IDockerComposeOptions, // projectDirPath: string // ) => { // try { // log.wait(`Building containers for project ${chalk.yellow(projectName)}`); // const response = await dockerCompose.buildAll(composeOptions); // log.success( // `Successfully build all containers for project ${chalk.yellow( // projectName // )}` // ); // await prepareMongoDb(godspeedOptions, composeOptions); // await generatePrismaClients(composeOptions, projectDirPath); // await dockerCompose.stop(composeOptions); // } catch (error) { // console.log(error); // } // }; //# sourceMappingURL=dockerUtility.js.map