@ -45,10 +45,7 @@ build-secrets, remote cache, etc. and different builder deployment/namespacing o
The default behavior of this action is to use the [Git context invoked by your workflow ](https://github.com/docker/build-push-action/blob/master/src/context.ts#L35 ).
The default behavior of this action is to use the [Git context invoked by your workflow ](https://github.com/docker/build-push-action/blob/master/src/context.ts#L35 ).
< details >
```yaml
< summary > < b > Show workflow< / b > < / summary >
```yaml
name: ci
name: ci
on:
on:
@ -81,11 +78,11 @@ jobs:
-
-
name: Image digest
name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
run: echo ${{ steps.docker_build.outputs.digest }}
```
```
< / details >
If you use this action in a private repository, you have to pass the [GitHub Token ](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token )
Building from current repository automatically uses the [GitHub Token ](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token )
as a secret named `GIT_AUTH_TOKEN` to be able to authenticate against it with buildx:
as provided by `secrets` so it does not need to be passed. But if you want to authenticate against another private
repository, you have to use a secret named `GIT_AUTH_TOKEN` to be able to authenticate against it with buildx:
```yaml
```yaml
-
-
@ -96,7 +93,7 @@ as a secret named `GIT_AUTH_TOKEN` to be able to authenticate against it with bu
push: true
push: true
tags: user/app:latest
tags: user/app:latest
secrets: |
secrets: |
GIT_AUTH_TOKEN=${{ github.token }}
GIT_AUTH_TOKEN=${{ secrets.MYTOKEN }}
```
```
> :warning: Subdir for Git context is [not yet supported ](https://github.com/docker/build-push-action/issues/120 ).
> :warning: Subdir for Git context is [not yet supported ](https://github.com/docker/build-push-action/issues/120 ).
@ -106,140 +103,128 @@ as a secret named `GIT_AUTH_TOKEN` to be able to authenticate against it with bu
You can also use the `PATH` context alongside the [`actions/checkout` ](https://github.com/actions/checkout/ ) action.
You can also use the `PATH` context alongside the [`actions/checkout` ](https://github.com/actions/checkout/ ) action.
< details >
```yaml
< summary > < b > Show workflow< / b > < / summary >
name: ci
```yaml
name: ci
on:
on:
push:
push:
branches: master
branches: master
jobs:
jobs:
path-context:
path-context:
runs-on: ubuntu-latest
runs-on: ubuntu-latest
steps:
steps:
-
-
name: Checkout
name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v2
-
-
name: Set up QEMU
name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v1
-
-
name: Set up Docker Buildx
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v1
-
-
name: Login to DockerHub
name: Login to DockerHub
uses: docker/login-action@v1
uses: docker/login-action@v1
with:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
-
name: Build and push
name: Build and push
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2
with:
with:
context: .
context: .
file: ./Dockerfile
file: ./Dockerfile
platforms: linux/amd64,linux/arm64,linux/386
platforms: linux/amd64,linux/arm64,linux/386
push: true
push: true
tags: user/app:latest
tags: user/app:latest
```
```
< / details >
### Isolated builders
### Isolated builders
< details >
```yaml
< summary > < b > Show workflow< / b > < / summary >
name: ci
```yaml
name: ci
on:
on:
push:
push:
branches: master
branches: master
jobs:
jobs:
multi-builders:
multi-builders:
runs-on: ubuntu-latest
runs-on: ubuntu-latest
steps:
steps:
-
-
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v1
id: builder1
id: builder1
-
-
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v1
id: builder2
id: builder2
-
-
name: Builder 1 name
name: Builder 1 name
run: echo ${{ steps.builder1.outputs.name }}
run: echo ${{ steps.builder1.outputs.name }}
-
-
name: Builder 2 name
name: Builder 2 name
run: echo ${{ steps.builder2.outputs.name }}
run: echo ${{ steps.builder2.outputs.name }}
-
-
name: Build against builder1
name: Build against builder1
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2
with:
with:
builder: ${{ steps.builder1.outputs.name }}
builder: ${{ steps.builder1.outputs.name }}
target: mytarget1
target: mytarget1
-
-
name: Build against builder2
name: Build against builder2
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2
with:
with:
builder: ${{ steps.builder2.outputs.name }}
builder: ${{ steps.builder2.outputs.name }}
target: mytarget2
target: mytarget2
```
```
< / details >
### Multi-platform image
### Multi-platform image
< details >
```yaml
< summary > < b > Show workflow< / b > < / summary >
name: ci
```yaml
name: ci
on:
on:
push:
push:
branches: master
branches: master
jobs:
jobs:
multi:
multi:
runs-on: ubuntu-latest
runs-on: ubuntu-latest
steps:
steps:
-
-
name: Checkout
name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v2
-
-
name: Set up QEMU
name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v1
-
-
name: Set up Docker Buildx
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v1
-
-
name: Login to DockerHub
name: Login to DockerHub
uses: docker/login-action@v1
uses: docker/login-action@v1
with:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
-
name: Build and push
name: Build and push
uses: docker/build-push-action@v2
uses: docker/build-push-action@v2
with:
with:
context: .
context: .
file: ./Dockerfile
file: ./Dockerfile
platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x
platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x
push: true
push: true
tags: |
tags: |
user/app:latest
user/app:latest
user/app:1.0.0
user/app:1.0.0
```
```
< / details >
## Advanced usage
## Advanced usage
### Local registry
### Local registry
For testing purposes you may need to create a [local registry ](https://hub.docker.com/_/registry ) to push images into.
For testing purposes you may need to create a [local registry ](https://hub.docker.com/_/registry ) to push images into:
< details >
< details >
< summary > < b > Show workflow< / b > < / summary >
< summary > < b > Show workflow< / b > < / summary >
@ -284,7 +269,7 @@ For testing purposes you may need to create a [local registry](https://hub.docke
### Leverage GitHub cache
### Leverage GitHub cache
You can leverage [GitHub cache ](https://docs.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows )
You can leverage [GitHub cache ](https://docs.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows )
using [actions/cache ](https://github.com/actions/cache ) with this action.
using [actions/cache ](https://github.com/actions/cache ) with this action:
< details >
< details >
< summary > < b > Show workflow< / b > < / summary >
< summary > < b > Show workflow< / b > < / summary >
@ -338,15 +323,6 @@ The following workflow with the `Prepare` step will generate some [outputs](http
to handle tags and labels based on GitHub actions events. This is just an example to show many cases that you
to handle tags and labels based on GitHub actions events. This is just an example to show many cases that you
might want to use:
might want to use:
| Event | Ref | Commit SHA | Docker Tag | Pushed |
|-----------------|-------------------------------|------------|------------------------------------|--------|
| `schedule` | | | `nightly` | Yes |
| `pull_request` | `refs/pull/2/merge` | `a123b57` | `pr-2` | No |
| `push` | `refs/heads/<default_branch>` | `676cae2` | `sha-676cae2` , `edge` | Yes |
| `push` | `refs/heads/dev` | `cf20257` | `sha-cf20257` , `dev` | Yes |
| `push` | `refs/heads/my/branch` | `a5df687` | `sha-a5df687` , `my-branch` | Yes |
| `push tag` | `refs/tags/v1.2.3` | | `v1.2.3` , `v1.2` , `v1` , `latest` | Yes |
< details >
< details >
< summary > < b > Show workflow< / b > < / summary >
< summary > < b > Show workflow< / b > < / summary >
@ -434,11 +410,20 @@ might want to use:
```
```
< / details >
< / details >
| Event | Ref | Commit SHA | Docker Tag | Pushed |
|-----------------|-------------------------------|------------|------------------------------------|--------|
| `schedule` | | | `nightly` | Yes |
| `pull_request` | `refs/pull/2/merge` | `a123b57` | `pr-2` | No |
| `push` | `refs/heads/<default_branch>` | `676cae2` | `sha-676cae2` , `edge` | Yes |
| `push` | `refs/heads/dev` | `cf20257` | `sha-cf20257` , `dev` | Yes |
| `push` | `refs/heads/my/branch` | `a5df687` | `sha-a5df687` , `my-branch` | Yes |
| `push tag` | `refs/tags/v1.2.3` | | `v1.2.3` , `v1.2` , `v1` , `latest` | Yes |
### Update DockerHub repo description
### Update DockerHub repo description
You can update the [Docker Hub repository description ](https://docs.docker.com/docker-hub/repos/ ) using
You can update the [Docker Hub repository description ](https://docs.docker.com/docker-hub/repos/ ) using
a third-party action called [Docker Hub Description ](https://github.com/peter-evans/dockerhub-description )
a third-party action called [Docker Hub Description ](https://github.com/peter-evans/dockerhub-description )
with this action.
with this action:
< details >
< details >
< summary > < b > Show workflow< / b > < / summary >
< summary > < b > Show workflow< / b > < / summary >