perf(ci): split Dockerfile dep-install from source-copy for faster rebuilds

The dep-install layer (uv sync) now only depends on pyproject.toml,
uv.lock, and a minimal package stub — not the full src/ tree. Source
code changes only rebuild the final COPY layer (seconds, not minutes).

Also switch from type=local cache (lost on ephemeral runners) to
type=gha (persisted in GitHub Actions cache, shared across all runs).

Before: every src/ change → full uv sync rebuild (~8-10 min)
After:  src/-only change → cached dep layer, ~30s source copy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pepijn
2026-04-09 15:15:43 +02:00
parent 415c504567
commit 9a84ae7b61
3 changed files with 17 additions and 10 deletions
+7 -6
View File
@@ -83,8 +83,9 @@ jobs:
with:
cache-binary: false
# Build the benchmark-specific image; layer cache lives in the runner's
# local Docker daemon — reused across re-runs on the same machine.
# Build the benchmark-specific image. Layer cache uses GHA cache (persists
# across runners). The Dockerfile separates dep-install from source-copy,
# so code-only changes skip the slow uv-sync layer entirely.
- name: Build Libero benchmark image
uses: docker/build-push-action@v6 # zizmor: ignore[unpinned-uses]
with:
@@ -93,8 +94,8 @@ jobs:
push: false
load: true
tags: lerobot-benchmark-libero:ci
cache-from: type=local,src=/tmp/.buildx-cache-libero
cache-to: type=local,dest=/tmp/.buildx-cache-libero,mode=max
cache-from: type=gha,scope=benchmark-libero
cache-to: type=gha,scope=benchmark-libero,mode=max
- name: Login to Hugging Face
if: env.HF_USER_TOKEN != ''
@@ -247,8 +248,8 @@ jobs:
push: false
load: true
tags: lerobot-benchmark-metaworld:ci
cache-from: type=local,src=/tmp/.buildx-cache-metaworld
cache-to: type=local,dest=/tmp/.buildx-cache-metaworld,mode=max
cache-from: type=gha,scope=benchmark-metaworld
cache-to: type=gha,scope=benchmark-metaworld,mode=max
- name: Run MetaWorld smoke eval (1 episode)
run: |