ARG LINUX_DIST
ARG REGISTRY
FROM ${REGISTRY}/devtools/${LINUX_DIST}/base:latest

# Any ARGs above that need to be used again must be repeated here; that's on purpose.
ARG BUILD_DATE
ARG COMMIT
ARG GOLANG_VERSION
ARG GOLANG_SRC_SHA256
ARG GOLANG_SRC_URL
ARG LINUX_DIST
ARG GOLANGCI_LINT_VERSION

ENV GOPRIVATE=*
ENV GO111MODULE=on
ENV GOPATH=/go
ENV PATH=/bin:${GOPATH}/bin:/usr/local/go/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin

# Build-time metadata as defined at https://github.com/opencontainers/image-spec/blob/master/annotations.md
LABEL org.opencontainers.image.created="${BUILD_DATE}" \
      org.opencontainers.image.title="${LINUX_DIST}/${GOLANG_VERSION}/amd64" \
      org.opencontainers.image.description="sha256: ${GOLANG_SRC_SHA256}" \
      org.opencontainers.image.url="https://git.xarth.tv/awsi/go-docker-builder" \
      org.opencontainers.image.revision="${COMMIT}" \
      org.opencontainers.image.source="${GOLANG_SRC_URL}" \
      org.opencontainers.image.architecture="${LINUX_DIST}/amd64" \
      org.opencontainers.image.version="${GOLANG_VERSION}"

# Download Go, check SHA, unpack it, and delete archive.
# Download a few tools as well. The 'go get's are probably not super useful,
# but provide examples for how to install tools by version.
RUN curl -skSfLo gorelease.tar.gz "${GOLANG_SRC_URL}" && \
  echo "${GOLANG_SRC_SHA256} gorelease.tar.gz" | sha256sum --check \
  && tar -C /usr/local -xzf gorelease.tar.gz && \
  go get -u golang.org/x/tools/cmd/goimports@latest && \
  go get -u golang.org/x/tools/cmd/gorename@latest && \
  go get -u github.com/sqs/goreturns@latest && \
  chmod -R a+rw $(go env GOPATH) && \
  rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* gorelease.tar.gz && \
  curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | \
    sh -s -- -b $(go env GOPATH)/bin ${GOLANGCI_LINT_VERSION}
