From 82901981bfbaeb3f41956597e6d90daa59a0c078 Mon Sep 17 00:00:00 2001 From: will Date: Wed, 3 Jun 2026 11:25:11 +0100 Subject: [PATCH] ci: use Warp cache for Docker layers Speeds of 1MB/s and 15 minute cached docker image pulls during builds are not uncommon. Warp runners provide a local GitHub Actions cache protocol proxy for Docker layer cache traffic. Point BuildKit's gha cache backend at that proxy on Warp runners so cached image layers do not have to be fetched from GitHub's slower cache service. Add a default for provider so other users (e.g. qa-assets) don't have to update this unless they use custome runners. --- .github/actions/configure-docker/action.yml | 22 +++++++++++++++++++-- .github/workflows/ci.yml | 6 ++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/actions/configure-docker/action.yml b/.github/actions/configure-docker/action.yml index 6f89dc8bd04..074b47ce348 100644 --- a/.github/actions/configure-docker/action.yml +++ b/.github/actions/configure-docker/action.yml @@ -1,9 +1,22 @@ name: 'Configure Docker' description: 'Set up Docker build driver and configure build cache args' +inputs: + provider: + description: 'The cache provider to use' + required: false + default: 'gha' runs: using: 'composite' steps: + - name: Set up Docker Buildx for Warp cache + if: ${{ inputs.provider == 'warp' }} + uses: docker/setup-buildx-action@v4 + with: + driver-opts: | + network=host + - name: Set up Docker Buildx + if: ${{ inputs.provider != 'warp' }} uses: docker/setup-buildx-action@v4 # This is required when using the gha cache backend with a manual docker buildx invocation. @@ -23,13 +36,18 @@ runs: - name: Construct docker build cache args shell: bash run: | + cache_options="scope=${CONTAINER_NAME}" + if [[ "${{ inputs.provider }}" == "warp" ]]; then + cache_options="url=http://127.0.0.1:49160/,version=1,${cache_options}" + fi + # Configure docker build cache backend # Always optimistically --cache‑from in case a cache blob exists - args=(--cache-from "type=gha,scope=${CONTAINER_NAME}") + args=(--cache-from "type=gha,${cache_options}") # Only add --cache-to when pushing to the default branch. if [[ ${{ github.event_name }} == "push" && ${{ github.ref_name }} == ${{ github.event.repository.default_branch }} ]]; then - args+=(--cache-to "type=gha,mode=max,ignore-error=true,scope=${CONTAINER_NAME}") + args+=(--cache-to "type=gha,mode=max,ignore-error=true,${cache_options}") fi # Always `--load` into docker images (needed when using the `docker-container` build driver). diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8eaa68ab0e2..434b5e16718 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -363,6 +363,8 @@ jobs: - name: Configure Docker uses: ./.github/actions/configure-docker + with: + provider: ${{ needs.runners.outputs.provider }} - name: CI script run: ./ci/test_run_all.sh @@ -557,6 +559,8 @@ jobs: - name: Configure Docker uses: ./.github/actions/configure-docker + with: + provider: ${{ matrix.provider || needs.runners.outputs.provider }} - name: Clear unnecessary files if: ${{ needs.runners.outputs.provider == 'gha' && true || false }} # Only needed on GHA runners @@ -600,6 +604,8 @@ jobs: - name: Configure Docker uses: ./.github/actions/configure-docker + with: + provider: ${{ needs.runners.outputs.provider }} - name: CI script run: |