Merge pull request #21 from crazy-max/uninst

uninstall current emulators
This commit is contained in:
CrazyMax
2026-05-27 18:06:51 +02:00
committed by GitHub
8 changed files with 100 additions and 55 deletions

View File

@@ -125,3 +125,23 @@ jobs:
uses: ./
with:
image: ${{ matrix.image }}
reset:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
name: Install multiarch/qemu-user-static
run: |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes
-
name: Set up QEMU
id: qemu
uses: ./
with:
reset: true
-
name: Available platforms
run: echo ${{ steps.qemu.outputs.platforms }}

View File

@@ -86,6 +86,7 @@ The following inputs can be used as `step.with` keys:
|---------------|--------|-------------------------------------------------------------------------------|----------------------------------------------------|
| `image` | String | [`tonistiigi/binfmt:latest`](https://hub.docker.com/r/tonistiigi/binfmt/tags) | QEMU static binaries Docker image |
| `platforms` | String | `all` | Platforms to install (e.g., `arm64,riscv64,arm`) |
| `reset` | Bool | `false` | Uninstall current emulators before installation |
| `cache-image` | Bool | `true` | Cache binfmt image to GitHub Actions cache backend |
### outputs

View File

@@ -17,11 +17,13 @@ describe('getInputs', () => {
[
0,
new Map<string, string>([
['reset', 'false'],
['cache-image', 'true'],
]),
{
image: 'docker.io/tonistiigi/binfmt:latest',
platforms: 'all',
reset: false,
cacheImage: true,
}
],
@@ -30,11 +32,13 @@ describe('getInputs', () => {
new Map<string, string>([
['image', 'docker/binfmt:latest'],
['platforms', 'arm64,riscv64,arm'],
['reset', 'false'],
['cache-image', 'false'],
]),
{
image: 'docker/binfmt:latest',
platforms: 'arm64,riscv64,arm',
reset: false,
cacheImage: false,
}
],
@@ -42,11 +46,13 @@ describe('getInputs', () => {
2,
new Map<string, string>([
['platforms', 'arm64, riscv64, arm '],
['reset', 'false'],
['cache-image', 'true'],
]),
{
image: 'docker.io/tonistiigi/binfmt:latest',
platforms: 'arm64,riscv64,arm',
reset: false,
cacheImage: true,
}
]

View File

@@ -15,6 +15,10 @@ inputs:
description: 'Platforms to install (e.g. arm64,riscv64,arm)'
default: 'all'
required: false
reset:
description: 'Uninstall current emulators before installation'
default: 'false'
required: false
cache-image:
description: 'Cache binfmt image to GitHub Actions cache backend'
default: 'true'

106
dist/index.cjs generated vendored

File diff suppressed because one or more lines are too long

4
dist/index.cjs.map generated vendored

File diff suppressed because one or more lines are too long

View File

@@ -4,6 +4,7 @@ import {Util} from '@docker/actions-toolkit/lib/util.js';
export interface Inputs {
image: string;
platforms: string;
reset: boolean;
cacheImage: boolean;
}
@@ -11,6 +12,7 @@ export function getInputs(): Inputs {
return {
image: core.getInput('image') || 'docker.io/tonistiigi/binfmt:latest',
platforms: Util.getInputList('platforms').join(',') || 'all',
reset: core.getBooleanInput('reset'),
cacheImage: core.getBooleanInput('cache-image')
};
}

View File

@@ -44,6 +44,18 @@ actionsToolkit.run(
});
});
if (input.reset) {
await core.group(`Uninstalling current emulators`, async () => {
await Docker.getExecOutput(['run', '--rm', '--privileged', input.image, '--uninstall', 'qemu-*'], {
ignoreReturnCode: true
}).then(res => {
if (res.stderr.length > 0 && res.exitCode != 0) {
throw new Error(res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error');
}
});
});
}
await core.group(`Installing QEMU static binaries`, async () => {
await Docker.getExecOutput(['run', '--rm', '--privileged', input.image, '--install', input.platforms], {
ignoreReturnCode: true