-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathDockerfile
More file actions
74 lines (59 loc) · 2.65 KB
/
Copy pathDockerfile
File metadata and controls
74 lines (59 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
FROM debian:bookworm-slim AS ffmpeg
ARG FFMPEG_STATIC_URL="https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz"
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl xz-utils \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /opt/ffmpeg \
&& curl -fsSL "$FFMPEG_STATIC_URL" -o /tmp/ffmpeg.tar.xz \
&& tar -xJf /tmp/ffmpeg.tar.xz -C /opt/ffmpeg --strip-components=1 \
&& test -x /opt/ffmpeg/ffmpeg \
&& test -x /opt/ffmpeg/ffprobe \
&& rm -f /tmp/ffmpeg.tar.xz
FROM node:22-bookworm AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend ./
RUN npm run build
FROM rust:bookworm AS builder
ARG ANDROID_NDK_URL="https://dl.google.com/android/repository/android-ndk-r25c-linux.zip"
ARG GIT_COMMIT
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl unzip \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /opt/android-ndk \
&& curl -fsSL "$ANDROID_NDK_URL" -o /tmp/android-ndk.zip \
&& unzip -q /tmp/android-ndk.zip -d /opt/android-ndk \
&& ndk_dir="$(find /opt/android-ndk -mindepth 1 -maxdepth 1 -type d | head -n 1)" \
&& mv "$ndk_dir" /opt/android-ndk/current \
&& rm -f /tmp/android-ndk.zip
ENV ANDROID_NDK_HOME=/opt/android-ndk/current
ENV GIT_COMMIT=${GIT_COMMIT}
RUN cargo install --locked cargo-ndk
RUN rustup target add x86_64-linux-android
WORKDIR /app
COPY . .
COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist
RUN cargo ndk -t x86_64 build --release --bin main
FROM debian:bookworm-slim AS rootfs
ARG ROOTFS_ARCHIVE_URL="https://github.com/WorldObservationLog/wrapper/archive/refs/heads/main.tar.gz"
# Android's dynamic loader must stay executable. Containerd refuses to start
# `/main` when the archived rootfs ships `system/bin/linker64` without the
# execute bit.
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl tar \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /tmp/rootfs /out \
&& curl -fsSL "$ROOTFS_ARCHIVE_URL" -o /tmp/rootfs/rootfs.tar.gz \
&& tar -xzf /tmp/rootfs/rootfs.tar.gz -C /tmp/rootfs \
&& src_dir="$(find /tmp/rootfs -mindepth 2 -maxdepth 2 -type d -name rootfs | head -n 1)" \
&& test -n "$src_dir" \
&& cp -a "$src_dir" /out/rootfs \
&& chmod 0755 /out/rootfs/system/bin/linker64
FROM scratch
COPY --from=rootfs /out/rootfs /
COPY --from=ffmpeg /opt/ffmpeg/ffmpeg /usr/local/bin/ffmpeg
COPY --from=ffmpeg /opt/ffmpeg/ffprobe /usr/local/bin/ffprobe
COPY --from=builder /app/target/x86_64-linux-android/release/main /main
EXPOSE 8080
ENTRYPOINT ["/main"]