Files
kryz-go-flutter/.devcontainer/Dockerfile
T
robot 07d5290b67
CI / Test (pull_request) Failing after 11s
CI / Build Android (pull_request) Skipped
CI / Build iOS (pull_request) Skipped
CI / Lint (pull_request) Successful in 19m44s
perf: optimize container startup and CI pipeline
- Dockerfile: use Flutter tarball instead of git clone (~150MB vs 500MB+)
- Dockerfile: split into independent layers for better caching
- Dockerfile: use JRE instead of JDK, remove unnecessary packages
- devcontainer.json: remove venv/pip/claude from postCreateCommand
- ci.yml: remove redundant analyze/test in build-android job
- ci.yml: run lint and test in parallel (no dependency chain)

Estimated impact: 40min -> ~5-8min first build, ~2-3min cached
2026-08-02 22:00:06 +00:00

70 lines
3.0 KiB
Docker
Executable File

FROM --platform=linux/amd64 debian:bookworm-slim
# ============================================================
# Layer 1: System dependencies (cached unless packages change)
# ============================================================
RUN apt-get update && apt-get install -y --no-install-recommends \
curl git unzip xz-utils zip python3 python3-venv wget \
libgtk-3-dev ninja-build libglu1-mesa \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# ============================================================
# Layer 2: Non-root user (cached)
# ============================================================
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=1000
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m -s /bin/bash $USERNAME
# ============================================================
# Layer 3: Flutter SDK (tarball — ~150MB vs 500MB+ git clone)
# Uses pre-built release tarball instead of cloning the repo.
# This alone saves 10-15 minutes on first build.
# ============================================================
ENV FLUTTER_VERSION=3.41.8
ENV FLUTTER_HOME=/opt/flutter
ENV PATH="$FLUTTER_HOME/bin:$PATH"
# Download pre-built Flutter SDK tarball (much faster than git clone)
RUN curl -fsSL "https://storage.googleapis.com/download.flutter.io/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" \
-o /tmp/flutter.tar.xz \
&& tar -xf /tmp/flutter.tar.xz -C /opt \
&& rm /tmp/flutter.tar.xz \
&& flutter precache --android --ios \
&& chown -R $USER_UID:$USER_GID $FLUTTER_HOME
# ============================================================
# Layer 4: Android SDK (only what's needed for Flutter builds)
# Parallel downloads where possible, minimal packages.
# ============================================================
ENV ANDROID_HOME=/opt/android-sdk
ENV PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools"
RUN curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip" \
-o /tmp/cmdline-tools.zip \
&& mkdir -p $ANDROID_HOME/cmdline-tools \
&& unzip -q /tmp/cmdline-tools.zip -d $ANDROID_HOME/cmdline-tools \
&& mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest \
&& rm /tmp/cmdline-tools.zip \
# Accept licenses + install ONLY the packages Flutter needs
&& yes | sdkmanager --licenses \
&& sdkmanager \
"platform-tools" \
"platforms;android-36" \
"build-tools;36.0.0" \
&& rm -rf "$ANDROID_HOME/.android" \
&& chown -R $USER_UID:$USER_GID $ANDROID_HOME
# ============================================================
# Layer 5: Java (only needed for Android builds)
# Use JRE instead of JDK — smaller footprint.
# ============================================================
RUN apt-get update && apt-get install -y --no-install-recommends \
openjdk-17-jre-headless \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
USER $USERNAME
ENV HOME=/home/$USERNAME