voirs 0.1.0-alpha.2

Advanced voice synthesis and speech processing library for Rust
# Multi-stage build for VoiRS - Enhanced Version
FROM rust:1.78-bookworm as builder

# Install comprehensive system dependencies for audio processing
RUN apt-get update && apt-get install -y \
    pkg-config \
    libssl-dev \
    libasound2-dev \
    libpulse-dev \
    libjack-dev \
    portaudio19-dev \
    build-essential \
    cmake \
    libclang-dev \
    && rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /app

# Copy workspace files
COPY Cargo.toml Cargo.lock ./
COPY .cargo/ .cargo/
COPY crates/ crates/

# Build the application with optimizations for production
RUN cargo build --release --workspace --no-default-features --features "cli"

# Runtime stage
FROM debian:bookworm-slim

# Install runtime dependencies for audio processing
RUN apt-get update && apt-get install -y \
    libasound2 \
    libpulse0 \
    libjack0 \
    portaudio19-dev \
    libssl3 \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# Create non-root user
RUN useradd -r -s /bin/false voirs

# Create directories
RUN mkdir -p /app/models /app/audio /app/output /app/config && \
    chown -R voirs:voirs /app

# Copy built binaries from builder stage
COPY --from=builder /app/target/release/voirs-cli /usr/local/bin/voirs-cli
COPY --from=builder /app/target/release/libvoirs_ffi.so /usr/local/lib/ 2>/dev/null || true

# Set library path for FFI
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# Copy models directory structure
COPY --chown=voirs:voirs models/ /app/models/

# Switch to non-root user
USER voirs

# Set working directory
WORKDIR /app

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD voirs-cli --version || exit 1

# Default command
CMD ["voirs-cli", "--help"]

# Expose common ports for API access (if enabled)
EXPOSE 8080 8443

# Labels
LABEL org.opencontainers.image.title="VoiRS"
LABEL org.opencontainers.image.description="Pure-Rust Neural Speech Synthesis Framework"
LABEL org.opencontainers.image.vendor="cool-japan"
LABEL org.opencontainers.image.licenses="MIT OR Apache-2.0"
LABEL org.opencontainers.image.source="https://github.com/cool-japan/voirs"