From a94448a773f43ec0a5e37bdf08a06545fa726993 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sat, 3 Oct 2020 22:44:16 +0200 Subject: [PATCH 1/5] Enhanced git context and cache workflow Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 76 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b045ba9..d810f49 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,70 @@ jobs: if: always() uses: crazy-max/ghaction-dump-context@v1 - github-cache: + github-cache-first: 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: 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 +309,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 From ecc23e57859b542017c402daee9001368c55b1d4 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sat, 3 Oct 2020 23:03:47 +0200 Subject: [PATCH 2/5] Update README Signed-off-by: CrazyMax --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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. From 499091e46bd12ded054fd6d86d151e6c42a49c9e Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sat, 3 Oct 2020 23:33:32 +0200 Subject: [PATCH 3/5] Check digests Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d810f49..c700d8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -221,6 +221,8 @@ jobs: github-cache-first: runs-on: ubuntu-latest + outputs: + digest: ${{ steps.docker_build.outputs.digest }} services: registry: image: registry:2 @@ -334,6 +336,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 }} From 5538ea42ecc3862ea0409b4b0c43b101e7ccee3e Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sun, 4 Oct 2020 00:01:14 +0200 Subject: [PATCH 4/5] Add registry cache job Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 91 ++++++++++++++++++++++++++++++++++++++++ UPGRADE.md | 4 +- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c700d8b..f8deddd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -219,6 +219,97 @@ jobs: if: always() uses: crazy-max/ghaction-dump-context@v1 + 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 + cache-to: type=registry,ref=localhost:5000/name/app:cache + - + name: Inspect (1) + run: | + docker buildx imagetools inspect localhost:5000/name/app:1.0.0 + - + name: Inspect cache (1) + run: | + docker buildx imagetools inspect localhost:5000/name/app:cache + - + 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 + cache-to: type=registry,ref=localhost:5000/name/app:cache + - + name: Inspect (2) + run: | + docker buildx imagetools inspect localhost:5000/name/app:1.0.0 + - + name: Inspect cache (2) + run: | + docker buildx imagetools inspect localhost:5000/name/app:cache + - + 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: diff --git a/UPGRADE.md b/UPGRADE.md index 7f017d9..72e4ecf 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:cache + cache-to: type=registry,ref=myorg/myrepository:cache tags: myorg/myrepository:latest ``` From 9e2936f9edbb82b8dfca068dc20eda154cc89dc3 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sun, 4 Oct 2020 01:10:42 +0200 Subject: [PATCH 5/5] Writes cache metadata into the image configuration Signed-off-by: CrazyMax --- .github/workflows/ci.yml | 20 ++++++-------------- UPGRADE.md | 4 ++-- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8deddd..5aa1290 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -254,16 +254,12 @@ jobs: tags: | localhost:5000/name/app:latest localhost:5000/name/app:1.0.0 - cache-from: type=registry,ref=localhost:5000/name/app:cache - cache-to: type=registry,ref=localhost:5000/name/app:cache + 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:1.0.0 - - - name: Inspect cache (1) - run: | - docker buildx imagetools inspect localhost:5000/name/app:cache + docker buildx imagetools inspect localhost:5000/name/app:latest - name: Image digest (1) run: echo ${{ steps.docker_build.outputs.digest }} @@ -284,16 +280,12 @@ jobs: tags: | localhost:5000/name/app:latest localhost:5000/name/app:1.0.0 - cache-from: type=registry,ref=localhost:5000/name/app:cache - cache-to: type=registry,ref=localhost:5000/name/app:cache + 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:1.0.0 - - - name: Inspect cache (2) - run: | - docker buildx imagetools inspect localhost:5000/name/app:cache + docker buildx imagetools inspect localhost:5000/name/app:latest - name: Image digest (2) run: echo ${{ steps.docker_build2.outputs.digest }} diff --git a/UPGRADE.md b/UPGRADE.md index 72e4ecf..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 - cache-to: type=registry,ref=myorg/myrepository:cache + cache-from: type=registry,ref=myorg/myrepository:latest + cache-to: type=inline tags: myorg/myrepository:latest ```