# syntax=docker/dockerfile:1.7 FROM --platform=$BUILDPLATFORM golang:1.25-alpine AS payment-package-build ARG GOPROXY=https://proxy.golang.org,direct ENV GOPROXY=$GOPROXY RUN apk add --no-cache nodejs unzip zip WORKDIR /src # 插件只下载实际依赖,不为四个小程序预取整个业务后端的模块图。 COPY backend ./backend COPY plugin-packages ./plugin-packages ARG TARGETOS ARG TARGETARCH RUN --mount=type=cache,target=/root/.cache/go-build set -eu; \ test -n "$TARGETOS"; \ test -n "$TARGETARCH"; \ PAYMENT_PLUGIN_GOOS="$TARGETOS" \ PAYMENT_PLUGIN_GOARCH="$TARGETARCH" \ PAYMENT_PLUGIN_CGO_ENABLED=0 \ ./plugin-packages/build-packages.sh --payments-only; \ sh ./plugin-packages/verify-payment-packages.sh "$TARGETOS" "$TARGETARCH" FROM alpine:3.22 AS payment-package-smoke ARG TARGETOS ARG TARGETARCH RUN apk add --no-cache unzip COPY --from=payment-package-build /src/plugin-packages /app/plugin-packages RUN PAYMENT_PLUGIN_SMOKE_TEST=1 \ sh /app/plugin-packages/verify-payment-packages.sh "$TARGETOS" "$TARGETARCH" FROM golang:1.25-alpine AS backend-build ARG GOPROXY=https://proxy.golang.org,direct ENV GOPROXY=$GOPROXY RUN apk add --no-cache build-base WORKDIR /src/backend COPY backend/go.mod backend/go.sum ./ # 模块保留在普通镜像层中,供后续编译及跨 Runner 的 GHA 层缓存复用。 RUN go mod download COPY backend ./ COPY VERSION /src/VERSION ARG BUILD_VERSION ARG BUILD_COMMIT=unknown ARG BUILD_TIME=unknown RUN --mount=type=cache,target=/root/.cache/go-build set -eu; \ version="${BUILD_VERSION:-$(tr -d '\r\n' /dev/null || exit 1 CMD ["infinite-canvas-backend"]