# 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