mirror of
https://github.com/docker/build-push-action.git
synced 2024-11-06 00:35:53 -05:00
Output available platforms for setup-qemu
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
674ff6ada6
commit
2f906a9cb7
5 changed files with 69 additions and 2 deletions
4
.github/workflows/setup-qemu-ci.yml
vendored
4
.github/workflows/setup-qemu-ci.yml
vendored
|
@ -38,7 +38,11 @@ jobs:
|
||||||
uses: actions/checkout@v2.3.1
|
uses: actions/checkout@v2.3.1
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
|
id: qemu
|
||||||
uses: ./setup-qemu/
|
uses: ./setup-qemu/
|
||||||
with:
|
with:
|
||||||
image: ${{ matrix.image }}
|
image: ${{ matrix.image }}
|
||||||
platforms: ${{ matrix.platforms }}
|
platforms: ${{ matrix.platforms }}
|
||||||
|
-
|
||||||
|
name: Available platforms
|
||||||
|
run: echo ${{ steps.qemu.outputs.platforms }}
|
||||||
|
|
|
@ -30,10 +30,14 @@ jobs:
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
|
id: qemu
|
||||||
uses: docker/actions/setup-qemu@v1
|
uses: docker/actions/setup-qemu@v1
|
||||||
with:
|
with:
|
||||||
image: tonistiigi/binfmt:latest
|
image: tonistiigi/binfmt:latest
|
||||||
platforms: all
|
platforms: all
|
||||||
|
-
|
||||||
|
name: Available platforms
|
||||||
|
run: echo ${{ steps.qemu.outputs.platforms }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Customizing
|
## Customizing
|
||||||
|
@ -47,6 +51,14 @@ Following inputs can be used as `step.with` keys
|
||||||
| `image` | String | `tonistiigi/binfmt:latest` | QEMU static binaries Docker image. Example: [`tonistiigi/binfmt:latest`](https://hub.docker.com/r/tonistiigi/binfmt/tags) |
|
| `image` | String | `tonistiigi/binfmt:latest` | QEMU static binaries Docker image. Example: [`tonistiigi/binfmt:latest`](https://hub.docker.com/r/tonistiigi/binfmt/tags) |
|
||||||
| `platforms` | String | `all` | Platforms to install. Example: `arm64,riscv64,arm` |
|
| `platforms` | String | `all` | Platforms to install. Example: `arm64,riscv64,arm` |
|
||||||
|
|
||||||
|
### outputs
|
||||||
|
|
||||||
|
Following outputs are available
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|---------------|---------|---------------------------------------|
|
||||||
|
| `platforms` | String | Available platforms (comma separated) |
|
||||||
|
|
||||||
## Limitation
|
## Limitation
|
||||||
|
|
||||||
This action is only available for Linux [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources).
|
This action is only available for Linux [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources).
|
||||||
|
|
|
@ -16,6 +16,10 @@ inputs:
|
||||||
default: 'all'
|
default: 'all'
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
platforms:
|
||||||
|
description: 'Available platforms (comma separated)'
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: 'node12'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|
34
setup-qemu/src/exec.ts
Normal file
34
setup-qemu/src/exec.ts
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import * as actionsExec from '@actions/exec';
|
||||||
|
import {ExecOptions} from '@actions/exec';
|
||||||
|
|
||||||
|
export interface ExecResult {
|
||||||
|
success: boolean;
|
||||||
|
stdout: string;
|
||||||
|
stderr: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const exec = async (command: string, args: string[] = [], silent: boolean): Promise<ExecResult> => {
|
||||||
|
let stdout: string = '';
|
||||||
|
let stderr: string = '';
|
||||||
|
|
||||||
|
const options: ExecOptions = {
|
||||||
|
silent: silent,
|
||||||
|
ignoreReturnCode: true
|
||||||
|
};
|
||||||
|
options.listeners = {
|
||||||
|
stdout: (data: Buffer) => {
|
||||||
|
stdout += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data: Buffer) => {
|
||||||
|
stderr += data.toString();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const returnCode: number = await actionsExec.exec(command, args, options);
|
||||||
|
|
||||||
|
return {
|
||||||
|
success: returnCode === 0,
|
||||||
|
stdout: stdout.trim(),
|
||||||
|
stderr: stderr.trim()
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,6 +1,11 @@
|
||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from './exec';
|
||||||
|
|
||||||
|
interface Platforms {
|
||||||
|
supported: string[];
|
||||||
|
available: string[];
|
||||||
|
}
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
|
@ -13,7 +18,15 @@ async function run(): Promise<void> {
|
||||||
const platforms: string = core.getInput('platforms') || 'all';
|
const platforms: string = core.getInput('platforms') || 'all';
|
||||||
|
|
||||||
core.info(`💎 Installing QEMU static binaries...`);
|
core.info(`💎 Installing QEMU static binaries...`);
|
||||||
await exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]);
|
await exec.exec(`docker`, ['run', '--rm', '--privileged', image, '--install', platforms], false).then(res => {
|
||||||
|
if (res.stderr != '' && !res.success) {
|
||||||
|
throw new Error(res.stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
core.info('🛒 Extracting available platforms...');
|
||||||
|
const platforms: Platforms = JSON.parse(res.stdout.trim());
|
||||||
|
core.setOutput('platforms', platforms.supported.join(','));
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue