FROM debian:trixie # Install system dependencies RUN apt-get update && apt-get install -y \ curl \ pkg-config \ build-essential \ libdbus-1-dev \ libgtk-3-dev \ libwebkit2gtk-4.1-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ libssl-dev \ libasound2-dev \ && rm -rf /var/lib/apt/lists/* # Install Rust RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH="/root/.cargo/bin:${PATH}" # Install Node.js (for frontend) RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get install -y nodejs && \ rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy Cargo files first for caching COPY Cargo.toml ./ COPY shared/Cargo.toml shared/ COPY tscore/Cargo.toml tscore/ COPY tsaudio/Cargo.toml tsaudio/ COPY tsdb/Cargo.toml tsdb/ COPY tauri-app/src-tauri/Cargo.toml tauri-app/src-tauri/ # Create dummy source files for dependency caching RUN mkdir -p shared/src && echo "pub fn dummy() {}" > shared/src/lib.rs && \ mkdir -p tscore/src && echo "pub fn dummy() {}" > tscore/src/lib.rs && \ mkdir -p tsaudio/src && echo "pub fn dummy() {}" > tsaudio/src/lib.rs && \ mkdir -p tsdb/src && echo "pub fn dummy() {}" > tsdb/src/lib.rs && \ mkdir -p tauri-app/src-tauri/src && echo "pub fn dummy() {}" > tauri-app/src-tauri/src/lib.rs # Build dependencies (cached layer) RUN cargo build 2>/dev/null || true # Copy actual source COPY . . # Build RUN cargo build -p shared -p tscore -p tsaudio -p tsdb # Build frontend RUN cd tauri-app/frontend && npm install && npm run build # Final build RUN cargo build CMD ["cargo", "test", "-p", "shared", "-p", "tscore", "-p", "tsaudio", "-p", "tsdb"]