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.
This commit is contained in:
will
2026-06-03 11:25:11 +01:00
parent 61d1c78ed4
commit 82901981bf
2 changed files with 26 additions and 2 deletions

View File

@@ -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 --cachefrom 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).

View File

@@ -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: |