Dockerfile 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # syntax = docker/dockerfile:experimental
  2. ARG GO_VERSION=1.14.4-alpine
  3. ARG ALPINE_PKG_DOCKER_VERSION=19.03.11-r0
  4. ARG GOLANGCI_LINT_VERSION=v1.27.0-alpine
  5. FROM --platform=${BUILDPLATFORM} golang:${GO_VERSION} AS base
  6. WORKDIR /ecs-plugin
  7. ENV GO111MODULE=on
  8. ARG ALPINE_PKG_DOCKER_VERSION
  9. RUN apk add --no-cache \
  10. docker=${ALPINE_PKG_DOCKER_VERSION} \
  11. make \
  12. build-base
  13. COPY go.* .
  14. RUN --mount=type=cache,target=/go/pkg/mod \
  15. go mod download
  16. FROM base AS make-plugin
  17. ARG TARGETOS
  18. ARG TARGETARCH
  19. ARG COMMIT
  20. ARG TAG
  21. COPY . .
  22. RUN --mount=type=cache,target=/root/.cache/go-build \
  23. --mount=type=cache,target=/go/pkg/mod \
  24. GOOS=${TARGETOS} \
  25. GOARCH=${TARGETARCH} \
  26. make -f builder.Makefile build
  27. FROM base AS make-cross
  28. ARG COMMIT
  29. ARG TAG
  30. COPY . .
  31. RUN --mount=type=cache,target=/root/.cache/go-build \
  32. --mount=type=cache,target=/go/pkg/mod \
  33. make -f builder.Makefile cross
  34. FROM scratch AS build
  35. COPY --from=make-plugin /ecs-plugin/dist/docker-ecs .
  36. FROM scratch AS cross
  37. COPY --from=make-cross /ecs-plugin/dist/* .
  38. FROM make-plugin AS test
  39. RUN --mount=type=cache,target=/root/.cache/go-build \
  40. --mount=type=cache,target=/go/pkg/mod \
  41. make -f builder.Makefile test
  42. FROM golangci/golangci-lint:${GOLANGCI_LINT_VERSION} AS lint-base
  43. FROM base AS lint
  44. COPY --from=lint-base /usr/bin/golangci-lint /usr/bin/golangci-lint
  45. RUN --mount=target=. \
  46. --mount=type=cache,target=/root/.cache/go-build \
  47. --mount=type=cache,target=/go/pkg/mod \
  48. --mount=type=cache,target=/root/.cache/golangci-lint \
  49. make -f builder.Makefile lint