forked from llm-d/llm-d-router
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.builder
More file actions
79 lines (65 loc) · 3.62 KB
/
Copy pathDockerfile.builder
File metadata and controls
79 lines (65 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
FROM golang:1.25.11
RUN mkdir /app
WORKDIR /app
ARG TYPOS_VERSION=v1.34.0
ARG KIND_VERSION=v0.27.0
ARG GOLANGCI_LINT_VERSION=v2.8.0
ARG KUBECTL_VERSION=v1.35.3
ARG KUSTOMIZE_VERSION=v5.6.0
ARG DOCKER_VERSION=29.3.0
ARG DOCKER_BUILDX_VERSION=v0.32.1
ARG ENVTEST_VERSION=release-0.19
ARG ENVTEST_K8S_VERSION=1.31.0
ARG GOVULNCHECK_VERSION=v1.3.0
RUN apt-get update && apt-get install -y podman && apt-get clean all
# Install docker CLI and buildx plugin
RUN ARCH=$(uname -m) && \
GOARCH=$(echo ${ARCH} | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
curl -sSfL https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz | \
tar -xz --strip-components=1 -C /usr/local/bin docker/docker && \
mkdir -p /usr/local/lib/docker/cli-plugins && \
curl -sSfL -o /usr/local/lib/docker/cli-plugins/docker-buildx \
"https://github.com/docker/buildx/releases/download/${DOCKER_BUILDX_VERSION}/buildx-${DOCKER_BUILDX_VERSION}.linux-${GOARCH}" && \
chmod +x /usr/local/lib/docker/cli-plugins/docker-buildx
# Install golangci-lint
RUN GOARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
curl -sSfL https://github.com/golangci/golangci-lint/releases/download/${GOLANGCI_LINT_VERSION}/golangci-lint-${GOLANGCI_LINT_VERSION#v}-linux-${GOARCH}.tar.gz | \
tar -xz --strip-components=1 -C /usr/local/bin golangci-lint-${GOLANGCI_LINT_VERSION#v}-linux-${GOARCH}/golangci-lint
# Install kubectl
RUN GOARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
curl -sSfL -o /usr/local/bin/kubectl "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${GOARCH}/kubectl" && \
chmod +x /usr/local/bin/kubectl
# Install kustomize
RUN GOARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
curl -sSfL https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_${GOARCH}.tar.gz | \
tar -xz -C /usr/local/bin
# Install kind
RUN GOARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
curl -sSfL -o /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-linux-${GOARCH} && \
chmod +x /usr/local/bin/kind
# Install typos
RUN curl -sSfL https://github.com/crate-ci/typos/releases/download/${TYPOS_VERSION}/typos-${TYPOS_VERSION}-$(uname -m)-unknown-linux-musl.tar.gz | tar -xz -C /usr/local/bin
# Install setup-envtest and pre-fetch kube test binaries so hermetic integration
# tests don't need network at runtime. ENVTEST_ASSETS_DIR is exported so the
# Makefile target can resolve KUBEBUILDER_ASSETS without re-running setup-envtest.
ENV ENVTEST_ASSETS_DIR=/usr/local/kubebuilder
RUN GOBIN=/usr/local/bin go install sigs.k8s.io/controller-runtime/tools/setup-envtest@${ENVTEST_VERSION} && \
setup-envtest use ${ENVTEST_K8S_VERSION} --bin-dir ${ENVTEST_ASSETS_DIR} && \
chmod -R a+rx ${ENVTEST_ASSETS_DIR}
ENV ENVTEST_K8S_VERSION=${ENVTEST_K8S_VERSION}
# Install govulncheck. Build-time install ensures runtime invocations under
# --userns=keep-id / -u <uid> can use the binary without writing to root-owned
# /usr/local/bin.
RUN GOBIN=/usr/local/bin go install golang.org/x/vuln/cmd/govulncheck@${GOVULNCHECK_VERSION}
# Go caches are mounted as volumes at runtime for persistence across image rebuilds.
# Directories are created with open permissions so non-root users (docker -u) can write.
ENV GOMODCACHE=/go/pkg/mod
ENV GOCACHE=/go/cache
RUN mkdir -p /go/pkg/mod /go/cache && chmod -R 777 /go
RUN { \
echo '#!/bin/sh'; \
echo 'export HOME=/tmp'; \
echo 'exec "$@"'; \
} > /entrypoint.sh && \
chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]