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. # Docker will check for variables $ACTIONS_CACHE_URL, $ACTIONS_RESULTS_URL and $ACTIONS_RUNTIME_TOKEN # which are set automatically when running on GitHub infra: https://docs.docker.com/build/cache/backends/gha/#synopsis - name: Expose actions cache variables uses: actions/github-script@v8 with: script: | Object.keys(process.env).forEach(function (key) { if (key.startsWith('ACTIONS_')) { core.info(`Exporting ${key}`); core.exportVariable(key, process.env[key]); } }); - 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,${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,${cache_options}") fi # Always `--load` into docker images (needed when using the `docker-container` build driver). args+=(--load) echo "DOCKER_BUILD_CACHE_ARG=${args[*]}" >> $GITHUB_ENV