- Add comprehensive compatibility layer supporting both Procrastinate 2.x and 3.x - Implement version-aware database migration system with pre/post migrations for 3.x - Create worker option mapping for seamless transition between versions - Add extensive test coverage for all compatibility features - Update dependency constraints to support both 2.x and 3.x simultaneously - Provide Docker containerization with uv caching and multi-service orchestration - Include demo applications and web interface for testing capabilities - Bump version to 0.2.0 reflecting new compatibility features Key Features: - Automatic version detection and feature flagging - Unified connector creation across PostgreSQL drivers - Worker option translation (timeout → fetch_job_polling_interval) - Database migration utilities with CLI and programmatic interfaces - Complete Docker Compose setup with PostgreSQL, Redis, workers, and demos Files Added: - src/video_processor/tasks/compat.py - Core compatibility layer - src/video_processor/tasks/migration.py - Migration utilities - src/video_processor/tasks/worker_compatibility.py - Worker CLI - tests/test_procrastinate_compat.py - Compatibility tests - tests/test_procrastinate_migration.py - Migration tests - Dockerfile - Multi-stage build with uv caching - docker-compose.yml - Complete development environment - examples/docker_demo.py - Containerized demo application - examples/web_demo.py - Flask web interface demo Migration Support: - Procrastinate 2.x: Single migration command compatibility - Procrastinate 3.x: Separate pre/post migration phases - Database URL validation and connection testing - Version-specific feature detection and graceful degradation
84 lines
2.1 KiB
Docker
84 lines
2.1 KiB
Docker
# Video Processor Dockerfile with uv caching optimization
|
|
# Based on uv Docker integration best practices
|
|
# https://docs.astral.sh/uv/guides/integration/docker/
|
|
|
|
FROM python:3.11-slim as base
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
ffmpeg \
|
|
imagemagick \
|
|
postgresql-client \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install uv
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
|
|
|
|
# Create app directory
|
|
WORKDIR /app
|
|
|
|
# Create user for running the application
|
|
RUN groupadd -r app && useradd -r -g app app
|
|
|
|
# Change to app user for dependency installation
|
|
USER app
|
|
|
|
# Copy dependency files first for better caching
|
|
COPY --chown=app:app pyproject.toml uv.lock* ./
|
|
|
|
# Create virtual environment and install dependencies
|
|
# This layer will be cached if dependencies don't change
|
|
ENV UV_SYSTEM_PYTHON=1
|
|
RUN uv sync --frozen --no-dev
|
|
|
|
# Copy application code
|
|
COPY --chown=app:app . .
|
|
|
|
# Install the application
|
|
RUN uv pip install -e .
|
|
|
|
# Production stage
|
|
FROM base as production
|
|
|
|
# Set environment variables
|
|
ENV PYTHONUNBUFFERED=1
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
CMD python -c "from video_processor import VideoProcessor; print('OK')" || exit 1
|
|
|
|
# Default command
|
|
CMD ["python", "-m", "video_processor.tasks.procrastinate_tasks"]
|
|
|
|
# Development stage with dev dependencies
|
|
FROM base as development
|
|
|
|
# Install development dependencies
|
|
RUN uv sync --frozen
|
|
|
|
# Install pre-commit hooks
|
|
RUN uv run pre-commit install || true
|
|
|
|
# Set development environment
|
|
ENV FLASK_ENV=development
|
|
ENV PYTHONPATH=/app
|
|
|
|
# Default command for development
|
|
CMD ["bash"]
|
|
|
|
# Worker stage for Procrastinate workers
|
|
FROM production as worker
|
|
|
|
# Set worker-specific environment
|
|
ENV PROCRASTINATE_WORKER=1
|
|
|
|
# Command to run Procrastinate worker
|
|
CMD ["python", "-m", "video_processor.tasks.worker_compatibility", "worker"]
|
|
|
|
# Migration stage for database migrations
|
|
FROM production as migration
|
|
|
|
# Command to run migrations
|
|
CMD ["python", "-m", "video_processor.tasks.migration"] |