# syntax=docker/dockerfile:1 # Tauri Client Build Container # Used for CI builds and development - desktop app typically runs natively FROM rust:1.81-bookworm AS rust-base # Install Node.js 20.x RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y nodejs # Tauri build dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ pkg-config \ libwebkit2gtk-4.1-dev \ libssl-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ libgtk-3-dev \ libasound2-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # ============================================================================= # Client Dependencies Stage # ============================================================================= FROM rust-base AS client-deps # Copy package files for npm install caching COPY client/package.json client/package-lock.json ./client/ # Install npm dependencies WORKDIR /app/client RUN npm ci # Copy Cargo files for Rust dependency caching WORKDIR /app COPY client/src-tauri/Cargo.toml client/src-tauri/Cargo.lock ./client/src-tauri/ # Create dummy main.rs to build dependencies RUN mkdir -p client/src-tauri/src \ && echo "fn main() {}" > client/src-tauri/src/main.rs # Pre-build Rust dependencies WORKDIR /app/client/src-tauri RUN cargo build --release || true # ============================================================================= # Client Build Stage # ============================================================================= FROM client-deps AS client-build WORKDIR /app # Copy full source COPY client/ ./client/ # Build frontend WORKDIR /app/client RUN npm run build # Build Tauri app WORKDIR /app/client/src-tauri RUN cargo build --release # ============================================================================= # Client Dev Stage (for running tauri dev) # ============================================================================= FROM rust-base AS client-dev WORKDIR /app/client # Copy package files COPY client/package.json client/package-lock.json ./ # Install npm dependencies RUN npm ci # Install Tauri CLI RUN npm install -g @tauri-apps/cli # Source is mounted via volume CMD ["npm", "run", "tauri", "dev"]