82 lines
2.6 KiB
Docker
82 lines
2.6 KiB
Docker
FROM ubuntu:24.04
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Tauri v2 build dependencies for Ubuntu 24.04 (glibc 2.39, WebKitGTK 2.44+)
|
|
# Targets any distro from mid-2024 onwards while supporting modern Wayland compositors
|
|
RUN apt-get update && apt-get install -y \
|
|
build-essential \
|
|
curl \
|
|
wget \
|
|
file \
|
|
libgtk-3-dev \
|
|
libwebkit2gtk-4.1-dev \
|
|
librsvg2-dev \
|
|
patchelf \
|
|
libssl-dev \
|
|
libayatana-appindicator3-dev \
|
|
libglib2.0-dev \
|
|
libgdk-pixbuf2.0-dev \
|
|
libsoup-3.0-dev \
|
|
libjavascriptcoregtk-4.1-dev \
|
|
xdg-utils \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install Node.js 22 LTS
|
|
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
|
&& apt-get install -y nodejs \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install Rust stable
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
|
|
WORKDIR /app
|
|
|
|
# Cache Rust dependencies first
|
|
COPY src-tauri/Cargo.toml src-tauri/Cargo.lock src-tauri/
|
|
COPY src-tauri/build.rs src-tauri/
|
|
# Create stub lib/main so cargo can resolve the crate
|
|
RUN mkdir -p src-tauri/src && \
|
|
echo 'fn main() {}' > src-tauri/src/main.rs && \
|
|
echo '' > src-tauri/src/lib.rs && \
|
|
cd src-tauri && cargo fetch && \
|
|
rm -rf src
|
|
|
|
# Cache npm dependencies
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
|
|
# Copy the full source
|
|
COPY . .
|
|
|
|
# Build the AppImage
|
|
RUN npx tauri build --bundles appimage
|
|
|
|
# Strip GPU/GL libraries that linuxdeploy bundles from the build system.
|
|
# These MUST come from the host's GPU driver at runtime - bundling them causes
|
|
# black windows, EGL failures, and driver mismatches on any system with a
|
|
# different Mesa version or proprietary NVIDIA drivers.
|
|
# See: https://github.com/AppImage/pkg2appimage/blob/master/excludelist
|
|
RUN cd src-tauri/target/release/bundle/appimage && \
|
|
chmod +x *.AppImage && \
|
|
./*.AppImage --appimage-extract && \
|
|
find squashfs-root \( \
|
|
-name "libEGL.so*" -o \
|
|
-name "libGL.so*" -o \
|
|
-name "libGLX.so*" -o \
|
|
-name "libGLdispatch.so*" -o \
|
|
-name "libOpenGL.so*" -o \
|
|
-name "libgbm.so*" -o \
|
|
-name "libdrm.so*" -o \
|
|
-name "libglapi.so*" -o \
|
|
-name "libGLESv2.so*" \
|
|
\) -delete && \
|
|
rm -f *.AppImage && \
|
|
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O /tmp/appimagetool && \
|
|
chmod +x /tmp/appimagetool && \
|
|
ARCH=x86_64 /tmp/appimagetool --appimage-extract-and-run --no-appstream squashfs-root/ && \
|
|
rm -rf squashfs-root /tmp/appimagetool
|
|
|
|
# The AppImage will be in src-tauri/target/release/bundle/appimage/
|