FROM ghcr.io/astral-sh/uv:0.10.11-python3.13-trixie-slim AS base RUN apt-get update \ && apt-get install -y --no-install-recommends libpq5 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app ENV UV_COMPILE_BYTECODE=1 \ UV_LINK_MODE=copy \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PATH="/app/.venv/bin:$PATH" COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev --no-install-project FROM base AS runtime COPY . . ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright RUN uv sync --frozen --extra live --no-dev \ && playwright install --with-deps chromium \ && sed -i 's/\r$//' /app/scripts/startup.sh \ && chmod +x /app/scripts/startup.sh \ && useradd --create-home --uid 1000 app \ && chown -R app:app /app /ms-playwright USER app EXPOSE 8000 CMD ["/app/scripts/startup.sh"] FROM base AS test COPY . . RUN uv sync --frozen --extra test \ && useradd --create-home --uid 1000 app \ && chown -R app:app /app USER app CMD ["pytest", "tests", "-m", "not slow", "-ra", "--tb=short"]