diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d4f7ade..62f59c7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,3 +65,26 @@ jobs: echo "::error::Should have failed" exit 1 fi + + cache-image: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + cache: + - true + - false + steps: + - + name: Checkout + uses: actions/checkout@v4 + - + name: Set up QEMU + id: qemu + uses: ./ + with: + image: tonistiigi/binfmt:master + cache-image: ${{ matrix.cache }} + - + name: Available platforms + run: echo ${{ steps.qemu.outputs.platforms }} diff --git a/README.md b/README.md index ba1224f..5adf3ff 100644 --- a/README.md +++ b/README.md @@ -41,10 +41,11 @@ jobs: The following inputs can be used as `step.with` keys: -| Name | Type | Default | Description | -|-------------|--------|-------------------------------------------------------------------------------|--------------------------------------------------| -| `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`) | +| Name | Type | Default | Description | +|---------------|--------|-------------------------------------------------------------------------------|----------------------------------------------------| +| `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`) | +| `cache-image` | Bool | `true` | Cache binfmt image to GitHub Actions cache backend | ### outputs diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 9049971..76eadda 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -16,10 +16,13 @@ describe('getInputs', () => { test.each([ [ 0, - new Map([]), + new Map([ + ['cache-image', 'true'], + ]), { image: 'tonistiigi/binfmt:latest', platforms: 'all', + cacheImage: true, } as context.Inputs ], [ @@ -27,20 +30,24 @@ describe('getInputs', () => { new Map([ ['image', 'docker/binfmt:latest'], ['platforms', 'arm64,riscv64,arm'], + ['cache-image', 'false'], ]), { image: 'docker/binfmt:latest', platforms: 'arm64,riscv64,arm', + cacheImage: false, } as context.Inputs ], [ 2, new Map([ ['platforms', 'arm64, riscv64, arm '], + ['cache-image', 'true'], ]), { image: 'tonistiigi/binfmt:latest', platforms: 'arm64,riscv64,arm', + cacheImage: true, } as context.Inputs ] ])( diff --git a/action.yml b/action.yml index 26b1357..701a4b9 100644 --- a/action.yml +++ b/action.yml @@ -15,6 +15,10 @@ inputs: description: 'Platforms to install (e.g. arm64,riscv64,arm)' default: 'all' required: false + cache-image: + description: 'Cache binfmt image to GitHub Actions cache backend' + default: 'true' + required: false outputs: platforms: @@ -23,3 +27,4 @@ outputs: runs: using: 'node20' main: 'dist/index.js' + post: 'dist/index.js' diff --git a/src/context.ts b/src/context.ts index e116941..156e0ad 100644 --- a/src/context.ts +++ b/src/context.ts @@ -4,11 +4,13 @@ import {Util} from '@docker/actions-toolkit/lib/util'; export interface Inputs { image: string; platforms: string; + cacheImage: boolean; } export function getInputs(): Inputs { return { image: core.getInput('image') || 'tonistiigi/binfmt:latest', - platforms: Util.getInputList('platforms').join(',') || 'all' + platforms: Util.getInputList('platforms').join(',') || 'all', + cacheImage: core.getBooleanInput('cache-image') }; } diff --git a/src/main.ts b/src/main.ts index 0026eec..b3ede2a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -20,7 +20,7 @@ actionsToolkit.run( }); await core.group(`Pulling binfmt Docker image`, async () => { - await Exec.exec('docker', ['pull', input.image]); + await Docker.pull(input.image, input.cacheImage); }); await core.group(`Image info`, async () => {