FROM golang:1.19-bullseye AS base RUN apt-get update RUN apt-get install -y libssl-dev cmake build-essential gperf libz-dev make git php FROM base AS tdlib ARG TD_COMMIT ARG MAKEOPTS RUN git clone https://github.com/tdlib/td /src/ RUN git -C /src/ checkout "${TD_COMMIT}" RUN mkdir build WORKDIR /build/ RUN cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/compiled/ /src/ RUN cmake --build . --target prepare_cross_compiling ${MAKEOPTS} WORKDIR /src/ RUN php SplitSource.php WORKDIR /build/ RUN cmake --build . ${MAKEOPTS} RUN make install FROM base AS cache ARG VERSION COPY --from=tdlib /compiled/ /usr/local/ WORKDIR /src RUN go env -w GOCACHE=/go-cache RUN go env -w GOMODCACHE=/gomod-cache RUN --mount=type=cache,target=/gomod-cache \ --mount=type=bind,source=./,target=/src,rw \ /bin/bash -c 'go mod tidy; go get -t' FROM cache AS build ARG MAKEOPTS WORKDIR /src RUN --mount=type=bind,source=./,target=/src,rw \ --mount=type=cache,target=/go-cache \ --mount=type=cache,target=/gomod-cache \ --mount=type=cache,destination=/src/release \ make ${MAKEOPTS} FROM build AS release RUN --mount=type=cache,destination=/src/release \ cp /src/release/telegabber / FROM scratch AS binaries COPY --from=release /telegabber /