Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/build-image/Dockerfile
4048 views
# syntax=docker/dockerfile:1.4

# NOTE: This Dockerfile can only be built using BuildKit. BuildKit is used by
# default when running `docker buildx build` or when DOCKER_BUILDKIT=1 is set
# in environment variables.

#
# Dependencies
#
# We retrieve many of our dependencies by using various smaller containers.
#

# Dependency: golangci-lint (for linting)
FROM alpine as golangci
RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.51.2

# Dependency: docker (for building images)
FROM alpine:3.17 as docker
RUN apk add --no-cache docker-cli docker-cli-buildx

# Dependency: helm
FROM alpine:3.17 as helm
RUN apk add --no-cache helm

# Dependency: Go and Go dependencies
FROM golang:1.20.3-bullseye as golang

# Keep in sync with cmd/grafana-agent-operator/DEVELOPERS.md
ENV CONTROLLER_GEN_VERSION v0.9.2

RUN go install sigs.k8s.io/controller-tools/cmd/controller-gen@$CONTROLLER_GEN_VERSION \
 && go install github.com/mitchellh/[email protected]                                         \
 && go install github.com/tcnksm/[email protected]                                           \
 && go install github.com/grafana/tanka/cmd/[email protected]                                 \
 && go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/[email protected]                \
 && go install github.com/google/go-jsonnet/cmd/[email protected]                        \
 && go install github.com/golang/protobuf/[email protected]                         \
 && go install github.com/gogo/protobuf/[email protected]                    \
 && go install github.com/gogo/protobuf/gogoproto/[email protected]                           \
 && go install github.com/ahmetb/[email protected] \
 && go install github.com/norwoodj/helm-docs/cmd/[email protected]

#
# Final image
#

# rfratto/viceroy contains C cross compilers can be used for our Cgo
# dependencies.
FROM rfratto/viceroy:v0.3.0

# Install NodeJS LTS. This is needed because the most recent version of NodeJS
# from official Debian packages is v12, and we need LTS version v16.
#
# This must be done before installing other dependencies, otherwise nodesource
# will fail on installing NodeJS for all platforms instead of just our host
# platform.
RUN <<EOF
  apt-get update && apt-get install -qy curl
  curl -fsSL https://deb.nodesource.com/setup_16.x | bash -

  apt-get update && apt-get install -qy nodejs
  rm -rf /var/lib/apt/lists/*
EOF

# Install Yarn.
#
# See https://yarnpkg.com/getting-started/install#nodejs-1610
RUN corepack enable

# Install other dependencies.
#
# NOTE(rfratto): musl is installed so the Docker binaries from alpine work
# properly.
RUN apt-get update                                \
 && apt-get install -qy                           \
      build-essential file zip unzip gettext git  \
      musl libsystemd-dev nsis                    \
      rpm ruby ruby-dev rubygems                  \
      protobuf-compiler libprotobuf-dev yamllint  \
 && gem install --no-document fpm                 \
 && rm -rf /var/lib/apt/lists/*

COPY --from=golangci /bin/golangci-lint              /usr/local/bin
COPY --from=docker   /usr/bin/docker                 /usr/bin/docker
COPY --from=docker   /usr/libexec/docker/cli-plugins /usr/libexec/docker/cli-plugins
COPY --from=helm     /usr/bin/helm                   /usr/bin/helm
COPY --from=golang   /usr/local/go                   /usr/local/go
COPY --from=golang   /go/bin                         /go/bin

# Git tries to prevent misuse of repositories (CVE-2022-24765), but we don't
# care about this for build containers, where it's expected that the repository
# will be accessed by other users (the root user of the build container).
#
# Disable that safety check.
RUN git config --global --add safe.directory \*

# Set CC to viceroycc to ensure that the cross compilers are used for all C
# compilation.
ENV CC viceroycc

ENV GOPATH /go
ENV PATH /usr/local/go/bin:/go/bin:$PATH