ARG IMAGE_SERVER="registry.420joos.dev" ARG FLUTTER_VERSION="3.24.5" ARG DEPENDENCY_DIR="/tmp/dependencies" ARG FLUTTER_DIR="opt/flutter" FROM ubuntu:24.04 AS download ARG FLUTTER_URL ARG FLUTTER_VERSION ARG DEPENDENCY_DIR ARG FLUTTER_DIR ARG FLUTTER_DIR="$DEPENDENCY_DIR/${FLUTTER_DIR}" ARG FLUTTER_DOWNLOAD_FILE="flutter.tar.xz" RUN apt update \ && apt install -y wget xz-utils git unzip RUN mkdir -p ${FLUTTER_DIR} RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz -O ${FLUTTER_DOWNLOAD_FILE} \ && tar -xf ${FLUTTER_DOWNLOAD_FILE} --strip-components=1 --directory $FLUTTER_DIR; # There is no official flutter arm64 release, so we must use the github repo # Flutter on arch currently has warnings because channel and repository source are not set # RUN if [ "$(uname -m)" = "aarch64" ]; then \ # git clone --depth 1 https://github.com/flutter/flutter.git ${FLUTTER_DIR} \ # && cd ${FLUTTER_DIR} \ # && git fetch origin tag ${FLUTTER_VERSION} \ # && git checkout tags/${FLUTTER_VERSION} \ # && DART_SDK_PATH="${FLUTTER_DIR}/bin/cache/dart-sdk" \ # && ENGINE_REALM=$(cat "${FLUTTER_DIR}/bin/internal/engine.realm" | tr -d '[:space:]') \ # && ENGINE_VERSION=$(cat "${FLUTTER_DIR}/bin/internal/engine.version") \ # && DART_ZIP_NAME="dart-sdk-linux-arm64.zip" \ # && wget "https://storage.googleapis.com/flutter_infra_release/flutter/${ENGINE_VERSION}/${DART_ZIP_NAME}" -O ${DART_ZIP_NAME} \ # && unzip -o -q "${DART_ZIP_NAME}" -d "${FLUTTER_DIR}/bin/cache" \ # && /usr/bin/find "${DART_SDK_PATH}" -type d -exec chmod 755 {} \; \ # && /usr/bin/find "${DART_SDK_PATH}" -type f -perm /u+x -exec chmod a+x,a+r {} \; \ # && echo "${ENGINE_VERSION}" > "${FLUTTER_DIR}/bin/cache/engine-dart-sdk.stamp"; \ # fi FROM alpine:3.20.3 ARG DEPENDENCY_DIR ARG FLUTTER_DIR ARG USER_UID="1000" ARG USER_GID=${USER_UID} ARG USERNAME="flutter" ENV FLUTTER_DIR="/${FLUTTER_DIR}" ENV PATH=${PATH}:${FLUTTER_DIR}/bin COPY --from=download $DEPENDENCY_DIR / RUN apk add --no-cache bash git gcompat \ && addgroup ${USERNAME} -g ${USER_GID} \ && adduser ${USERNAME} --uid ${USER_UID} --ingroup ${USERNAME} --disabled-password \ && chown -R ${USERNAME}:${USERNAME} ${FLUTTER_DIR} USER ${USERNAME} WORKDIR /home/${USERNAME} RUN dart --disable-analytics \ && flutter config \ --no-analytics \ --no-enable-web \ --no-enable-linux-desktop \ --no-enable-macos-desktop \ --no-enable-windows-desktop \ --no-enable-android \ --no-enable-ios \ --no-enable-fuchsia \ && flutter precache --universal # Test flutter # RUN flutter doctor --verbose && exit 1