mirror of
https://github.com/R0m1k3/xtremobile.git
synced 2026-10-11 17:29:26 +02:00
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.
71 lines
2.1 KiB
Docker
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"]
|