From b2e4c09c2b1c469e5cc39e48aec8555ffa1613fe Mon Sep 17 00:00:00 2001 From: Mathias Beaulieu-Duncan Date: Tue, 3 Feb 2026 02:06:52 -0500 Subject: [PATCH] Use git clone for Flutter SDK to support arm64 Switch from downloading pre-built Flutter SDK tarballs to cloning from git. Flutter only provides x64 Linux tarballs, but cloning from git allows Flutter to bootstrap itself with the correct Dart SDK for any host architecture (amd64 or arm64). Also reduces image size from ~4GB to ~1.7GB for Android variant. Co-Authored-By: Claude Opus 4.5 --- Dockerfile | 17 ++++------------- Dockerfile.android | 16 ++++------------ Dockerfile.linux | 16 ++++------------ 3 files changed, 12 insertions(+), 37 deletions(-) diff --git a/Dockerfile b/Dockerfile index 91c24de..b725155 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,21 +8,12 @@ LABEL org.opencontainers.image.version="${FLUTTER_VERSION}" USER 0 -# Download Flutter SDK and strip unnecessary files in a single layer -RUN curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/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 && \ - rm -rf /opt/flutter/dev \ - /opt/flutter/examples \ - /opt/flutter/bin/cache/artifacts/engine/android-* \ - /opt/flutter/bin/cache/artifacts/engine/linux-* && \ +# Clone Flutter SDK from git (supports both amd64 and arm64) +RUN git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter && \ + git config --global --add safe.directory /opt/flutter && \ + rm -rf /opt/flutter/dev /opt/flutter/examples && \ chown -R 65532:65532 /opt/flutter -# Mark git directory as safe and compact git history -RUN git config --global --add safe.directory /opt/flutter && \ - cd /opt/flutter && git gc --prune=all - USER 65532 # Configure for web-only (disable everything else) diff --git a/Dockerfile.android b/Dockerfile.android index f74c044..19268d7 100644 --- a/Dockerfile.android +++ b/Dockerfile.android @@ -30,18 +30,10 @@ RUN mkdir -p "${ANDROID_HOME}/cmdline-tools" && \ # Remove lint-psi to eliminate protobuf-java 2.6.1 CVEs (saves 86MB) rm -rf "${ANDROID_HOME}/cmdline-tools/latest/lib/external/lint-psi" -# Download Flutter SDK and strip unnecessary files -RUN curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/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 && \ - rm -rf /opt/flutter/dev \ - /opt/flutter/examples \ - /opt/flutter/bin/cache/artifacts/engine/linux-* \ - /opt/flutter/bin/cache/flutter_web_sdk - -RUN git config --global --add safe.directory /opt/flutter && \ - cd /opt/flutter && git gc --prune=all +# Clone Flutter SDK from git (supports both amd64 and arm64) +RUN git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter && \ + git config --global --add safe.directory /opt/flutter && \ + rm -rf /opt/flutter/dev /opt/flutter/examples # Fix ownership before switching to flutter user RUN chown -R 65532:65532 /opt/flutter "${ANDROID_HOME}" diff --git a/Dockerfile.linux b/Dockerfile.linux index bc01f65..090b8af 100644 --- a/Dockerfile.linux +++ b/Dockerfile.linux @@ -8,18 +8,10 @@ LABEL org.opencontainers.image.version="${FLUTTER_VERSION}" USER 0 -# Download Flutter SDK and strip unnecessary files -RUN curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/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 && \ - rm -rf /opt/flutter/dev \ - /opt/flutter/examples \ - /opt/flutter/bin/cache/artifacts/engine/android-* \ - /opt/flutter/bin/cache/flutter_web_sdk - -RUN git config --global --add safe.directory /opt/flutter && \ - cd /opt/flutter && git gc --prune=all +# Clone Flutter SDK from git (supports both amd64 and arm64) +RUN git clone --depth 1 --branch ${FLUTTER_VERSION} https://github.com/flutter/flutter.git /opt/flutter && \ + git config --global --add safe.directory /opt/flutter && \ + rm -rf /opt/flutter/dev /opt/flutter/examples # Fix ownership before switching to flutter user RUN chown -R 65532:65532 /opt/flutter