FROM python:3.12-slim
# Install essential system dependencies for building Python packages
RUN apt-get update && \
apt-get install -y --no-install-recommends build-essential ca-certificates && \
rm -rf /var/lib/apt/lists/*
WORKDIR /code
# Copy repository metadata first to leverage Docker cache
COPY pyproject.toml /code/pyproject.toml
# Install packaging tooling
RUN python -m pip install --upgrade pip setuptools wheel
# Try to install the project from source; ignore failures to ensure container builds even if packaging isn't perfect yet
RUN set -e; (pip install --no-cache-dir --upgrade -e .) || true
# Copy the rest of the repository
COPY . /code
# Create a minimal FastAPI app for smoke testing (so the container can be started successfully even without the project app)
RUN mkdir -p /code/app \
&& printf 'from fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get("/")\ndef read_root():\n return {"Hello": "World"}\n' > /code/app/main.py
# Install runtime dependencies that are common for running FastAPI apps
RUN pip install --no-cache-dir uvicorn fastapi
EXPOSE 80
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]