From 662d11b3b14df208cc7ab53a28b2e1c64274fccd Mon Sep 17 00:00:00 2001 From: JP <17429390+resolritter@users.noreply.github.com> Date: Mon, 10 Apr 2023 23:26:04 -0300 Subject: [PATCH] Fix the app's Dockerfile and comment it (#2162) * chore: fix the app's Dockerfile and comment it * chore: test docker-compose on CI --- .dockerignore | 5 +- .github/workflows/docker_ci.yml | 47 +++++++++ frontend/scripts/docker-buildfiles/Dockerfile | 97 ++++++++++++------- .../docker-buildfiles/docker-compose.yml | 18 ++-- 4 files changed, 121 insertions(+), 46 deletions(-) create mode 100644 .github/workflows/docker_ci.yml diff --git a/.dockerignore b/.dockerignore index 6e95d35269..6b8710a711 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1 @@ -frontend/appflowy_flutter/ -frontend/scripts/ -frontend/rust-lib/target -shared-lib/target/ \ No newline at end of file +.git diff --git a/.github/workflows/docker_ci.yml b/.github/workflows/docker_ci.yml new file mode 100644 index 0000000000..07b4e32c99 --- /dev/null +++ b/.github/workflows/docker_ci.yml @@ -0,0 +1,47 @@ +name: Docker-CI + +on: + push: + branches: + - main + - release/* + paths: + - frontend/** + + pull_request: + branches: + - main + - release/* + paths: + - frontend/** + types: + - opened + - synchronize + - reopened + - unlocked + - ready_for_review + +jobs: + build-app: + if: github.event.pull_request.draft != true + concurrency: + group: docker_ci-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v3 + + - name: Build the app + shell: bash + run: | + set -eu -o pipefail + cd frontend/scripts/docker-buildfiles + docker-compose build --no-cache --progress=plain \ + | while read line; do \ + if [[ "$line" =~ ^Step[[:space:]] ]]; then \ + echo "$(date -u '+%H:%M:%S') | $line"; \ + else \ + echo "$line"; \ + fi; \ + done \ diff --git a/frontend/scripts/docker-buildfiles/Dockerfile b/frontend/scripts/docker-buildfiles/Dockerfile index 93ddebcda0..ad02abcd32 100644 --- a/frontend/scripts/docker-buildfiles/Dockerfile +++ b/frontend/scripts/docker-buildfiles/Dockerfile @@ -1,63 +1,90 @@ +#================ +# BUILDER +#================ + FROM archlinux/archlinux:base-devel as builder -RUN pacman -Syy +# Upgrade the system +RUN pacman -Syyu --noconfirm -RUN pacman -Syu --needed --noconfirm git xdg-user-dirs - -# makepkg user and workdir +# Set up makepkg user and workdir ARG user=makepkg -ENV PATH="/home/$user/.pub-cache/bin:/home/$user/.local/flutter/bin:/home/$user/.local/flutter/bin/cache/dart-sdk/bin:${PATH}" -RUN useradd --system --create-home $user \ - && echo "$user ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/$user +RUN pacman -S --needed --noconfirm sudo +RUN useradd --system --create-home $user && \ + echo "$user ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers +ENV PATH="/home/$user/.pub-cache/bin:/home/$user/flutter/bin:/home/$user/flutter/bin/cache/dart-sdk/bin:${PATH}" USER $user WORKDIR /home/$user # Install yay -RUN git clone https://aur.archlinux.org/yay.git \ - && cd yay \ - && makepkg -sri --needed --noconfirm +RUN sudo pacman -S --needed --noconfirm curl tar +RUN curl -sSfL \ + --output yay.tar.gz \ + https://github.com/Jguer/yay/releases/download/v12.0.2/yay_12.0.2_x86_64.tar.gz && \ + tar -xf yay.tar.gz && \ + sudo mv yay_12.0.2_x86_64/yay /bin && \ + rm -rf yay_12.0.2_x86_64 && \ + yay --version -RUN yay -S --noconfirm curl base-devel sqlite openssl clang cmake ninja pkg-config gtk3 unzip +# Install Rust +RUN yay -S --noconfirm curl base-devel openssl clang cmake ninja pkg-config xdg-user-dirs RUN xdg-user-dirs-update RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y -RUN source $HOME/.cargo/env && rustup toolchain install stable && rustup default stable -RUN git clone https://github.com/flutter/flutter.git $HOME/.local/flutter -RUN flutter channel stable +RUN source ~/.cargo/env && \ + rustup toolchain install stable && \ + rustup default stable + +# Install Flutter +RUN sudo pacman -S --noconfirm git tar gtk3 +RUN curl -sSfL \ + --output flutter.tar.xz \ + https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.7.5-stable.tar.xz && \ + tar -xf flutter.tar.xz && \ + rm flutter.tar.xz RUN flutter config --enable-linux-desktop RUN flutter doctor RUN dart pub global activate protoc_plugin -RUN sudo pacman -Syu --needed --noconfirm git xdg-user-dirs libkeybinder3 -RUN git clone https://github.com/AppFlowy-IO/appflowy.git && \ -cd appflowy/frontend && \ -source $HOME/.cargo/env && \ -cargo install --force cargo-make && \ -cargo install --force duckscript_cli && \ -cargo make appflowy-flutter-deps-tools && \ -cargo make -p production-linux-x86_64 appflowy-linux +# Intall build dependencies for AppFlowy +RUN sudo pacman -S --noconfirm git libkeybinder3 sqlite +RUN source ~/.cargo/env && cargo install --force cargo-make duckscript_cli -CMD ["/home/makepkg/appflowy/frontend/appflowy_flutter/build/linux/x64/release/bundle/appflowy_flutter"] +# Build AppFlowy +COPY . /appflowy +RUN sudo chown -R $user: /appflowy +WORKDIR /appflowy +RUN cd frontend && \ + source ~/.cargo/env && \ + cargo make appflowy-flutter-deps-tools && \ + cargo make -p production-linux-x86_64 appflowy-linux + + +#================ +# APP +#================ -################# FROM archlinux/archlinux -RUN pacman -Syy && \ - pacman -Syu --needed --noconfirm xdg-user-dirs && \ +# Upgrade the system +RUN pacman -Syyu --noconfirm + +# Install runtime dependencies +RUN pacman -S --noconfirm xdg-user-dirs gtk3 libkeybinder3 && \ pacman -Scc --noconfirm -RUN xdg-user-dirs-update - -COPY --from=builder /usr/sbin/yay /usr/sbin/yay -RUN yay -S --noconfirm gtk3 libkeybinder3 +# Set up appflowy user ARG user=appflowy ARG uid=1000 ARG gid=1000 - -RUN groupadd --gid $gid appflowy +RUN groupadd --gid $gid $user RUN useradd --create-home --uid $uid --gid $gid $user USER $user + +# Set up the AppFlowy app WORKDIR /home/$user +COPY --from=builder /appflowy/frontend/appflowy_flutter/build/linux/x64/release/bundle . +RUN xdg-user-dirs-update && \ + test -e ./AppFlowy && \ + file ./AppFlowy -COPY --from=builder /home/makepkg/appflowy/frontend/appflowy_flutter/build/linux/x64/release/bundle/ . - -CMD ["./appflowy_flutter"] +CMD ["./AppFlowy"] diff --git a/frontend/scripts/docker-buildfiles/docker-compose.yml b/frontend/scripts/docker-buildfiles/docker-compose.yml index ac1cc29339..8cf9b92210 100644 --- a/frontend/scripts/docker-buildfiles/docker-compose.yml +++ b/frontend/scripts/docker-buildfiles/docker-compose.yml @@ -1,23 +1,27 @@ version: "3" +# NOTE: Docker should be allowed to connect to the X server in your host prior +# to running `docker compose up`. Run `xhost local:docker` in the host to allow +# for those connections, otherwise the following error will occur: +# Gtk-WARNING **: cannot open display: :0 +# See https://stackoverflow.com/a/34586732/8401696 for more context. + services: app: - build: . + build: + context: ../../.. + dockerfile: ./frontend/scripts/docker-buildfiles/Dockerfile image: appflowy/appflowy:latest stdin_open: true # tty: true devices: - - "/dev/dri:/dev/dri" # fixes MESA-LOADER error + - /dev/dri:/dev/dri # fixes MESA-LOADER error environment: - - DISPLAY=${DISPLAY} + - DISPLAY=$DISPLAY - NO_AT_BRIDGE=1 # fixes dbind-WARNING volumes: - $HOME/.Xauthority:/root/.Xauthority:rw - /tmp/.X11-unix:/tmp/.X11-unix - /dev/dri:/dev/dri - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket - - appflowy-data:/home/makepkg network_mode: host - -volumes: - appflowy-data: