@augment-vir/node
Version:
A collection of augments, helpers types, functions, and classes only for Node.js (backend) JavaScript environments.
50 lines (43 loc) • 1.67 kB
text/typescript
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: Record<OperatingSystem, string> = {
/**
* 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)
*/
[]: 'systemctl --user start docker-desktop',
[]: 'open -a Docker',
[]: 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.',
);
}