FROM debian:12-slim ENV DEBIAN_FRONTEND=noninteractive # ===== ВЕРСИИ (фиксируем для стабильности CI) ===== ENV FLUTTER_VERSION=3.41.2 ENV ANDROID_API=34 ENV ANDROID_BUILD_TOOLS=34.0.0 ENV ANDROID_CMDLINE_TOOLS=11076708 ENV NODE_MAJOR=24 # ===== ПУТИ ===== ENV ANDROID_HOME=/opt/android-sdk ENV ANDROID_SDK_ROOT=/opt/android-sdk ENV FLUTTER_HOME=/opt/flutter ENV GRADLE_USER_HOME=/opt/gradle ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$FLUTTER_HOME/bin # ===== БАЗОВЫЕ ПАКЕТЫ ===== RUN apt-get update && apt-get install -y \ curl \ git \ unzip \ xz-utils \ zip \ libglu1-mesa \ openjdk-17-jdk \ wget \ ca-certificates \ bash \ libc6 \ libstdc++6 \ gnupg \ && rm -rf /var/lib/apt/lists/* # ===== Установка Node.js 20 через NodeSource (рекомендуемый способ 2025+) ===== RUN mkdir -p /etc/apt/keyrings \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ && apt-get update \ && apt-get install -y nodejs \ && npm install -g npm@latest \ && rm -rf /var/lib/apt/lists/* # ===== ANDROID SDK ===== RUN mkdir -p ${ANDROID_HOME}/cmdline-tools \ && cd ${ANDROID_HOME}/cmdline-tools \ && wget https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip -O sdk-tools.zip \ && unzip sdk-tools.zip \ && rm sdk-tools.zip \ && mv cmdline-tools latest # Принимаем лицензии RUN yes | sdkmanager --licenses # Устанавливаем только нужное RUN sdkmanager \ "platform-tools" \ "platforms;android-${ANDROID_API}" \ "build-tools;${ANDROID_BUILD_TOOLS}" # ===== FLUTTER ===== RUN git clone https://github.com/flutter/flutter.git \ --branch ${FLUTTER_VERSION} \ --depth 1 \ ${FLUTTER_HOME} # Precache только Android (без web, linux, macOS) RUN flutter precache --android # ===== GRADLE (предварительный warmup) ===== RUN mkdir -p ${GRADLE_USER_HOME} # ===== ОЧИСТКА МУСОРА ===== RUN rm -rf /root/.cache \ && rm -rf ${ANDROID_HOME}/.android \ && rm -rf /tmp/* WORKDIR /app