FROM ghcr.io/astral-sh/uv:0.9.3 AS uv FROM python:3.13-slim-bookworm COPY --from=uv /uv /usr/local/bin/uv ENV UV_PROJECT_ENVIRONMENT=/opt/venv \ UV_PYTHON_DOWNLOADS=never \ UV_LINK_MODE=copy \ PLAYWRIGHT_BROWSERS_PATH=/opt/playwright \ PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ HOME=/tmp \ PATH=/opt/venv/bin:$PATH WORKDIR /app COPY pyproject.toml uv.lock README.md ./ RUN uv sync --locked --no-dev --no-install-project \ && python -m playwright install --with-deps chromium \ && apt-get update \ && apt-get install -y --no-install-recommends xvfb \ && rm -rf /var/lib/apt/lists/* /tmp/uv-cache /tmp/.cache \ && useradd --uid 1000 --no-create-home app \ && mkdir /data \ && chown app:app /data COPY src/ ./src/ # Fail the build early if an application executable or migration is missing. RUN uv sync --locked --no-dev --no-editable \ && rm -rf /tmp/.cache \ && for script in car-tracker car-tracker-db car-tracker-pipeline; do \ test -x "/opt/venv/bin/${script}" || { echo "missing console script: ${script}" >&2; exit 1; }; \ done \ && python -c 'from importlib.resources import files; assert files("car_tracker").joinpath("migrations", "001_silver.sql").is_file()' COPY searches.toml ./searches.toml USER 1000:1000 ENTRYPOINT ["python", "-m", "car_tracker.container_entrypoint"] CMD ["car-tracker-pipeline", "--headed", "--config", "/app/searches.toml", "--output", "/data", "--family", "saab-900", "--max-pages", "1", "--max-details", "1"]