From 22ebe9feb09c82f9610a42e9ff229ca3d513da7e Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 5 May 2026 00:22:59 -0700 Subject: [PATCH] ci(e2e): switch FUSE Mount build to Azure Ubuntu mirror, persist buildx cache archive.ubuntu.com from GitHub-hosted runners has been Ign:/retrying for ~60s per package, eating the Start SeaweedFS step's 10-min budget before apt-get install finishes. The host already uses azure.archive.ubuntu.com; do the same inside Dockerfile.e2e and drop the Retries=5 amplifier. Also rotate /tmp/.buildx-cache-new over /tmp/.buildx-cache so the apt layer actually survives across runs, and bump the step to 15 minutes as a safety margin. --- .github/workflows/e2e.yml | 14 +++++++++++--- docker/Dockerfile.e2e | 8 +++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 914c432d2..433e99c26 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -57,12 +57,12 @@ jobs: echo "FUSE device: $(ls -la /dev/fuse 2>&1 || echo '/dev/fuse not found')" - name: Start SeaweedFS - timeout-minutes: 10 + timeout-minutes: 15 run: | # Enable Docker buildkit for better caching export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1 - + # Build with retry logic for i in {1..3}; do echo "Build attempt $i/3" @@ -77,10 +77,18 @@ jobs: sleep 30 fi done - + # Start services with wait docker compose -f ./compose/e2e-mount.yml up --wait + - name: Rotate buildx cache + if: always() + run: | + # Without this, --cache-to writes to .buildx-cache-new but actions/cache only + # uploads .buildx-cache, so layers (notably the slow apt RUN) never persist. + rm -rf /tmp/.buildx-cache + if [ -d /tmp/.buildx-cache-new ]; then mv /tmp/.buildx-cache-new /tmp/.buildx-cache; fi + - name: Run FIO 4k timeout-minutes: 15 run: | diff --git a/docker/Dockerfile.e2e b/docker/Dockerfile.e2e index 77e93eaed..99b2b9163 100644 --- a/docker/Dockerfile.e2e +++ b/docker/Dockerfile.e2e @@ -2,13 +2,15 @@ FROM ubuntu:22.04 LABEL author="Chris Lu" -# Use faster mirrors and optimize package installation +# Use Azure's Ubuntu mirror — much faster than archive.ubuntu.com from GitHub-hosted runners, +# which have been hanging long enough on Ign:/retry to trip the 10-min step timeout. # Note: This e2e test image intentionally runs as root for simplicity and compatibility. # Production images (Dockerfile.go_build) use proper user isolation with su-exec. # For testing purposes, running as root avoids permission complexities and dependency # on Alpine-specific tools like su-exec (not available in Ubuntu repos). -RUN apt-get -o Acquire::Retries=5 -o Acquire::http::Timeout=30 update && \ - DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=5 -o Acquire::http::Timeout=30 install -y \ +RUN sed -i 's|http://archive.ubuntu.com/ubuntu|http://azure.archive.ubuntu.com/ubuntu|g; s|http://security.ubuntu.com/ubuntu|http://azure.archive.ubuntu.com/ubuntu|g' /etc/apt/sources.list && \ + apt-get -o Acquire::http::Timeout=15 update && \ + DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::http::Timeout=15 install -y \ --no-install-recommends \ --no-install-suggests \ curl \