Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/flutter #17

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 131 additions & 9 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
### BASE STAGE ###
ARG UBUNTU_VERSION
FROM ubuntu:${UBUNTU_VERSION} AS devcontainer_base
ARG USER
USER root
SHELL ["/bin/bash", "-euco", "pipefail"]
ENV DEBIAN_FRONTEND=noninteractive \
Expand Down Expand Up @@ -40,6 +41,14 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
x11-apps \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -s /bin/bash -U -m ${USER} && \
echo ${USER} ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/${USER} && \
chmod 0440 /etc/sudoers.d/${USER}
USER ${USER}
ENV USER_HOME=/home/${USER}
RUN mkdir -p ${USER_HOME}/.cache
RUN mkdir -p ${USER_HOME}/.config
RUN chown -R ${USER}:${USER} ${USER_HOME}

### PYTHON STAGE ###
FROM devcontainer_base AS devcontainer_python
Expand Down Expand Up @@ -134,8 +143,129 @@ RUN if [ ${GPP_VERSION} != false ]; then \
&& update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-${GPP_VERSION} 100 \
;fi

### FLUTTER STAGE ###
FROM devcontainer_cpp as devcontainer_flutter
ARG USER
# Set environment variables used by the Android SDK
ENV ANDROID_SDK_HOME /home/$USER/android-sdk-linux
ENV ANDROID_SDK_ROOT /home/$USER/android-sdk-linux
ENV ANDROID_HOME /home/$USER/android-sdk-linux
ENV ANDROID_SDK /home/$USER/android-sdk-linux
ENV DEBIAN_FRONTEND noninteractive
USER root
SHELL ["/bin/bash", "-euco", "pipefail"]



# COPY provisioning/docker_entrypoint.sh /usr/local/bin/docker_entrypoint.sh
# COPY provisioning/ndkTests.sh /usr/local/bin/ndkTests.sh
# RUN chmod +x /usr/local/bin/*
# COPY provisioning/51-android.rules /etc/udev/rules.d/51-android.rules


#ENV JAVA_VERSION="8"
ENV ANDROID_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip"
ENV ANDROID_VERSION="29"
ENV ANDROID_BUILD_TOOLS_VERSION="29.0.3"
ENV ANDROID_ARCHITECTURE="x86_64"
#ENV FLUTTER_WEB_PORT="8090"
#ENV FLUTTER_DEBUG_PORT="42000"
#ENV FLUTTER_EMULATOR_NAME="flutter_emulator"
ENV PATH="$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/platforms:$PATH"

# install all dependencies
ENV DEBIAN_FRONTEND="noninteractive"
RUN apt-get update \
&& apt-get install --yes --no-install-recommends openjdk-17-jdk curl unzip sed git bash xz-utils libglvnd0 ssh xauth x11-xserver-utils libpulse0 libxcomposite1 libgl1-mesa-glx sudo \
&& rm -rf /var/lib/apt/lists/*

USER $USER
# android sdk
RUN mkdir -p $ANDROID_SDK_ROOT \
&& mkdir -p $ANDROID_SDK_ROOT/.android \
&& touch $ANDROID_SDK_ROOT/.android/repositories.cfg \
&& curl -o $ANDROID_SDK_ROOT/android_tools.zip $ANDROID_TOOLS_URL \
&& unzip -qq -d "$ANDROID_SDK_ROOT" $ANDROID_SDK_ROOT/android_tools.zip \
&& rm $ANDROID_SDK_ROOT/android_tools.zip \
&& mkdir -p $ANDROID_SDK_ROOT/cmdline-tools/tools \
&& mv $ANDROID_SDK_ROOT/cmdline-tools/bin $ANDROID_SDK_ROOT/cmdline-tools/tools \
&& mv $ANDROID_SDK_ROOT/cmdline-tools/lib $ANDROID_SDK_ROOT/cmdline-tools/tools \
&& echo y | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" \
&& echo y | sdkmanager "platforms;android-$ANDROID_VERSION" \
&& echo y | sdkmanager "platform-tools" \
&& echo y | sdkmanager "emulator" \
&& echo y | sdkmanager "system-images;android-$ANDROID_VERSION;google_apis_playstore;$ANDROID_ARCHITECTURE" \
&& echo y | sdkmanager "cmdline-tools;latest"

USER root
# android dev dependencies
RUN apt-get update \
&& apt-get install --yes --no-install-recommends clang cmake ninja-build \
&& rm -rf /var/lib/apt/lists/*

USER $USER
# Install Flutter
ARG FLUTTER_VERSION=3.19.0
ARG FLUTTER_URL=https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz
ENV FLUTTER_HOME="/home/$USER/flutter"
ENV PATH="$FLUTTER_HOME/bin:$PATH"
RUN mkdir -p $FLUTTER_HOME \
&& curl -o $FLUTTER_HOME/flutter.tar.xz $FLUTTER_URL \
&& tar xf $FLUTTER_HOME/flutter.tar.xz -C /home/$USER \
&& rm $FLUTTER_HOME/flutter.tar.xz
RUN flutter config --no-analytics \
&& flutter precache \
&& yes | flutter doctor --android-licenses || test $? -eq 141 \
&& flutter doctor \
&& flutter emulators --create \
&& flutter update-packages

#COPY entrypoint.sh /usr/local/bin/
#COPY chown.sh /usr/local/bin/
#COPY flutter-android-emulator.sh /usr/local/bin/flutter-android-emulator
#ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ]

USER root
#Android Studio
ARG ANDROID_STUDIO_ROOT="/opt/android-studio"
RUN sudo dpkg --add-architecture i386 \
&& sudo apt-get update \
&& sudo apt-get upgrade --yes
RUN --mount=type=cache,target=/var/cache/apt \
apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
unzip \
xz-utils \
zip \
libglu1-mesa \
libc6:i386 \
libncurses5:i386 \
libstdc++6:i386 lib32z1 \
libbz2-1.0:i386 \
# Android Studio
build-essential git neovim wget unzip sudo \
libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386 \
libxrender1 libxtst6 libxi6 libfreetype6 libxft2 xz-utils vim \
qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils libnotify4 libglu1 libqt5widgets5 openjdk-8-jdk openjdk-11-jdk openjdk-17-jdk xvfb \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# RUN groupadd -g 1000 -r ${USER}
RUN adduser ${USER} libvirt
RUN adduser ${USER} kvm
RUN usermod -aG plugdev ${USER}
RUN mkdir -p $ANDROID_STUDIO_ROOT
RUN mkdir -p $ANDROID_STUDIO_ROOT/Android/Sdk
RUN mkdir -p $ANDROID_STUDIO_ROOT/profile/android

ARG ANDROID_STUDIO_VERSION=2023.2.1.24
ARG ANDROID_STUDIO_URL=https://r1---sn-h0jeenld.gvt1.com/edgedl/android/studio/ide-zips/${ANDROID_STUDIO_VERSION}/android-studio-${ANDROID_STUDIO_VERSION}-linux.tar.gz
RUN wget "$ANDROID_STUDIO_URL" -O android-studio.tar.gz && tar xzvf android-studio.tar.gz -C $ANDROID_STUDIO_ROOT && rm android-studio.tar.gz
RUN chown ${USER}:${USER} $ANDROID_STUDIO_ROOT
ENV ANDROID_EMULATOR_USE_SYSTEM_LIBS=1

### COMMON DEVELOPMENT TOOLS ###
FROM devcontainer_cpp AS devcontainer
FROM devcontainer_flutter AS devcontainer
ARG USER
USER root
SHELL ["/bin/bash", "-euco", "pipefail"]
Expand All @@ -155,15 +285,7 @@ RUN --mount=type=cache,target=/var/cache/apt \
valgrind \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
USER root
SHELL ["/bin/bash", "-euco", "pipefail"]
RUN useradd -s /bin/bash -U -m ${USER} && \
echo ${USER} ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/${USER} && \
chmod 0440 /etc/sudoers.d/${USER}
USER ${USER}
ENV USER_HOME=/home/${USER}
RUN mkdir -p ${USER_HOME}/.cache
RUN mkdir -p ${USER_HOME}/.config
RUN curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | sh \
&& git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "/home/${USER}/powerlevel10k" \
&& git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting.git "${ZSH_CUSTOM:-"/home/${USER}/.oh-my-zsh/custom"}/plugins/zsh-syntax-highlighting" \
Expand Down
5 changes: 4 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@
"rubymaniac.vscode-direnv",
"timonwong.shellcheck",
"tamasfe.even-better-toml",
"rust-lang.rust-analyzer"
"rust-lang.rust-analyzer",
"Dart-Code.dart-code",
"Dart-Code.flutter",
"alexisvt.flutter-snippets"
]
}
}
Expand Down
12 changes: 12 additions & 0 deletions .devcontainer/docker-compose.devcontainer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ services:
security_opt:
- seccomp:unconfined
user: ${USER}
group_add:
- plugdev
tty: true
environment:
WORKSPACE_FOLDER: /workspace
Expand All @@ -33,6 +35,16 @@ services:
- /dev/:/dev/
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${HOME}/.Xauthority.docker:/home/${USER}/.Xauthority
# Android Studio
#- ./studio-data/profile/AndroidStudio2022.3.1.20:/studio-data/profile/AndroidStudio2022.3.1.20
#- ./studio-data/Android:/studio-data/Android
#- ./studio-data/profile/.android:/studio-data/profile/.android
#- ./studio-data/profile/.java:/studio-data/profile/.java
#- ./studio-data/profile/.gradle:/studio-data/profile/.gradle
#- android_studio:/androidstudio-data
devices:
- /dev/bus/usb:/dev/bus/usb
volumes:
cache:
name: cache-${USER}
#android_studio:
15 changes: 13 additions & 2 deletions .devcontainer/postAttachCommand.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
source ${HOME}/.bashrc
source "${HOME}"/.bashrc

set -euo pipefail
shopt -s nullglob globstar

poetry config virtualenvs.in-project true
poetry install --no-cache
source $(poetry env info --path)/bin/activate
source "$(poetry env info --path)"/bin/activate

pre-commit install >/dev/null 2>&1
git lfs install >/dev/null 2>&1
Expand All @@ -15,3 +15,14 @@ git lfs track "*.jpg" >/dev/null 2>&1

DOCKER_XAUTHORITY=${HOME}/.Xauthority.docker
cp ~/.Xauthority "$DOCKER_XAUTHORITY"

#Change permissions of /dev/kvm for Android Emulator
echo "$(whoami)" | sudo -S chmod 777 /dev/kvm > /dev/null 2>&1
# export PATH=$PATH:/studio-data/platform-tools/ # export will not work
# Ensure the Android directory exists and has the correct permissions
# if [ ! -d "/studio-data/Android" ]; then
# mkdir -p /studio-data/Android
# fi
# sudo chown -R "${USER}":"${USER}" /studio-data/Android

yes | flutter doctor --android-licenses || test $? -eq 141