2020-08-18 11:54:41 -04:00
[![GitHub release ](https://img.shields.io/github/release/docker/setup-buildx-action.svg?style=flat-square )](https://github.com/docker/setup-buildx-action/releases/latest)
[![GitHub marketplace ](https://img.shields.io/badge/marketplace-docker--setup--buildx-blue?logo=github&style=flat-square )](https://github.com/marketplace/actions/docker-setup-buildx)
[![CI workflow ](https://img.shields.io/github/workflow/status/docker/setup-buildx-action/ci?label=ci&logo=github&style=flat-square )](https://github.com/docker/setup-buildx-action/actions?workflow=ci)
[![Test workflow ](https://img.shields.io/github/workflow/status/docker/setup-buildx-action/test?label=test&logo=github&style=flat-square )](https://github.com/docker/setup-buildx-action/actions?workflow=test)
2020-08-27 11:41:10 -04:00
[![Codecov ](https://img.shields.io/codecov/c/github/docker/setup-buildx-action?logo=codecov&style=flat-square )](https://codecov.io/gh/docker/setup-buildx-action)
2020-08-18 11:54:41 -04:00
2020-08-18 11:40:31 -04:00
## About
GitHub Action to set up Docker [Buildx ](https://github.com/docker/buildx ).
2021-02-17 12:30:12 -05:00
This action will create and boot a builder that can be used in the following steps of your workflow if you're using
2021-04-03 14:57:47 -04:00
[buildx ](https://github.com/docker/buildx ). By default, the `docker-container` [builder driver ](https://github.com/docker/buildx/blob/master/docs/reference/buildx_create.md#driver )
2021-02-17 12:30:12 -05:00
will be used to be able to build multi-platform images and export cache thanks to the [BuildKit ](https://github.com/moby/buildkit )
container.
2020-08-19 07:24:24 -04:00
![Screenshot ](.github/setup-buildx-action.png )
2020-08-18 11:40:31 -04:00
___
* [Usage ](#usage )
* [Quick start ](#quick-start )
* [With QEMU ](#with-qemu )
2020-08-29 11:50:15 -04:00
* [Install by default ](#install-by-default )
2021-09-03 16:21:20 -04:00
* [BuildKit daemon configuration ](#buildkit-daemon-configuration )
* [Registry mirror ](#registry-mirror )
* [Max parallelism ](#max-parallelism )
2022-04-17 11:22:03 -04:00
* [Standalone mode ](#standalone-mode )
2020-08-18 11:40:31 -04:00
* [Customizing ](#customizing )
* [inputs ](#inputs )
* [outputs ](#outputs )
* [environment variables ](#environment-variables )
2021-04-23 16:08:40 -04:00
* [Notes ](#notes )
* [BuildKit container logs ](#buildkit-container-logs )
2020-08-20 11:26:41 -04:00
* [Keep up-to-date with GitHub Dependabot ](#keep-up-to-date-with-github-dependabot )
2020-08-18 11:40:31 -04:00
## Usage
### Quick start
```yaml
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Docker Buildx
id: buildx
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2020-08-18 11:40:31 -04:00
-
2021-04-23 12:14:38 -04:00
name: Inspect builder
run: |
echo "Name: ${{ steps.buildx.outputs.name }}"
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
echo "Status: ${{ steps.buildx.outputs.status }}"
echo "Flags: ${{ steps.buildx.outputs.flags }}"
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
2020-08-18 11:40:31 -04:00
```
### With QEMU
If you want support for more platforms you can use our [setup-qemu ](https://github.com/docker/setup-qemu-action ) action:
```yaml
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU
2022-05-05 13:43:45 -04:00
uses: docker/setup-qemu-action@v2
2020-08-18 11:40:31 -04:00
-
name: Set up Docker Buildx
id: buildx
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2020-08-18 11:40:31 -04:00
-
name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
```
2020-08-29 11:50:15 -04:00
### Install by default
```yaml
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2020-08-29 11:50:15 -04:00
id: buildx
with:
install: true
-
name: Build
run: |
docker build . # will run buildx
```
2021-09-03 16:21:20 -04:00
### BuildKit daemon configuration
You can provide a [BuildKit configuration ](https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md )
to your builder if you're using the [`docker-container` driver ](https://github.com/docker/buildx/blob/master/docs/reference/buildx_create.md#driver )
(default) with the `config` or `config-inline` inputs:
#### Registry mirror
You can configure a registry mirror using an inline block directly in your
workflow with the `config-inline` input:
```yaml
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Set up Docker Buildx
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2021-09-03 16:21:20 -04:00
with:
config-inline: |
[registry."docker.io"]
mirrors = ["mirror.gcr.io"]
```
#### Max parallelism
You can limit the parallelism of the BuildKit solver which is particularly
useful for low-powered machines.
You can use the `config-inline` input like the
previous example, or you can use a dedicated BuildKit config file from your
repo if you want with the `config` input:
```toml
# .github/buildkitd.toml
[worker.oci]
max-parallelism = 4
```
```yaml
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Set up Docker Buildx
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2021-09-03 16:21:20 -04:00
with:
config: .github/buildkitd.toml
```
2022-04-17 11:22:03 -04:00
### Standalone mode
If you don't have the Docker CLI installed on the GitHub Runner, buildx binary
is invoked directly, instead of calling it as a docker plugin. This can be
useful if you want to use the `kubernetes` driver in your self-hosted runner:
```yaml
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
name: Set up Docker Buildx
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2022-04-17 11:22:03 -04:00
with:
driver: kubernetes
-
name: Build
run: |
buildx build .
```
2020-08-18 11:40:31 -04:00
## Customizing
### inputs
Following inputs can be used as `step.with` keys
2020-08-21 11:31:14 -04:00
| Name | Type | Description |
|--------------------|---------|-----------------------------------|
2021-07-02 01:02:22 -04:00
| `version` | String | [buildx ](https://github.com/docker/buildx ) version. (eg. `v0.3.0` , `latest` , `https://github.com/docker/buildx.git#master` ) |
2021-04-03 14:57:47 -04:00
| `driver` | String | Sets the [builder driver ](https://github.com/docker/buildx/blob/master/docs/reference/buildx_create.md#driver ) to be used (default `docker-container` ) |
| `driver-opts` | CSV | List of additional [driver-specific options ](https://github.com/docker/buildx/blob/master/docs/reference/buildx_create.md#driver-opt ) (eg. `image=moby/buildkit:master` ) |
2020-09-03 15:02:36 -04:00
| `buildkitd-flags` | String | [Flags for buildkitd ](https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md ) daemon (since [buildx v0.3.0 ](https://github.com/docker/buildx/releases/tag/v0.3.0 )) |
2020-08-21 11:31:14 -04:00
| `install` | Bool | Sets up `docker build` command as an alias to `docker buildx` (default `false` ) |
| `use` | Bool | Switch to this builder instance (default `true` ) |
2021-04-03 14:57:47 -04:00
| `endpoint` | String | [Optional address for docker socket ](https://github.com/docker/buildx/blob/master/docs/reference/buildx_create.md#description ) or context from `docker context ls` |
2022-04-17 11:22:03 -04:00
| `config` ¹ | String | [BuildKit config file ](https://github.com/docker/buildx/blob/master/docs/reference/buildx_create.md#config ) |
| `config-inline` ¹ | String | Same as `config` but inline |
2021-09-03 16:21:20 -04:00
2022-04-17 11:22:03 -04:00
> * ¹ `config` and `config-inline` are mutually exclusive
2020-08-18 11:40:31 -04:00
2020-09-03 10:23:15 -04:00
> `CSV` type must be a newline-delimited string
> ```yaml
> driver-opts: image=moby/buildkit:master
> ```
> ```yaml
> driver-opts: |
> image=moby/buildkit:master
> network=host
> ```
2020-08-18 11:40:31 -04:00
### outputs
Following outputs are available
| Name | Type | Description |
|---------------|---------|---------------------------------------|
2021-04-23 12:14:38 -04:00
| `name` | String | Builder name |
| `driver` | String | Builder driver |
| `endpoint` | String | Builder node endpoint |
| `status` | String | Builder node status |
| `flags` | String | Builder node flags (if applicable) |
| `platforms` | String | Builder node platforms available (comma separated) |
2020-08-18 11:40:31 -04:00
### environment variables
The following [official docker environment variables ](https://docs.docker.com/engine/reference/commandline/cli/#environment-variables ) are supported:
| Name | Type | Default | Description |
|-----------------|---------|-------------|-------------------------------------------------|
| `DOCKER_CONFIG` | String | `~/.docker` | The location of your client configuration files |
2021-04-23 16:08:40 -04:00
## Notes
### BuildKit container logs
To display BuildKit container logs (when `docker-container` driver is used) you have to [enable step debug logging ](https://docs.github.com/en/actions/managing-workflow-runs/enabling-debug-logging#enabling-step-debug-logging )
or you can also enable debugging in the [setup-buildx action step ](https://github.com/docker/setup-buildx-action ):
```yaml
-
name: Set up Docker Buildx
2022-05-05 13:43:45 -04:00
uses: docker/setup-buildx-action@v2
2021-04-23 16:08:40 -04:00
with:
buildkitd-flags: --debug
```
Logs will be available at the end of a job:
![BuildKit container logs ](.github/buildkit-container-logs.png )
2020-08-20 11:26:41 -04:00
## Keep up-to-date with GitHub Dependabot
Since [Dependabot ](https://docs.github.com/en/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot )
has [native GitHub Actions support ](https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates#package-ecosystem ),
to enable it on your GitHub repo all you need to do is add the `.github/dependabot.yml` file:
```yaml
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
```