diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b045ba9..5aa1290 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,8 @@ jobs: - name: Checkout uses: actions/checkout@v2.3.3 + with: + path: action - name: Set up QEMU uses: docker/setup-qemu-action@v1 @@ -35,7 +37,7 @@ jobs: - name: Build and push id: docker_build - uses: ./ + uses: ./action with: file: ./test/Dockerfile builder: ${{ steps.buildx.outputs.name }} @@ -67,6 +69,8 @@ jobs: - name: Checkout uses: actions/checkout@v2.3.3 + with: + path: action - name: Set up QEMU uses: docker/setup-qemu-action@v1 @@ -82,7 +86,7 @@ jobs: - name: Build and push id: docker_build - uses: ./ + uses: ./action with: file: ./test/Dockerfile builder: ${{ steps.buildx.outputs.name }} @@ -215,8 +219,155 @@ jobs: if: always() uses: crazy-max/ghaction-dump-context@v1 - github-cache: + registry-cache: runs-on: ubuntu-latest + services: + registry: + image: registry:2 + ports: + - 5000:5000 + steps: + - + name: Checkout + uses: actions/checkout@v2.3.3 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: all + - + name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + driver-opts: network=host + - + name: Build and push (1) + id: docker_build + uses: ./ + with: + context: ./test + file: ./test/Dockerfile-multi + builder: ${{ steps.buildx.outputs.name }} + platforms: linux/amd64,linux/arm64 + push: true + tags: | + localhost:5000/name/app:latest + localhost:5000/name/app:1.0.0 + cache-from: type=registry,ref=localhost:5000/name/app + cache-to: type=inline + - + name: Inspect (1) + run: | + docker buildx imagetools inspect localhost:5000/name/app:latest + - + name: Image digest (1) + run: echo ${{ steps.docker_build.outputs.digest }} + - + name: Prune + run: | + docker buildx prune -a -f --verbose + - + name: Build and push (2) + id: docker_build2 + uses: ./ + with: + context: ./test + file: ./test/Dockerfile-multi + builder: ${{ steps.buildx.outputs.name }} + platforms: linux/amd64,linux/arm64 + push: true + tags: | + localhost:5000/name/app:latest + localhost:5000/name/app:1.0.0 + cache-from: type=registry,ref=localhost:5000/name/app + cache-to: type=inline + - + name: Inspect (2) + run: | + docker buildx imagetools inspect localhost:5000/name/app:latest + - + name: Image digest (2) + run: echo ${{ steps.docker_build2.outputs.digest }} + - + name: Check digests + run: | + echo Compare "${{ steps.docker_build.outputs.digest }}" with "${{ steps.docker_build2.outputs.digest }}" + if [ "${{ steps.docker_build.outputs.digest }}" != "${{ steps.docker_build2.outputs.digest }}" ]; then + echo "::error::Digests should be identical" + exit 1 + fi + - + name: Dump context + if: always() + uses: crazy-max/ghaction-dump-context@v1 + + github-cache-first: + runs-on: ubuntu-latest + outputs: + digest: ${{ steps.docker_build.outputs.digest }} + services: + registry: + image: registry:2 + ports: + - 5000:5000 + steps: + - + name: Checkout + uses: actions/checkout@v2.3.3 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: all + - + name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + driver-opts: network=host + - + name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-ghcache-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx-ghcache- + - + name: Erase cache + run: | + rm -rf /tmp/.buildx-cache/* + - + name: Build and push + id: docker_build + uses: ./ + with: + context: ./test + file: ./test/Dockerfile-multi-golang + builder: ${{ steps.buildx.outputs.name }} + platforms: linux/amd64,linux/arm64 + push: true + tags: | + localhost:5000/name/app:latest + localhost:5000/name/app:1.0.0 + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + - + name: Inspect + run: | + docker buildx imagetools inspect localhost:5000/name/app:1.0.0 + - + name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} + - + name: Dump context + if: always() + uses: crazy-max/ghaction-dump-context@v1 + + github-cache-hit: + runs-on: ubuntu-latest + needs: github-cache-first services: registry: image: registry:2 @@ -243,9 +394,9 @@ jobs: id: cache with: path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} + key: ${{ runner.os }}-buildx-ghcache-${{ github.sha }} restore-keys: | - ${{ runner.os }}-buildx- + ${{ runner.os }}-buildx-ghcache- - name: Build and push id: docker_build @@ -268,6 +419,14 @@ jobs: - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} + - + name: Check digests + run: | + echo Compare "${{ needs.github-cache-first.outputs.digest }}" with "${{ steps.docker_build.outputs.digest }}" + if [ "${{ needs.github-cache-first.outputs.digest }}" != "${{ steps.docker_build.outputs.digest }}" ]; then + echo "::error::Digests should be identical" + exit 1 + fi - name: Cache hit run: echo ${{ steps.cache.outputs.cache-hit }} diff --git a/README.md b/README.md index 0e7e3b4..0342850 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ build-secrets, remote cache, etc. and different builder deployment/namespacing o ### Git context -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#L10). +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#L10-L12). ```yaml name: ci @@ -110,6 +110,8 @@ repository, you have to use a secret named `GIT_AUTH_TOKEN` to be able to authen > :warning: Subdir for Git context is [not yet supported](https://github.com/docker/build-push-action/issues/120). > For the moment you can use the [path context](#path-context). +> More info: https://docs.docker.com/engine/reference/commandline/build/#git-repositories + ### Path context You can also use the `PATH` context alongside the [`actions/checkout`](https://github.com/actions/checkout/) action. diff --git a/UPGRADE.md b/UPGRADE.md index 7f017d9..bda8509 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -66,8 +66,8 @@ steps: pull: true push: true build-args: arg1=value1,arg2=value2 - cache-from: type=registry,ref=myorg/myrepository - cache-to: type=registry,ref=myorg/myrepository + cache-from: type=registry,ref=myorg/myrepository:latest + cache-to: type=inline tags: myorg/myrepository:latest ```