diff --git a/src/docker/install.ts b/src/docker/install.ts index 22828cfb..984fcf1b 100644 --- a/src/docker/install.ts +++ b/src/docker/install.ts @@ -279,9 +279,14 @@ export class Install { core.info(limaCfg); }); - const qemuArch = await Install.qemuArch(); + if (!(await Install.qemuInstalled())) { + await core.group('Installing QEMU', async () => { + await Exec.exec('brew', ['install', 'qemu'], {env: envs}); + }); + } + const qemuBin = await Install.qemuBin(); await core.group('QEMU version', async () => { - await Exec.exec(`qemu-system-${qemuArch} --version`); + await Exec.exec(qemuBin, ['--version']); }); // lima might already be started on the runner so env var added in download @@ -617,29 +622,42 @@ EOF`, return await io .which('lima', true) .then(res => { - core.debug(`docker.Install.limaAvailable ok: ${res}`); + core.debug(`docker.Install.limaInstalled ok: ${res}`); return true; }) .catch(error => { - core.debug(`docker.Install.limaAvailable error: ${error}`); + core.debug(`docker.Install.limaInstalled error: ${error}`); return false; }); } - private static async qemuArch(): Promise { + private static async qemuBin(): Promise { switch (os.arch()) { case 'x64': { - return 'x86_64'; + return `qemu-system-x86_64`; } case 'arm64': { - return 'aarch64'; + return `qemu-system-aarch64`; } default: { - return os.arch(); + return `qemu-system-${os.arch()}`; } } } + private static async qemuInstalled(): Promise { + return await io + .which(await Install.qemuBin(), true) + .then(res => { + core.debug(`docker.Install.qemuInstalled ok: ${res}`); + return true; + }) + .catch(error => { + core.debug(`docker.Install.qemuInstalled error: ${error}`); + return false; + }); + } + public static async getRelease(version: string): Promise { const url = `https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/docker-releases.json`; const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');