UNPKG

@augment-vir/node

Version:

A collection of augments, helpers types, functions, and classes only for Node.js (backend) JavaScript environments.

40 lines (39 loc) 1.57 kB
import { waitUntil } from '@augment-vir/assert'; import { currentOperatingSystem, OperatingSystem } from '../augments/os/operating-system.js'; import { runShellCommand } from '../augments/terminal/shell.js'; export async function isDockerRunning() { const output = await runShellCommand('docker info'); return output.exitCode === 0; } const startDockerCommands = { /** * Officially supported for the following distros: * * - [Ubuntu](https://docs.docker.com/desktop/install/ubuntu/#launch-docker-desktop) * - [Debian](https://docs.docker.com/desktop/install/debian/#launch-docker-desktop) * - [Fedora](https://docs.docker.com/desktop/install/fedora/#launch-docker-desktop) * - [Arch](https://docs.docker.com/desktop/install/archlinux/#launch-docker-desktop) */ [OperatingSystem.Linux]: 'systemctl --user start docker-desktop', [OperatingSystem.Mac]: 'open -a Docker', [OperatingSystem.Windows]: String.raw `/c/Program\ Files/Docker/Docker/Docker\ Desktop.exe`, }; export async function startDocker() { const command = startDockerCommands[currentOperatingSystem]; /* node:coverage disable */ if (await isDockerRunning()) { /** Docker is already running. Nothing to do. */ return; } await waitUntil.isTrue(async () => { await runShellCommand(command, { rejectOnError: true }); return isDockerRunning(); }, { interval: { seconds: 1, }, timeout: { minutes: 1, }, }, 'Failed to start Docker.'); }