- Add Dockerfile with multi-stage build using UV - Add --dry-run CLI flag to log metrics instead of submitting - Add comprehensive README with usage and metrics documentation - Fix ruff linter warnings - Add uv.lock for reproducible builds
47 lines
1.0 KiB
Docker
47 lines
1.0 KiB
Docker
# Build stage
|
|
FROM python:3.12-slim AS builder
|
|
|
|
# Install uv
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy dependency files
|
|
COPY pyproject.toml uv.lock ./
|
|
COPY src ./src
|
|
|
|
# Create virtual environment and install dependencies
|
|
RUN uv sync --no-dev --frozen
|
|
|
|
# Runtime stage
|
|
FROM python:3.12-slim AS runtime
|
|
|
|
# Create non-root user
|
|
RUN useradd --create-home --shell /bin/bash datacat
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Copy virtual environment from builder
|
|
COPY --from=builder /app/.venv /app/.venv
|
|
|
|
# Copy application code
|
|
COPY --chown=datacat:datacat src ./src
|
|
|
|
# Set environment variables
|
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
ENV PYTHONUNBUFFERED=1
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
|
|
|
# Switch to non-root user
|
|
USER datacat
|
|
|
|
# Health check - verify the app can at least parse args
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD python -m datacat --help > /dev/null 2>&1 || exit 1
|
|
|
|
# Default command
|
|
ENTRYPOINT ["python", "-m", "datacat"]
|
|
CMD []
|