chore(ci): optimize Dockerfile layer order to cache Python dependency installation #10847

Merged
HAL9000 merged 1 commits from task/ci-pipeline-design-optimize-docker-dependency-caching into master 2026-04-26 10:30:21 +00:00

1 Commits

Author SHA1 Message Date
HAL9000 927c5a4681 chore(ci): optimize Dockerfile layer order to cache Python dependency installation
CI / lint (pull_request) Successful in 1m3s
CI / build (pull_request) Successful in 42s
CI / quality (pull_request) Successful in 1m13s
CI / typecheck (pull_request) Successful in 1m23s
CI / push-validation (pull_request) Successful in 24s
CI / helm (pull_request) Successful in 36s
CI / security (pull_request) Successful in 1m38s
CI / integration_tests (pull_request) Successful in 4m8s
CI / e2e_tests (pull_request) Successful in 5m11s
CI / unit_tests (pull_request) Successful in 7m27s
CI / docker (pull_request) Successful in 2m43s
CI / coverage (pull_request) Successful in 12m6s
CI / status-check (pull_request) Successful in 3s
CI / coverage (push) Blocked by required conditions
CI / docker (push) Blocked by required conditions
CI / status-check (push) Blocked by required conditions
CI / push-validation (push) Successful in 24s
CI / helm (push) Successful in 31s
CI / benchmark-publish (pull_request) Has been skipped
CI / build (push) Failing after 15m55s
CI / e2e_tests (push) Failing after 15m56s
CI / integration_tests (push) Failing after 15m58s
CI / unit_tests (push) Failing after 15m58s
CI / quality (push) Failing after 15m58s
CI / security (push) Failing after 15m58s
CI / typecheck (push) Failing after 16m0s
CI / lint (push) Failing after 16m2s
CI / benchmark-regression (push) Has been skipped
CI / benchmark-publish (push) Has started running
CI / benchmark-regression (pull_request) Successful in 1h3m8s
Reorder COPY and RUN instructions in both Dockerfile and Dockerfile.server
to leverage Docker's layer caching for the dependency installation step.

Previously, pyproject.toml, README.md, and src/ were all copied together
before running uv pip install, meaning any source code change would
invalidate the dependency layer cache and force a full reinstall.

The new pattern copies only the dependency manifests (pyproject.toml and
uv.lock) first, installs the build tool in a cached layer, then copies
README.md and src/ for the actual wheel build. This ensures the
uv pip install step is only re-executed when pyproject.toml or uv.lock
change, not on every source code change.

ISSUES CLOSED: #1667
2026-04-26 10:02:20 +00:00