Files
xtremflow/Dockerfile
T
Claude 3c02f509b7 fix: add build_runner step to Dockerfile and update CACHEBUST to v4
Add `dart run build_runner build --delete-conflicting-outputs` step before Flutter build to ensure all generated files (Riverpod and Hive) are fresh and properly generated. This ensures no stale or incompatible generated code causes build failures.

Also update CACHEBUST to v4 to force Docker to bypass cache and apply all recent fixes.
2025-12-08 17:12:15 +00:00

71 lines
2.1 KiB
Docker

# ============================================
# Stage 1: Build Flutter Web Application
# ============================================
FROM ghcr.io/cirruslabs/flutter:stable AS builder
USER root
WORKDIR /app
# Safe directory configuration for git
RUN git config --global --add safe.directory /app
# Optimize DART VM Memory for build to prevent OOM
ENV DART_VM_OPTIONS="--old_gen_heap_size=4096"
# Enable web support (idempotent)
RUN flutter config --enable-web
# Copy dependency files first for better caching
# Note: pubspec.lock will be generated by flutter pub get if missing
# Cache buster - INCREMENT THIS VALUE TO FORCE REBUILD ON DEPLOY
ARG CACHEBUST=2025-12-08-v4
COPY pubspec.yaml ./
# Get dependencies (generates pubspec.lock automatically)
RUN flutter pub get
# Copy source code
COPY . .
# Re-run pub get after copying source to ensure lockfile consistency
RUN flutter pub get
# Generate code (for Riverpod and Hive)
RUN dart run build_runner build --delete-conflicting-outputs
# Clean build environment to avoid conflicts
RUN flutter clean
# Build web application (CanvasKit renderer is now default)
# Added --no-tree-shake-icons to prevent potential font issues in some environments
RUN flutter build web --release --base-href="/" --no-tree-shake-icons --verbose
# ============================================
# Stage 2: Serve with custom Dart server (with API proxy)
# ============================================
FROM dart:stable
WORKDIR /app
# Install SQLite3 library for FFI and FFmpeg for IPTV stream transcoding
RUN apt-get update && apt-get install -y sqlite3 libsqlite3-dev ffmpeg && rm -rf /var/lib/apt/lists/*
# Create directory for HLS stream output
RUN mkdir -p /tmp/streams && chmod 777 /tmp/streams
# Copy entire bin directory (API, database, etc.)
COPY bin/ ./bin/
# Get dependencies
RUN dart pub get --directory=bin
# Copy built web application from builder stage
COPY --from=builder /app/build/web /app/web
# Expose port (internal only, not mapped to host)
EXPOSE 8089
# Serve web application with API proxy
CMD ["dart", "run", "bin/server.dart", "--port", "8089", "--path", "/app/web"]