FROM golang:1.27-alpine@sha256:8a5910f31396cd4d89662f56c68b3ae31d374308270a1c3bd96672ee5ed43414 AS base
WORKDIR /src
ENV CGO_ENABLED=0

FROM base AS build
RUN --mount=type=bind,target=. \
    --mount=type=cache,id=lab-go-build,target=/root/.cache/go-build \
    go build -trimpath -ldflags="-s -w" -o /out/lab-app .

FROM base AS test
RUN --mount=type=bind,target=. \
    --mount=type=cache,id=lab-go-build,target=/root/.cache/go-build \
    go test ./... && touch /tmp/test.ok

FROM base AS vet
RUN --mount=type=bind,target=. \
    --mount=type=cache,id=lab-go-build,target=/root/.cache/go-build \
    go vet ./... && touch /tmp/vet.ok

FROM scratch AS checks
COPY --from=test /tmp/test.ok /
COPY --from=vet /tmp/vet.ok /

FROM scratch AS runtime
COPY --from=build /out/lab-app /lab-app
USER 65532:65532
ENTRYPOINT ["/lab-app"]
