# Rebuild the deployed sources without changing service protocols or storage format. ARG GO_IMAGE=golang:1.26.10-bookworm@sha256:632dff7351799a5a9954a48dc06670ade72ee44e8c351cdc0e5a57af2fea21af ARG NODE_IMAGE=node:22.23.4-alpine@sha256:fe4f6d74e20370acb04ad889077d14d0f64a9c8ea6a42bc60cddf1e844699914 FROM ${GO_IMAGE} AS source ENV GOTOOLCHAIN=local CGO_ENABLED=0 GOMAXPROCS=2 GOMEMLIMIT=512MiB GOFLAGS=-p=1 COPY *.tar.gz sources.sha256 /sources/ RUN cd /sources && sha256sum -c sources.sha256 && \ mkdir /frpc /rclone /minio /out && \ tar -xzf frpc.tar.gz -C /frpc --strip-components=1 && \ tar -xzf rclone.tar.gz -C /rclone --strip-components=1 && \ tar -xzf minio.tar.gz -C /minio --strip-components=1 COPY tls-probe.go /probe/main.go RUN cd /probe && go build -trimpath -o /out/tls-probe main.go FROM ${NODE_IMAGE} AS frp-web COPY --from=source /frpc/web /web WORKDIR /web/frpc RUN --mount=type=cache,target=/root/.npm npm ci --no-audit --no-fund && npm run build WORKDIR /web/frps RUN --mount=type=cache,target=/root/.npm npm ci --no-audit --no-fund && npm run build FROM source AS frpc WORKDIR /frpc COPY --from=frp-web /web/frpc/dist ./web/frpc/dist COPY --from=frp-web /web/frps/dist ./web/frps/dist RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build \ go build -trimpath -tags frpc -ldflags '-s -w' -o /out/frpc ./cmd/frpc && \ go build -trimpath -tags frps -ldflags '-s -w' -o /out/frps ./cmd/frps && \ go version -m /out/frpc > /out/frpc.buildinfo && \ cp LICENSE /out/frpc.LICENSE FROM source AS rclone WORKDIR /rclone RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build \ go build -trimpath -ldflags '-s -w -X github.com/rclone/rclone/fs.Version=v1.67.0' -o /out/rclone . && \ go version -m /out/rclone > /out/rclone.buildinfo && \ cp COPYING /out/rclone.LICENSE FROM source AS minio WORKDIR /minio RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/go-build \ go build -trimpath -tags kqueue -ldflags '-s -w -X github.com/minio/minio/cmd.Version=2025-04-22T22:12:26Z -X github.com/minio/minio/cmd.ReleaseTag=RELEASE.2025-04-22T22-12-26Z -X github.com/minio/minio/cmd.CopyrightYear=2025 -X github.com/minio/minio/cmd.CommitID=0d7408fc9969caf07de6a8c3a84f9fbb10a6739e -X github.com/minio/minio/cmd.ShortCommitID=0d7408fc9969' -o /out/minio . && \ go version -m /out/minio > /out/minio.buildinfo && \ cp LICENSE /out/minio.LICENSE FROM scratch AS artifacts COPY --from=frpc /out/ /out/ COPY --from=rclone /out/ /out/ COPY --from=minio /out/ /out/