docker / bake-action

GitHub Action to use Docker Buildx Bake as a high-level build command
https://github.com/marketplace/actions/docker-buildx-bake
Apache License 2.0
179 stars 26 forks source link

Cache not working #245

Open FezVrasta opened 1 week ago

FezVrasta commented 1 week ago

Contributing guidelines

I've found a bug, and:

Description

I'm trying to use this action to build a multi stage image using a docker compose configuration file. The build is working correctly and the images are pushed to the Google Artifacts registry just fine, but subsequent builds are not taking advantage of the layers cache even though nothing in the repository changed at all.

Screenshot 2024-09-01 at 19 07 08

Expected behaviour

I would expect this to be way higher than 0%

Actual behaviour

Cache seem not to be used at all?

Repository URL

No response

Workflow run URL

No response

YAML workflow

# Setup gcloud CLI
      - uses: "google-github-actions/setup-gcloud@v2"
        if: ${{ env.dryRun == 'false' }}
        with:
          project_id: ${{ env.GCP_PROJECT_ID }}
          version: "482.0.0"

      # This gives us access to buildx
      - name: Set up Docker CLI
        uses: docker/setup-buildx-action@v3

      # Configure Docker to use the gcloud command-line tool as a credential
      # helper for authentication
      - if: ${{ env.dryRun == 'false' }}
        run: |-
          gcloud --quiet auth configure-docker

      # Get the GKE credentials so we can deploy to the cluster
      - uses: google-github-actions/get-gke-credentials@db150f2cc60d1716e61922b832eae71d2a45938f
        if: ${{ env.dryRun == 'false' }}
        with:
          cluster_name: ${{ env.GKE_CLUSTER }}
          location: ${{ env.GCP_LOCATION }}

      - name: Build and Push Docker Images
        uses: docker/bake-action@v5
        env:
          TAG: ${{ steps.release-tag.outputs.tag }}
        with:
          source: "."
          files: "compose.yaml"
          workdir: "./docker"
          push: ${{ env.dryRun == 'false' }}
          load: true

Workflow logs

No response

BuildKit logs

No response

Additional info

No response

crazy-max commented 1 week ago

but subsequent builds are not taking advantage of the layers cache even though nothing in the repository changed at all.

I don't see any use of cache exporters in your workflow. You can use the gha exporter for example:

      - name: Build and Push Docker Images
        uses: docker/bake-action@v5
        env:
          TAG: ${{ steps.release-tag.outputs.tag }}
        with:
          source: "."
          files: "compose.yaml"
          workdir: "./docker"
          push: ${{ env.dryRun == 'false' }}
          load: true
          set:
            *.cache-from=type=gha
            *.cache-to=type=gha,mode=max

More info: https://docs.docker.com/build/ci/github-actions/cache/

FezVrasta commented 1 week ago

Thanks, that helped, but still I see only ~60% caching on runs where nothing in the repository changed at all 🤔

Screenshot 2024-09-02 at 13 21 16
crazy-max commented 1 week ago

Would need to look at your Dockerfile and build logs to figure out if this related to context changes (maybe .git folder).

Can you share your .dockerbuild file from the summary?

FezVrasta commented 1 week ago

Thanks for the help, this is my Dockerfile and this the .dockerbuild: dockerbuild.zip

Personally I don't see anything that could result in cache invalidation.

Edit: I even tried to just re-run the same build and I obtained the same results.

crazy-max commented 1 week ago

Seems cache is busted at COPY --parents instruction:

image

Wonder if this is a bug with new --parents flag :thinking:

Can you try without --parents if possible?

Can you also change this step:

      # This gives us access to buildx
      - name: Set up Docker CLI
        uses: docker/setup-buildx-action@v3

to


      # This gives us access to buildx
      - name: Set up Docker CLI
        uses: docker/setup-buildx-action@v3
        with:
          buildkitd-flags: --debug

And post the BuildKit logs from post step: https://docs.docker.com/build/ci/github-actions/configure-builder/#buildkit-container-logs

FezVrasta commented 1 week ago

Thanks, I removed the --parents and replaced it with several COPY commands one for each file.

This is the buildkit log: https://gist.github.com/FezVrasta/6d0c2024eb1bbfcbd4c37112136ea58d

This the dockerbuild: dockerbuild2.zip

I still see low cache percentage.