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