# Copyright 2022 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Flutter (https://flutter.io) Developement Environment for Linux
# ===============================================================
#
# This environment passes all Linux Flutter Doctor checks and is sufficient
# for building Android applications and running Flutter tests.
#
# To build iOS applications, a Mac development environment is necessary.
#

# ====================================================================
# This is used to build the dashboard, app_dart, and auto_submit bots
# ====================================================================
FROM debian:trixie-slim

# Install Dependencies.
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        dnsutils \
        git \
        openssh-client \
        unzip \
    ; \
    rm -rf /var/lib/apt/lists/*


# Install Flutter.
ENV FLUTTER_ROOT="/opt/flutter"
RUN git clone https://github.com/flutter/flutter "${FLUTTER_ROOT}"
ENV PATH="${FLUTTER_ROOT}/bin:${PATH}"

WORKDIR "$FLUTTER_ROOT"

# Switch to stable channel
RUN git switch stable

# Disable analytics and crash reporting on the builder.
RUN flutter config              \
    --no-analytics              \
    --enable-web                \
    --no-enable-linux-desktop   \
    --no-enable-macos-desktop   \
    --no-enable-windows-desktop \
    --no-enable-android         \
    --no-enable-ios             \
    --no-enable-fuchsia         

# Only download the websdk; cocoon dashboard only builds for that.
RUN flutter precache --web

# Perform a doctor run.
RUN flutter doctor -v

ENTRYPOINT [ "flutter" ]
