Skip to content

Commit

Permalink
Output available platforms for setup-qemu
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
  • Loading branch information
CrazyMax committed Aug 11, 2020
1 parent 674ff6a commit 2f906a9
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 2 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/setup-qemu-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,11 @@ jobs:
uses: actions/checkout@v2.3.1
-
name: Set up QEMU
id: qemu
uses: ./setup-qemu/
with:
image: ${{ matrix.image }}
platforms: ${{ matrix.platforms }}
-
name: Available platforms
run: echo ${{ steps.qemu.outputs.platforms }}
12 changes: 12 additions & 0 deletions setup-qemu/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,14 @@ jobs:
uses: actions/checkout@v2
-
name: Set up QEMU
id: qemu
uses: docker/actions/setup-qemu@v1
with:
image: tonistiigi/binfmt:latest
platforms: all
-
name: Available platforms
run: echo ${{ steps.qemu.outputs.platforms }}
```
## Customizing
Expand All @@ -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) |
| `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

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).
4 changes: 4 additions & 0 deletions setup-qemu/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ inputs:
default: 'all'
required: false

outputs:
platforms:
description: 'Available platforms (comma separated)'

runs:
using: 'node12'
main: 'dist/index.js'
34 changes: 34 additions & 0 deletions setup-qemu/src/exec.ts
Original file line number Diff line number Diff line change
@@ -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()
};
};
17 changes: 15 additions & 2 deletions setup-qemu/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import * as os from 'os';
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> {
try {
Expand All @@ -13,7 +18,15 @@ async function run(): Promise<void> {
const platforms: string = core.getInput('platforms') || 'all';

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) {
core.setFailed(error.message);
}
Expand Down

0 comments on commit 2f906a9

Please sign in to comment.