From 6837d0b4b3016678030c2fbe4bacc04db4e0b8da Mon Sep 17 00:00:00 2001 From: WorldTeacher Date: Tue, 25 Nov 2025 08:35:46 +0100 Subject: [PATCH] test: add path, switch to uv --- Dockerfile | 38 ++++++++++++++++++++++---------------- pyproject.toml | 5 +---- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index fae939f..779f304 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,23 +3,25 @@ FROM python:3.13-slim AS builder # Prevent Python from writing .pyc files and enable unbuffered stdout/stderr ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ - PIP_DISABLE_PIP_VERSION_CHECK=1 \ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 WORKDIR /app -# Install build deps required to build wheels +# Install build deps required to build wheels and tools needed to fetch uv RUN apt-get update \ - && apt-get install -y --no-install-recommends build-essential gcc \ + && apt-get install -y --no-install-recommends build-essential gcc curl ca-certificates \ && rm -rf /var/lib/apt/lists/* -# Upgrade packaging tools and install runtime dependencies into a separate prefix -COPY requirements.txt ./ -RUN pip install --upgrade pip setuptools wheel \ - && pip install --prefix=/install --no-cache-dir \ - --extra-index-url https://git.theprivateserver.de/api/packages/PHB/pypi/simple/ \ - -r requirements.txt \ - && rm -rf /root/.cache/pip +# Install uv into this stage by copying official uv binaries from the uv image +COPY --from=ghcr.io/astral-sh/uv:python3.13-trixie-slim /uv /uvx /bin/ + +# Copy only metadata first so dependency installs can be cached +COPY pyproject.toml ./ + +# Use uv to resolve & install the project's dependencies (no project source yet) +# This creates a .venv containing all dependencies which we move to /install +RUN uv sync --no-install-project --no-editable \ + && mv .venv /install # Copy application source (only used to include app files in final image) COPY . /app @@ -32,12 +34,16 @@ ENV PYTHONDONTWRITEBYTECODE=1 \ WORKDIR /app -# Copy installed packages from the builder image into the final image -COPY --from=builder /install /usr/local -# Copy application sources +# Bring uv into the final image so we can run the app with it +COPY --from=ghcr.io/astral-sh/uv:python3.13-trixie-slim /uv /uvx /bin/ + +# Copy the prepared environment from the builder and the application +COPY --from=builder /install /app/.venv COPY --from=builder /app /app -EXPOSE 8001 +ENV PATH="/app/.venv/bin:$PATH" -# Run using uvicorn; the app is defined in `api_service.py` as `app` -CMD ["uvicorn", "api_service:app", "--host", "0.0.0.0", "--port", "8001"] +EXPOSE ${API_PORT} + +# Use uv to run the app inside the synced environment +CMD ["uv", "run", "python", "api_service.py"] diff --git a/pyproject.toml b/pyproject.toml index 4d7116b..04d13ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,10 +4,7 @@ version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.13" -dependencies = [ - "bibapi[catalogue]>=0.0.5", - "fastapi>=0.122.0", -] +dependencies = ["bibapi>=0.0.5", "fastapi>=0.122.0"] [[tool.uv.index]] name = "gitea" url = "https://git.theprivateserver.de/api/packages/PHB/pypi/simple/" -- 2.49.1