#syntax=docker/dockerfile:1.8
#check=error=true

ARG GO_VERSION=1.23
ARG XX_VERSION=1.4.0

ARG COVER_FILENAME="cover.out"
ARG BENCH_FILENAME="bench.txt"

FROM --platform=${BUILDPLATFORM} tonistiigi/xx:${XX_VERSION} AS xx

FROM --platform=${BUILDPLATFORM} golang:${GO_VERSION}-alpine AS golang
COPY --link --from=xx / /
WORKDIR /src
ARG TARGETPLATFORM

FROM golang AS build
RUN --mount=target=/root/.cache,type=cache \
    --mount=type=bind xx-go build .

FROM golang AS runbench
ARG BENCH_FILENAME
RUN --mount=target=/root/.cache,type=cache \
    --mount=type=bind \
    xx-go test -v --run skip --bench . | tee /tmp/${BENCH_FILENAME}

FROM scratch AS bench
ARG BENCH_FILENAME
COPY --from=runbench /tmp/${BENCH_FILENAME} /

FROM golang AS runtest
ARG TESTFLAGS="-v"
ARG COVER_FILENAME
RUN --mount=target=/root/.cache,type=cache \
    --mount=type=bind \
    xx-go test -coverprofile=/tmp/${COVER_FILENAME} $TESTFLAGS .

FROM scratch AS test
ARG COVER_FILENAME
COPY --from=runtest /tmp/${COVER_FILENAME} /

FROM build
