car-tracker/Dockerfile
Antoine Vandeplanque a353e1c683
All checks were successful
CI / Lint, PostgreSQL tests, and package (push) Successful in 12s
standardize car-tracker naming and verify container entrypoints
2026-09-30 16:29:53 +02:00

37 lines
1.5 KiB
Docker

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"]