| |
| FROM node:20-slim AS frontend-builder |
| ARG USE_MIRROR=auto |
| WORKDIR /app |
|
|
| |
| RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "</dev/tcp/www.google.com/80" 2>/dev/null ); then \ |
| echo "Using npm mirror..."; \ |
| npm config set registry https://registry.npmmirror.com; \ |
| else \ |
| echo "Using default npm registry..."; \ |
| fi |
|
|
| COPY package*.json ./ |
| RUN --mount=type=cache,target=/root/.npm \ |
| npm ci --legacy-peer-deps --prefer-offline --no-audit --no-fund |
| COPY tsconfig.json tsconfig.node.json vite.config.ts tailwind.config.js postcss.config.cjs index.html ./ |
| COPY public ./public |
| COPY src ./src |
| COPY src-tauri/icons ./src-tauri/icons |
| RUN npm run build |
|
|
| |
| FROM rust:1-slim-bookworm AS backend-builder |
| ARG USE_MIRROR=auto |
|
|
| |
| RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "</dev/tcp/www.google.com/80" 2>/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 |
|
|
| |
| 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 \ |
| perl \ |
| cmake \ |
| golang-go \ |
| clang \ |
| libclang-dev \ |
| git \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| ENV CARGO_HTTP_MULTIPLEXING=false |
| RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "</dev/tcp/www.google.com/80" 2>/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 |
|
|
| |
| RUN which go && go version || (echo "ERROR: Go compiler not found" && exit 1) |
|
|
| WORKDIR /app |
| |
| COPY src-tauri ./src-tauri |
|
|
| |
| COPY src/locales ./src/locales |
|
|
| |
| COPY --from=frontend-builder /app/dist ./dist |
|
|
| |
| 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 |
|
|
| |
| FROM debian:bookworm-slim |
| ARG USE_MIRROR=auto |
| WORKDIR /app |
|
|
| |
| RUN if [ "$USE_MIRROR" = "true" ] || ( [ "$USE_MIRROR" = "auto" ] && ! timeout 3 bash -c "</dev/tcp/www.google.com/80" 2>/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 |
|
|
| |
| 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 --from=backend-builder /tmp/antigravity_tools /app/antigravity-tools |
|
|
| |
| COPY --from=frontend-builder /app/dist /app/dist |
|
|
| |
| ENV ABV_DIST_PATH=/app/dist |
| ENV RUST_LOG=info |
| ENV PORT=8045 |
|
|
| |
| EXPOSE 8045 |
|
|
| |
| ENTRYPOINT ["/app/antigravity-tools", "--headless"] |
|
|