# Multi-stage build for JellyTau - Tauri Jellyfin client FROM ubuntu:24.04 AS builder ENV DEBIAN_FRONTEND=noninteractive \ ANDROID_HOME=/opt/android-sdk \ NDK_VERSION=27.0.11902837 \ SDK_VERSION=34 \ RUST_BACKTRACE=1 # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ # Build essentials build-essential \ curl \ wget \ git \ ca-certificates \ # Node.js (for Bun) nodejs=20.* \ npm \ # Rust toolchain rustc \ cargo \ # JDK for Android openjdk-17-jdk-headless \ # Android build tools android-sdk-platform-tools \ # Additional development tools pkg-config \ libssl-dev \ libclang-dev \ llvm-dev \ && rm -rf /var/lib/apt/lists/* # Install Bun RUN curl -fsSL https://bun.sh/install | bash && \ ln -s /root/.bun/bin/bun /usr/local/bin/bun # Setup Rust for Android targets RUN rustup update && \ rustup target add aarch64-linux-android && \ rustup target add armv7-linux-androideabi && \ rustup target add x86_64-linux-android # Setup Android SDK RUN mkdir -p $ANDROID_HOME && \ mkdir -p /root/.android && \ echo '### User Sources for `android` cmd line tool ###' > /root/.android/repositories.cfg && \ echo 'count=0' >> /root/.android/repositories.cfg # Download and setup Android Command Line Tools RUN wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/cmdline-tools.zip && \ unzip -q /tmp/cmdline-tools.zip -d $ANDROID_HOME && \ rm /tmp/cmdline-tools.zip && \ mkdir -p $ANDROID_HOME/cmdline-tools/latest && \ mv $ANDROID_HOME/cmdline-tools/* $ANDROID_HOME/cmdline-tools/latest/ 2>/dev/null || true # Setup Android SDK components RUN $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_HOME \ "platforms;android-$SDK_VERSION" \ "build-tools;34.0.0" \ "ndk;$NDK_VERSION" \ --channel=0 2>&1 | grep -v "Warning" || true # Set NDK environment variable ENV NDK_HOME=$ANDROID_HOME/ndk/$NDK_VERSION # Create working directory WORKDIR /app # Copy project files COPY . . # Install Node.js dependencies RUN bun install # Install Rust dependencies RUN cd src-tauri && cargo fetch && cd .. # Build stage - Tests FROM builder AS test WORKDIR /app RUN echo "Running tests..." && \ bun run test && \ cd src-tauri && cargo test && cd .. && \ echo "All tests passed!" # Build stage - APK FROM builder AS android-build WORKDIR /app RUN cd src-tauri && cargo fetch && cd .. && \ echo "Building Android APK..." && \ bun run build && \ bun run tauri android build --apk true && \ echo "APK build complete!" # Final output stage FROM ubuntu:24.04 AS final RUN apt-get update && apt-get install -y --no-install-recommends \ android-sdk-platform-tools \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=android-build /app/src-tauri/gen/android/app/build/outputs/apk /app/apk VOLUME ["/app/apk"] CMD ["/bin/bash", "-c", "echo 'APK files are available in /app/apk' && ls -lh /app/apk/"]