Dockerfile 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # syntax = docker/dockerfile:experimental
  2. ARG GO_VERSION=1.14.2
  3. FROM golang:${GO_VERSION} AS base
  4. ARG TARGET_OS=unknown
  5. ARG TARGET_ARCH=unknown
  6. ARG PWD=/api
  7. ENV GO111MODULE=on
  8. WORKDIR ${PWD}
  9. ADD go.* ${PWD}
  10. ADD . ${PWD}
  11. FROM golang:${GO_VERSION} AS protos-base
  12. ARG TARGET_OS=unknown
  13. ARG TARGET_ARCH=unknown
  14. ARG PWD=/api
  15. ENV GO111MODULE=on
  16. RUN apt-get update && apt-get install --no-install-recommends -y \
  17. protobuf-compiler \
  18. libprotobuf-dev
  19. RUN go get github.com/golang/protobuf/[email protected] && \
  20. go get golang.org/x/tools/cmd/goimports
  21. WORKDIR ${PWD}
  22. ADD go.* ${PWD}
  23. ADD . ${PWD}
  24. FROM golang:${GO_VERSION} AS lint-base
  25. RUN go get github.com/golangci/golangci-lint/cmd/[email protected]
  26. FROM protos-base AS make-protos
  27. RUN make -f builder.Makefile protos
  28. FROM base AS make-cli
  29. RUN --mount=type=cache,target=/root/.cache/go-build \
  30. GOOS=${TARGET_OS} \
  31. GOARCH=${TARGET_ARCH} \
  32. make -f builder.Makefile cli
  33. FROM base AS make-cross
  34. RUN --mount=type=cache,target=/root/.cache/go-build \
  35. make -f builder.Makefile cross
  36. FROM scratch AS protos
  37. COPY --from=make-protos /api .
  38. FROM scratch AS cli
  39. COPY --from=make-cli /api/bin/* .
  40. FROM scratch AS cross
  41. COPY --from=make-cross /api/bin/* .
  42. FROM base as test
  43. RUN make -f builder.Makefile test
  44. FROM lint-base AS lint
  45. RUN make -f builder.Makefile lint