# syntax=docker/dockerfile:1 # Autogenerated by docker init # https://docs.docker.com/go/dockerfile-reference/ ARG RUST_VERSION=1.80.1 ARG APP_NAME=lonelyradio ################################################################################ # xx is a helper for cross-compilation. # See https://github.com/tonistiigi/xx/ for more information. FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.3.0 AS xx ################################################################################ # Create a stage for building the application. FROM --platform=$BUILDPLATFORM rust:${RUST_VERSION}-alpine AS build ARG APP_NAME WORKDIR /app # Copy cross compilation utilities from the xx stage. COPY --from=xx / / # Install host build dependencies. RUN apk add --no-cache clang lld musl-dev git file cmake make # This is the architecture you’re building for, which is passed in by the builder. # Placing it here allows the previous steps to be cached across architectures. ARG TARGETPLATFORM # Install cross compilation build dependencies. RUN xx-apk add --no-cache musl-dev gcc # Build the application. # Leverage a cache mount to /usr/local/cargo/registry/ # for downloaded dependencies, a cache mount to /usr/local/cargo/git/db # for git repository dependencies, and a cache mount to /app/target/ for # compiled dependencies which will speed up subsequent builds. # Leverage a bind mount to the src directory to avoid having to copy the # source code into the container. Once built, copy the executable to an # output directory before the cache mounted /app/target is unmounted. RUN --mount=type=bind,source=src,target=src \ --mount=type=bind,source=lonelyradio_types,target=lonelyradio_types \ --mount=type=bind,source=monoclient,target=monoclient \ --mount=type=bind,source=monoclient-s,target=monoclient-s \ --mount=type=bind,source=monolib,target=monolib \ --mount=type=bind,source=monoloader,target=monoloader \ --mount=type=bind,source=Cargo.toml,target=Cargo.toml \ --mount=type=bind,source=Cargo.lock,target=Cargo.lock \ --mount=type=cache,target=/app/target/,id=rust-cache-${APP_NAME}-${TARGETPLATFORM} \ --mount=type=cache,target=/usr/local/cargo/git/db \ --mount=type=cache,target=/usr/local/cargo/registry/ \ <