diff --git a/Dockerfile b/Dockerfile index b7d6875..1554005 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,40 @@ -FROM rust:1-bookworm AS builder +FROM --platform=$BUILDPLATFORM rust:1-bookworm AS builder WORKDIR /src RUN apt-get update \ - && apt-get install --no-install-recommends -y build-essential ca-certificates \ + && apt-get install --no-install-recommends -y \ + build-essential ca-certificates \ + gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu \ + libc6-dev-arm64-cross libc6-dev-amd64-cross \ + linux-libc-dev-arm64-cross linux-libc-dev-amd64-cross \ && rm -rf /var/lib/apt/lists/* +ARG TARGETARCH COPY Cargo.toml Cargo.lock ./ COPY migrations ./migrations COPY src ./src COPY tests ./tests -RUN cargo build --release --locked +RUN case "$TARGETARCH" in \ + amd64) \ + rust_target=x86_64-unknown-linux-gnu; \ + linker=x86_64-linux-gnu-gcc; \ + ;; \ + arm64) \ + rust_target=aarch64-unknown-linux-gnu; \ + linker=aarch64-linux-gnu-gcc; \ + ;; \ + *) \ + echo "unsupported TARGETARCH=$TARGETARCH" >&2; \ + exit 1; \ + ;; \ + esac \ + && rustup target add "$rust_target" \ + && env "CARGO_TARGET_$(printf '%s' "$rust_target" | tr '[:lower:]-' '[:upper:]_')_LINKER=$linker" \ + CC="$linker" \ + cargo build --release --locked --target "$rust_target" \ + && mkdir -p /out \ + && cp "target/$rust_target/release/kosync-rs" /out/kosync-rs FROM debian:bookworm-slim @@ -19,7 +43,7 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* \ && useradd --system --uid 10001 --home-dir /data --create-home kosync -COPY --from=builder /src/target/release/kosync-rs /usr/local/bin/kosync-rs +COPY --from=builder /out/kosync-rs /usr/local/bin/kosync-rs USER kosync WORKDIR /data