Files
devbox-images/devbox/flutter/Dockerfile
T

63 lines
2.4 KiB
Docker

FROM coder-devbox-base-config:latest AS base-default
ARG FLUTTER_TESTING_TOOLS="false"
USER coder
RUN echo "[ Installing fvm ]" \
&& curl -fsSL https://fvm.app/install.sh | bash \
&& export PATH="$HOME/fvm/bin:$PATH" \
&& echo "[ Installing Flutter SDK (stable) ]" \
&& "$HOME/fvm/bin/fvm" install stable \
&& "$HOME/fvm/bin/fvm" global stable \
&& "$HOME/fvm/default/bin/flutter" --version
USER root
# Move the installed SDK + fvm binary out of /home/coder into the image
# filesystem, so it survives stale/old persisted home volumes on
# workspace stop/start. Leave nothing important depending on $HOME/fvm.
RUN mkdir -p /usr/local/fvm \
&& cp -a /home/coder/fvm/. /usr/local/fvm/ \
&& REAL_VERSION_DIR="$(readlink -f /home/coder/fvm/default)" \
&& VERSION_NAME="$(basename "$REAL_VERSION_DIR")" \
&& rm -f /usr/local/fvm/default \
&& ln -sfn "/usr/local/fvm/versions/$VERSION_NAME" /usr/local/fvm/default \
&& chown -R coder:coder /usr/local/fvm \
&& ln -sf /usr/local/fvm/bin/fvm /usr/local/bin/fvm \
&& ln -sf /usr/local/fvm/default/bin/flutter /usr/local/bin/flutter \
&& ln -sf /usr/local/fvm/default/bin/dart /usr/local/bin/dart \
&& rm -rf /home/coder/fvm
USER coder
RUN /usr/local/bin/flutter --version
# Flutter Testing Tools - apt packages baked into the image
RUN if [ "$FLUTTER_TESTING_TOOLS" = "true" ]; then \
echo "[ Installing Flutter testing tools ]"; \
fi
RUN if [ "$FLUTTER_TESTING_TOOLS" = "true" ]; then \
DEBIAN_FRONTEND=noninteractive apt-get update -qq \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
pkg-config xvfb x11-utils cmake clang mesa-utils libgtk-3-dev ninja-build \
&& echo "[ Testing tools ready: xvfb, cmake, clang, ninja, pkg-config ]"; \
else \
echo "[ Skipping Flutter testing tools ]"; \
fi
USER coder
# marionette_mcp / patrol_cli install into ~/.pub-cache, which lives in the
# persisted home volume — these must be (re)activated per-workspace, not baked
# into the image. Handle this in a startup script instead, e.g.:
#
# if [ "$FLUTTER_TESTING_TOOLS" = "true" ]; then
# mkdir -p "$HOME/.pub-cache/bin"
# dart pub global activate marionette_mcp
# flutter pub global activate patrol_cli
# sudo ln -sf "$HOME/.pub-cache/bin/marionette_mcp" /usr/local/bin/marionette_mcp
# sudo ln -sf "$HOME/.pub-cache/bin/patrol" /usr/local/bin/patrol
# fi