# --- Backend Build Stage (no frontend build) --- FROM rust:1-slim-bookworm AS backend-builder ARG USE_MIRROR=auto # Conditionally use Aliyun mirror for APT RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "/dev/null ); then \ echo "Using Aliyun mirror for APT..."; \ sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources || \ sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list; \ else \ echo "Using default APT sources..."; \ fi # Install build dependencies RUN apt-get update && apt-get install -y \ pkg-config \ build-essential \ curl \ wget \ file \ libssl-dev \ libgtk-3-dev \ libwebkit2gtk-4.1-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ libsoup-3.0-dev \ libjavascriptcoregtk-4.1-dev \ && rm -rf /var/lib/apt/lists/* # Use Aliyun mirror for Cargo if needed (Sparse Index) ENV CARGO_HTTP_MULTIPLEXING=false RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "/dev/null ); then \ echo "Using Aliyun mirror for Cargo..."; \ mkdir -p /root/.cargo && \ echo "[source.crates-io]\nreplace-with = 'aliyun'\n\n[source.aliyun]\nregistry = \"sparse+https://mirrors.aliyun.com/crates.io-index/\"" > /root/.cargo/config.toml; \ else \ echo "Using default Cargo registry..."; \ fi WORKDIR /app COPY src-tauri ./src-tauri COPY src/locales ./src/locales WORKDIR /app/src-tauri RUN --mount=type=cache,target=/root/.cargo/registry \ --mount=type=cache,target=/root/.cargo/git \ --mount=type=cache,target=/app/src-tauri/target \ cargo build --release --bin antigravity_tools && \ cp target/release/antigravity_tools /tmp/antigravity_tools # --- Frontend Dist Stage (reuse prebuilt image) --- ARG FRONTEND_IMAGE=antigravity-manager:latest FROM ${FRONTEND_IMAGE} AS frontend-prebuilt # --- Final Runtime Stage --- FROM debian:bookworm-slim ARG USE_MIRROR=auto WORKDIR /app # Conditionally use Aliyun mirror for APT RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "/dev/null ); then \ echo "Using Aliyun mirror for APT..."; \ sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources || \ sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list; \ else \ echo "Using default APT sources..."; \ fi # Install runtime dependencies RUN apt-get update && apt-get install -y \ libssl3 \ libsqlite3-0 \ ca-certificates \ libgtk-3-0 \ libwebkit2gtk-4.1-0 \ libayatana-appindicator3-1 \ librsvg2-2 \ && rm -rf /var/lib/apt/lists/* # Copy binary from builder COPY --from=backend-builder /tmp/antigravity_tools /app/antigravity-tools # Copy frontend dist from prebuilt image COPY --from=frontend-prebuilt /app/dist /app/dist # Set environment variables ENV ABV_DIST_PATH=/app/dist ENV RUST_LOG=info ENV PORT=8045 # Expose the proxy/admin port EXPOSE 8045 # Run the application in headless mode ENTRYPOINT ["/app/antigravity-tools", "--headless"]