UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

69 lines (67 loc) • 1.99 kB
import { stripAnsi } from "../dev-log-pipeline.mjs"; import { existsSync } from "node:fs"; import { join } from "node:path"; import { execa } from "execa"; import process from "node:process"; //#region src/infra/docker.ts const TAIL_LINES = 15; function takeTail(lines, count = TAIL_LINES) { return lines.slice(-count).join("\n").trim(); } function composeFilePath(configDir) { return join(configDir, "docker-compose.yml"); } function isDockerTestMode(env) { return env.BOS_TEST === "1" || env.NODE_ENV === "test" || env.BOS_NO_PERSIST_PORTS === "1"; } function shouldAutoStartDocker(failures, guards) { if (failures.length === 0) return false; if (guards.testMode || !guards.dockerAvailable || !guards.composeFileExists) return false; return failures.every((failure) => failure.tcpReachable === false); } async function isDockerAvailable() { try { return ((await execa("docker", ["info"], { stdio: "pipe", reject: false, timeout: 5e3 })).exitCode ?? 1) === 0; } catch { return false; } } async function runDockerComposeUp(configDir) { try { const result = await execa("docker", [ "compose", "up", "-d", "--wait" ], { cwd: configDir, stdio: "pipe", reject: false, timeout: 3e5 }); const lines = [result.stdout ?? "", result.stderr ?? ""].flatMap((output) => output.split("\n")).map((line) => stripAnsi(line).trim()).filter((line) => line.length > 0); return { ok: (result.exitCode ?? 1) === 0, tail: takeTail(lines) }; } catch (error) { return { ok: false, tail: error instanceof Error ? error.message : String(error) }; } } function detectAutoStartContext(configDir) { return { composeFileExists: existsSync(composeFilePath(configDir)), dockerAvailable: false, testMode: isDockerTestMode(process.env) }; } //#endregion export { composeFilePath, detectAutoStartContext, isDockerAvailable, isDockerTestMode, runDockerComposeUp, shouldAutoStartDocker, takeTail }; //# sourceMappingURL=docker.mjs.map