From f6efb5fcbbb2ff33f7ffb2651b7e01e93e341f4a Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Thu, 22 Sep 2022 11:54:00 +0200 Subject: [PATCH] platforms input Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 15 ++++++++++++++ README.md | 43 +++++++++++++++++++++------------------ __tests__/context.test.ts | 18 ++++++++++++++++ action.yml | 3 +++ src/context.ts | 5 +++++ 5 files changed, 64 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 04647f3..9dac17d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -449,3 +449,18 @@ jobs: - name: List builder platforms run: echo ${{ steps.buildx.outputs.platforms }} + + platforms: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v3 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: ./ + with: + platforms: linux/amd64 diff --git a/README.md b/README.md index 3b10951..5dcf392 100644 --- a/README.md +++ b/README.md @@ -71,33 +71,36 @@ jobs: ### inputs -Following inputs can be used as `step.with` keys - -| Name | Type | Description | -|-------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `version` | String | [Buildx](https://github.com/docker/buildx) version. (eg. `v0.3.0`, `latest`, `https://github.com/docker/buildx.git#master`) | -| `driver` | String | Sets the [builder driver](https://docs.docker.com/engine/reference/commandline/buildx_create/#driver) to be used (default `docker-container`) | -| `driver-opts` | CSV | List of additional [driver-specific options](https://docs.docker.com/engine/reference/commandline/buildx_create/#driver-opt) (eg. `image=moby/buildkit:master`) | -| `buildkitd-flags` | String | [Flags for buildkitd](https://docs.docker.com/engine/reference/commandline/buildx_create/#buildkitd-flags) daemon (since [buildx v0.3.0](https://github.com/docker/buildx/releases/tag/v0.3.0)) | -| `install` | Bool | Sets up `docker build` command as an alias to `docker buildx` (default `false`) | -| `use` | Bool | Switch to this builder instance (default `true`) | -| `endpoint` | String | [Optional address for docker socket](https://docs.docker.com/engine/reference/commandline/buildx_create/#description) or context from `docker context ls` | -| `config`¹ | String | [BuildKit config file](https://docs.docker.com/engine/reference/commandline/buildx_create/#config) | -| `config-inline`¹ | String | Same as `config` but inline | -| `append` | YAML | [Append additional nodes](docs/advanced/append-nodes.md) to the builder | +Following inputs can be used as `step.with` keys: -> * ¹ `config` and `config-inline` are mutually exclusive - -> `CSV` type must be a newline-delimited string -> ```yaml -> driver-opts: image=moby/buildkit:master -> ``` +> `List` type is a newline-delimited string > ```yaml > driver-opts: | > image=moby/buildkit:master > network=host > ``` +> `CSV` type must be a newline-delimited string +> ```yaml +> platforms: linux/amd64,linux/arm64 +> ``` + +| Name | Type | Description | +|-------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `version` | String | [Buildx](https://github.com/docker/buildx) version. (eg. `v0.3.0`, `latest`, `https://github.com/docker/buildx.git#master`) | +| `driver` | String | Sets the [builder driver](https://docs.docker.com/engine/reference/commandline/buildx_create/#driver) to be used (default `docker-container`) | +| `driver-opts` | List | List of additional [driver-specific options](https://docs.docker.com/engine/reference/commandline/buildx_create/#driver-opt) (eg. `image=moby/buildkit:master`) | +| `buildkitd-flags` | String | [Flags for buildkitd](https://docs.docker.com/engine/reference/commandline/buildx_create/#buildkitd-flags) daemon (since [buildx v0.3.0](https://github.com/docker/buildx/releases/tag/v0.3.0)) | +| `install` | Bool | Sets up `docker build` command as an alias to `docker buildx` (default `false`) | +| `use` | Bool | Switch to this builder instance (default `true`) | +| `endpoint` | String | [Optional address for docker socket](https://docs.docker.com/engine/reference/commandline/buildx_create/#description) or context from `docker context ls` | +| `platforms` | List/CSV | Fixed [platforms](https://docs.docker.com/engine/reference/commandline/buildx_create/#platform) for current node. If not empty, values take priority over the detected ones. | +| `config`¹ | String | [BuildKit config file](https://docs.docker.com/engine/reference/commandline/buildx_create/#config) | +| `config-inline`¹ | String | Same as `config` but inline | +| `append` | YAML | [Append additional nodes](docs/advanced/append-nodes.md) to the builder | + +> * ¹ `config` and `config-inline` are mutually exclusive + ### outputs Following outputs are available diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index 4c4605e..bd8760a 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -91,6 +91,24 @@ describe('getCreateArgs', () => { 'tls://foo:1234' ] ], + [ + 4, + new Map([ + ['driver', 'remote'], + ['platforms', 'linux/arm64,linux/arm/v7'], + ['endpoint', 'tls://foo:1234'], + ['install', 'false'], + ['use', 'true'], + ]), + [ + 'create', + '--name', 'builder-9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d', + '--driver', 'remote', + '--platform', 'linux/arm64,linux/arm/v7', + '--use', + 'tls://foo:1234' + ] + ], ])( '[%d] given %p as inputs, returns %p', async (num: number, inputs: Map, expected: Array) => { diff --git a/action.yml b/action.yml index 4a5a739..885679e 100644 --- a/action.yml +++ b/action.yml @@ -32,6 +32,9 @@ inputs: endpoint: description: 'Optional address for docker socket or context from `docker context ls`' required: false + platforms: + description: 'Fixed platforms for current node. If not empty, values take priority over the detected ones' + required: false config: description: 'BuildKit config file' required: false diff --git a/src/context.ts b/src/context.ts index e8861d3..bea998f 100644 --- a/src/context.ts +++ b/src/context.ts @@ -29,6 +29,7 @@ export interface Inputs { driver: string; driverOpts: string[]; buildkitdFlags: string; + platforms: string[]; install: boolean; use: boolean; endpoint: string; @@ -44,6 +45,7 @@ export async function getInputs(): Promise { driver: core.getInput('driver') || 'docker-container', driverOpts: await getInputList('driver-opts', true), buildkitdFlags: core.getInput('buildkitd-flags') || '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host', + platforms: await getInputList('platforms'), install: core.getBooleanInput('install'), use: core.getBooleanInput('use'), endpoint: core.getInput('endpoint'), @@ -67,6 +69,9 @@ export async function getCreateArgs(inputs: Inputs, buildxVersion: string): Prom args.push('--buildkitd-flags', inputs.buildkitdFlags); } } + if (inputs.platforms.length > 0) { + args.push('--platform', inputs.platforms.join(',')); + } if (inputs.use) { args.push('--use'); }