Dockerfile 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # syntax = docker/dockerfile:experimental
  2. ARG GO_VERSION=1.14.3-alpine
  3. ARG GOLANGCI_LINT_VERSION=v1.27.0-alpine
  4. FROM --platform=${BUILDPLATFORM} golang:${GO_VERSION} AS base
  5. WORKDIR /api
  6. ENV GO111MODULE=on
  7. RUN apk add --no-cache \
  8. docker \
  9. make \
  10. protoc \
  11. protobuf-dev
  12. COPY go.* .
  13. RUN go mod download
  14. FROM base AS make-protos
  15. RUN go get github.com/golang/protobuf/[email protected]
  16. COPY . .
  17. RUN make -f builder.Makefile protos
  18. FROM golangci/golangci-lint:${GOLANGCI_LINT_VERSION} AS lint-base
  19. FROM base AS lint
  20. ENV CGO_ENABLED=0
  21. COPY --from=lint-base /usr/bin/golangci-lint /usr/bin/golangci-lint
  22. RUN --mount=target=. \
  23. --mount=type=cache,target=/root/.cache/go-build \
  24. --mount=type=cache,target=/root/.cache/golangci-lint \
  25. make -f builder.Makefile lint
  26. FROM base AS make-cli
  27. ENV CGO_ENABLED=0
  28. ARG TARGETOS
  29. ARG TARGETARCH
  30. RUN --mount=target=. \
  31. --mount=type=cache,target=/root/.cache/go-build \
  32. GOOS=${TARGETOS} \
  33. GOARCH=${TARGETARCH} \
  34. make BINARY=/out/docker -f builder.Makefile cli
  35. FROM base AS make-cross
  36. RUN --mount=target=. \
  37. --mount=type=cache,target=/root/.cache/go-build \
  38. make BINARY=/out/docker -f builder.Makefile cross
  39. FROM scratch AS protos
  40. COPY --from=make-protos /api/protos .
  41. FROM scratch AS cli
  42. COPY --from=make-cli /out/* .
  43. FROM scratch AS cross
  44. COPY --from=make-cross /out/* .
  45. FROM base as test
  46. ENV CGO_ENABLED=0
  47. RUN --mount=target=. \
  48. --mount=type=cache,target=/root/.cache/go-build \
  49. make -f builder.Makefile test