FROM --platform=$BUILDPLATFORM alpine:latest AS base ARG TARGETPLATFORM FROM base AS builder-linux_amd64 ENV RUST_TARGET="x86_64-unknown-linux-musl" ENV CC_x86_64-unknown-linux-musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-gcc ENV CXX_x86_64-unknown-linux-musl=/opt/x-tools/x86_64-unknown-linux-musl/bin/x86_64-unknown-linux-musl-g++ FROM base AS builder-linux_arm64 ENV RUST_TARGET="aarch64-unknown-linux-musl" ENV CC_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-gcc ENV CXX_aarch64_unknown_linux_musl=/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-g++ FROM builder-${TARGETPLATFORM/\//_} AS build RUN --mount=type=cache,target=/var/cache/apk apk update RUN --mount=type=cache,target=/var/cache/apk apk add rustup binutils gcc musl-dev linux-headers RUN adduser -D luser USER luser WORKDIR /home/luser RUN rustup-init -y --profile minimal --target "$RUST_TARGET" ADD --chown=luser:users . . RUN source $HOME/.cargo/env && cargo build --release --target "$RUST_TARGET" RUN cp "target/${RUST_TARGET}/release/intrasys" "./intrasys.x" FROM scratch AS release COPY --from=build --chown=9999:9999 /home/luser/intrasys.x /usr/local/bin/intrasys USER 9999 ENTRYPOINT ["/usr/local/bin/intrasys"] ENV INTRASYS_HOST="0.0.0.0" EXPOSE 8080/tcp