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

Fix the app's Dockerfile and comment it #2162

Merged
merged 2 commits into from
Apr 11, 2023
Merged
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
5 changes: 1 addition & 4 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
frontend/appflowy_flutter/
frontend/scripts/
frontend/rust-lib/target
shared-lib/target/
.git
47 changes: 47 additions & 0 deletions .github/workflows/docker_ci.yml
Original file line number Diff line number Diff line change
@@ -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 \
97 changes: 62 additions & 35 deletions frontend/scripts/docker-buildfiles/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,63 +1,90 @@
FROM archlinux/archlinux:base-devel as builder
#================
# BUILDER
#================

RUN pacman -Syy
FROM archlinux/archlinux:base-devel as builder

RUN pacman -Syu --needed --noconfirm git xdg-user-dirs
# Upgrade the system
RUN pacman -Syyu --noconfirm

# 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 && \
pacman -Scc --noconfirm
RUN xdg-user-dirs-update
# Upgrade the system
RUN pacman -Syyu --noconfirm

COPY --from=builder /usr/sbin/yay /usr/sbin/yay
RUN yay -S --noconfirm gtk3 libkeybinder3
# Install runtime dependencies
RUN pacman -S --noconfirm xdg-user-dirs gtk3 libkeybinder3 && \
pacman -Scc --noconfirm

# 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
WORKDIR /home/$user

COPY --from=builder /home/makepkg/appflowy/frontend/appflowy_flutter/build/linux/x64/release/bundle/ .
# 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

CMD ["./appflowy_flutter"]
CMD ["./AppFlowy"]
18 changes: 11 additions & 7 deletions frontend/scripts/docker-buildfiles/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -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: