From 3a5c22ef83a07a14a218ed722336dfa22d76d096 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 23 Jan 2026 19:42:01 +0000 Subject: [PATCH] fix: explicitly wheel a2a-sdk to ensure proper installation in Docker builds Root cause: pip wheel with requirements.txt containing environment markers (like 'python_version >= "3.10"') may not reliably create wheels for packages with such markers, especially in multi-platform Docker builds. Fix: Explicitly run pip wheel for a2a-sdk after processing requirements.txt, similar to the existing pattern used for semantic_router and aurelio-sdk in Dockerfile.non_root. This ensures the a2a-sdk wheel and all its dependencies are properly captured in /wheels/ before the runtime stage installs from them. Affects: Dockerfile, docker/Dockerfile.alpine, docker/Dockerfile.database, docker/Dockerfile.dev, docker/Dockerfile.non_root Co-authored-by: ishaan --- Dockerfile | 4 +++- docker/Dockerfile.alpine | 4 +++- docker/Dockerfile.database | 4 +++- docker/Dockerfile.dev | 4 +++- docker/Dockerfile.non_root | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0e7a8412bbc..910f567649c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,9 @@ RUN ls -1 dist/*.whl | head -1 RUN pip install dist/*.whl # install dependencies as wheels -RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt +# Note: a2a-sdk is explicitly included to ensure it's wheeled even with environment markers +RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt \ + && pip wheel --no-cache-dir --wheel-dir=/wheels/ "a2a-sdk>=0.3.22" # ensure pyjwt is used, not jwt RUN pip uninstall jwt -y diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine index ef2bb98db6e..7216ee8328d 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine @@ -29,7 +29,9 @@ RUN ls -1 dist/*.whl | head -1 RUN pip install dist/*.whl # install dependencies as wheels -RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt +# Note: a2a-sdk is explicitly included to ensure it's wheeled even with environment markers +RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt \ + && pip wheel --no-cache-dir --wheel-dir=/wheels/ "a2a-sdk>=0.3.22" # Runtime stage FROM $LITELLM_RUNTIME_IMAGE AS runtime diff --git a/docker/Dockerfile.database b/docker/Dockerfile.database index 49655129506..60d59e15315 100644 --- a/docker/Dockerfile.database +++ b/docker/Dockerfile.database @@ -40,7 +40,9 @@ RUN ls -1 dist/*.whl | head -1 RUN pip install dist/*.whl # install dependencies as wheels -RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt +# Note: a2a-sdk is explicitly included to ensure it's wheeled even with environment markers +RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt \ + && pip wheel --no-cache-dir --wheel-dir=/wheels/ "a2a-sdk>=0.3.22" # Runtime stage FROM $LITELLM_RUNTIME_IMAGE AS runtime diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 67966f9c739..32bf8d16ee9 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -25,8 +25,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ COPY requirements.txt . # Install Python dependencies with cache mount for faster rebuilds +# Note: a2a-sdk is explicitly included to ensure it's wheeled even with environment markers RUN --mount=type=cache,target=/root/.cache/pip \ - pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt + pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt \ + && pip wheel --no-cache-dir --wheel-dir=/wheels/ "a2a-sdk>=0.3.22" # Fix JWT dependency conflicts early RUN pip uninstall jwt -y || true && \ diff --git a/docker/Dockerfile.non_root b/docker/Dockerfile.non_root index 8c795f3b17f..d9c5c6e5eb2 100644 --- a/docker/Dockerfile.non_root +++ b/docker/Dockerfile.non_root @@ -32,7 +32,7 @@ RUN for i in 1 2 3; do \ # Cache Python dependencies COPY requirements.txt . RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt \ - && pip wheel --no-cache-dir --wheel-dir=/wheels/ "semantic_router==0.1.11" "aurelio-sdk==0.0.19" "PyJWT==2.9.0" + && pip wheel --no-cache-dir --wheel-dir=/wheels/ "semantic_router==0.1.11" "aurelio-sdk==0.0.19" "PyJWT==2.9.0" "a2a-sdk>=0.3.22" # Copy source after dependency layers COPY . .