mirror of
https://github.com/docker/setup-qemu-action
synced 2024-11-10 06:41:40 +00:00
commit
bfc44eaf57
5 changed files with 59 additions and 41 deletions
|
@ -13,6 +13,7 @@ ___
|
||||||
* [Usage](#usage)
|
* [Usage](#usage)
|
||||||
* [Customizing](#customizing)
|
* [Customizing](#customizing)
|
||||||
* [inputs](#inputs)
|
* [inputs](#inputs)
|
||||||
|
* [outputs](#outputs)
|
||||||
* [Contributing](#contributing)
|
* [Contributing](#contributing)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
2
dist/index.js
generated
vendored
2
dist/index.js
generated
vendored
File diff suppressed because one or more lines are too long
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
19
src/context.ts
Normal file
19
src/context.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
import {issueCommand} from '@actions/core/lib/command';
|
||||||
|
|
||||||
|
export interface Inputs {
|
||||||
|
image: string;
|
||||||
|
platforms: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getInputs(): Inputs {
|
||||||
|
return {
|
||||||
|
image: core.getInput('image') || 'tonistiigi/binfmt:latest',
|
||||||
|
platforms: core.getInput('platforms') || 'all'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: Temp fix https://github.com/actions/toolkit/issues/777
|
||||||
|
export function setOutput(name: string, value: unknown): void {
|
||||||
|
issueCommand('set-output', {name}, value);
|
||||||
|
}
|
76
src/main.ts
76
src/main.ts
|
@ -1,6 +1,6 @@
|
||||||
|
import * as context from './context';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from '@actions/exec';
|
||||||
import {issueCommand} from '@actions/core/lib/command';
|
|
||||||
|
|
||||||
interface Platforms {
|
interface Platforms {
|
||||||
supported: string[];
|
supported: string[];
|
||||||
|
@ -9,49 +9,47 @@ interface Platforms {
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
core.startGroup(`Docker info`);
|
const input: context.Inputs = context.getInputs();
|
||||||
await exec.exec('docker', ['version']);
|
|
||||||
await exec.exec('docker', ['info']);
|
|
||||||
core.endGroup();
|
|
||||||
|
|
||||||
const image: string = core.getInput('image') || 'tonistiigi/binfmt:latest';
|
await core.group(`Docker info`, async () => {
|
||||||
const platforms: string = core.getInput('platforms') || 'all';
|
await exec.exec('docker', ['version'], {
|
||||||
|
failOnStdErr: false
|
||||||
core.startGroup(`Pulling binfmt Docker image`);
|
|
||||||
await exec.exec('docker', ['pull', image]);
|
|
||||||
core.endGroup();
|
|
||||||
|
|
||||||
core.startGroup(`Image info`);
|
|
||||||
await exec.exec('docker', ['image', 'inspect', image]);
|
|
||||||
core.endGroup();
|
|
||||||
|
|
||||||
core.startGroup(`Installing QEMU static binaries`);
|
|
||||||
await exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]);
|
|
||||||
core.endGroup();
|
|
||||||
|
|
||||||
core.startGroup(`Extracting available platforms`);
|
|
||||||
await exec
|
|
||||||
.getExecOutput('docker', ['run', '--rm', '--privileged', image], {
|
|
||||||
ignoreReturnCode: true,
|
|
||||||
silent: true
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
if (res.stderr.length > 0 && res.exitCode != 0) {
|
|
||||||
throw new Error(res.stderr.trim());
|
|
||||||
}
|
|
||||||
const platforms: Platforms = JSON.parse(res.stdout.trim());
|
|
||||||
core.info(`${platforms.supported.join(',')}`);
|
|
||||||
setOutput('platforms', platforms.supported.join(','));
|
|
||||||
});
|
});
|
||||||
core.endGroup();
|
await exec.exec('docker', ['info'], {
|
||||||
|
failOnStdErr: false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
await core.group(`Pulling binfmt Docker image`, async () => {
|
||||||
|
await exec.exec('docker', ['pull', input.image]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await core.group(`Image info`, async () => {
|
||||||
|
await exec.exec('docker', ['image', 'inspect', input.image]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await core.group(`Installing QEMU static binaries`, async () => {
|
||||||
|
await exec.exec('docker', ['run', '--rm', '--privileged', input.image, '--install', input.platforms]);
|
||||||
|
});
|
||||||
|
|
||||||
|
await core.group(`Extracting available platforms`, async () => {
|
||||||
|
await exec
|
||||||
|
.getExecOutput('docker', ['run', '--rm', '--privileged', input.image], {
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
if (res.stderr.length > 0 && res.exitCode != 0) {
|
||||||
|
throw new Error(res.stderr.trim());
|
||||||
|
}
|
||||||
|
const platforms: Platforms = JSON.parse(res.stdout.trim());
|
||||||
|
core.info(`${platforms.supported.join(',')}`);
|
||||||
|
context.setOutput('platforms', platforms.supported.join(','));
|
||||||
|
});
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Temp fix https://github.com/actions/toolkit/issues/777
|
|
||||||
function setOutput(name: string, value: unknown): void {
|
|
||||||
issueCommand('set-output', {name}, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
|
Loading…
Reference in a new issue