karingx-karing
SUCCESS
17m 51s
History Source
SummaryIterations2Transcript12Dockerfile
Dockerfile71 lines · 2962 chars
FROM eclipse-temurin:17-jdk-jammy AS builder
LABEL maintainer="BuildAgent" \
      description="Karing Android app build with Gradle and Flutter in a multi-stage Docker image"

ENV DEBIAN_FRONTEND=noninteractive

# Install required system utilities
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    unzip \
    git \
    ca-certificates \
    build-essential \
    python3 \
    python3-pip \
    software-properties-common \
    libnss3 \
    && rm -rf /var/lib/apt/lists/*

# Android SDK installation (command-line tools)
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV ANDROID_HOME=${ANDROID_SDK_ROOT}
ENV PATH="${PATH}:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin"

RUN mkdir -p "$ANDROID_SDK_ROOT" && \
    mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" && \
    curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -o /tmp/commandlinetools.zip && \
    unzip -q /tmp/commandlinetools.zip -d "$ANDROID_SDK_ROOT/cmdline-tools" && \
    rm /tmp/commandlinetools.zip && \
    mv "$ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools" "$ANDROID_SDK_ROOT/cmdline-tools/latest" && \
    chmod -R a+rX "$ANDROID_SDK_ROOT" \

# Accept licenses and install required Android packages
RUN "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --licenses || true
RUN "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" \
        "platform-tools" \
        "platforms;android-35" \
        "build-tools;36.0.0" \
        "ndk;28.2.13676358"

# Flutter SDK setup
RUN git clone https://github.com/flutter/flutter.git /opt/flutter --depth 1
ENV FLUTTER_ROOT=/opt/flutter
ENV PATH="${PATH}:/opt/flutter/bin:$FLUTTER_ROOT/bin/cache/dart-sdk/bin"
RUN flutter --version || true
RUN flutter precache || true

# Copy source and build
WORKDIR /project
COPY . .

# Build the Android app (debug) to produce an APK
WORKDIR /project/android
RUN ./gradlew clean assembleDebug

# Copy produced APKs to a shared outputs directory
RUN mkdir -p /project/outputs && \
    bash -lc 'if ls app/build/outputs/apk/debug/*.apk 1> /dev/null 2>&1; then cp app/build/outputs/apk/debug/*.apk /project/outputs/karing-app-debug.apk; fi'
RUN bash -lc 'if ls app/build/outputs/apk/release/*.apk 1> /dev/null 2>&1; then cp app/build/outputs/apk/release/*.apk /project/outputs/karing-app-release.apk; fi'

# Final runtime image that just exposes the built APK
FROM debian:bookworm-slim AS final
LABEL maintainer="BuildAgent" \
      description="Container with built APK available at /outputs"

RUN apt-get update && apt-get install -y --no-install-recommends bash ca-certificates && rm -rf /var/lib/apt/lists/*

COPY --from=builder /project/outputs /outputs

CMD ["/bin/bash","-lc","if [ -f /outputs/karing-app-debug.apk ]; then echo 'Debug APK: /outputs/karing-app-debug.apk'; fi; if [ -f /outputs/karing-app-release.apk ]; then echo 'Release APK: /outputs/karing-app-release.apk'; fi; tail -f /dev/null"]