Dockerfile 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. ARG BUILD_TAGS
  31. RUN --mount=target=. \
  32. --mount=type=cache,target=/root/.cache/go-build \
  33. GOOS=${TARGETOS} \
  34. GOARCH=${TARGETARCH} \
  35. BUILD_TAGS=${BUILD_TAGS} \
  36. make BINARY=/out/docker -f builder.Makefile cli
  37. FROM base AS make-cross
  38. ARG BUILD_TAGS
  39. RUN --mount=target=. \
  40. --mount=type=cache,target=/root/.cache/go-build \
  41. BUILD_TAGS=${BUILD_TAGS} \
  42. make BINARY=/out/docker -f builder.Makefile cross
  43. FROM scratch AS protos
  44. COPY --from=make-protos /api/protos .
  45. FROM scratch AS cli
  46. COPY --from=make-cli /out/* .
  47. FROM scratch AS cross
  48. COPY --from=make-cross /out/* .
  49. FROM base as test
  50. ARG BUILD_TAGS
  51. ENV CGO_ENABLED=0
  52. RUN --mount=target=. \
  53. --mount=type=cache,target=/root/.cache/go-build \
  54. BUILD_TAGS=${BUILD_TAGS} \
  55. make -f builder.Makefile test