# syntax=docker/dockerfile:1.6
# --- Build stage ---
FROM --platform=$TARGETPLATFORM rust:1.86.0-alpine3.21 AS builder
ARG TARGETPLATFORM

#—Install compiler toolchain and common build deps
RUN --mount=type=cache,target=/var/cache/apk \
    apk add --no-cache \
        build-base musl-dev pkgconf git \
        openssl-dev openssl-libs-static   \
        perl perl-utils

WORKDIR /app

COPY Cargo.toml Cargo.lock* ./
RUN cargo fetch

COPY . .

ENV OPENSSL_STATIC=1
ENV OPENSSL_NO_VENDOR=1

RUN set -eux; \
    case "$TARGETPLATFORM" in \
        "linux/amd64")   RUST_TARGET=x86_64-unknown-linux-musl   ;; \
        "linux/arm64")   RUST_TARGET=aarch64-unknown-linux-musl ;; \
        "linux/arm/v7")  RUST_TARGET=armv7-unknown-linux-musleabihf ;; \
        *) echo "Unsupported platform $TARGETPLATFORM" && exit 1 ;; \
    esac; \
    rustup target add $RUST_TARGET; \
    cargo build --release --bin foxy \
        --target $RUST_TARGET --target-dir /cargo_target; \
    strip /cargo_target/$RUST_TARGET/release/foxy; \
    mkdir -p /out && cp /cargo_target/$RUST_TARGET/release/foxy /out/

# --- Runtime stage ---
FROM alpine:3.21

RUN apk add --no-cache ca-certificates
COPY --from=builder /out/foxy /usr/local/bin/foxy

EXPOSE 8080
ENTRYPOINT ["foxy"]