Skip to content

Commit

Permalink
docker(install): check qemu is installed
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
  • Loading branch information
crazy-max committed Nov 18, 2024
1 parent 0560728 commit 1362d80
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions src/docker/install.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<string> {
private static async qemuBin(): Promise<string> {
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<boolean> {
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<GitHubRelease> {
const url = `https://raw.githubusercontent.com/docker/actions-toolkit/main/.github/docker-releases.json`;
const http: httpm.HttpClient = new httpm.HttpClient('docker-actions-toolkit');
Expand Down

0 comments on commit 1362d80

Please sign in to comment.