@@ -18,7 +18,46 @@ ARG BUILDER_IMAGE
18
18
FROM ${BUILDER_IMAGE} as builder
19
19
WORKDIR /workspace
20
20
21
+ # Install dependencies for building Go from source
22
+ RUN apt-get update && apt-get install -y \
23
+ build-essential \
24
+ curl \
25
+ git \
26
+ ca-certificates \
27
+ && rm -rf /var/lib/apt/lists/*
28
+
29
+ # Download and build Go from source
30
+ ARG GO_VERSION
31
+
32
+ ARG TARGETARCH
33
+ RUN echo "Determining bootstrap Go version for ${GO_VERSION}" && \
34
+ BOOTSTRAP_GO_VERSION=$(curl -fsSL "https://raw.githubusercontent.com/golang/go/go${GO_VERSION}/src/make.bash" | grep "^bootgo=" | cut -d= -f2) && \
35
+ echo "Installing bootstrap Go version: ${BOOTSTRAP_GO_VERSION} (${TARGETARCH})" && \
36
+ GO_ARCH="${TARGETARCH}" ; \
37
+ if [ "${TARGETARCH}" = "arm" ]; then GO_ARCH="armv6l" ; fi && \
38
+ curl -fsSL "https://go.dev/dl/go${BOOTSTRAP_GO_VERSION}.linux-${GO_ARCH}.tar.gz" -o /tmp/go-bootstrap.tar.gz && \
39
+ tar -xzf /tmp/go-bootstrap.tar.gz -C /usr/local && \
40
+ mv /usr/local/go /usr/local/go-bootstrap && \
41
+ rm /tmp/go-bootstrap.tar.gz
42
+
43
+ # Download Go source
44
+ RUN echo "Downloading Go source version: ${GO_VERSION}" && \
45
+ curl -fsSL "https://go.dev/dl/go${GO_VERSION}.src.tar.gz" -o /tmp/go.src.tar.gz && \
46
+ tar -xzf /tmp/go.src.tar.gz -C /usr/local && \
47
+ rm /tmp/go.src.tar.gz
48
+
49
+ # Build Go from source with bootstrap
50
+ WORKDIR /usr/local/go/src
51
+ ENV GOROOT_BOOTSTRAP=/usr/local/go-bootstrap
52
+ RUN ./make.bash
53
+
54
+ # Set up Go environment
55
+ ENV PATH=/usr/local/go/bin:$PATH
56
+ ENV GOROOT=/usr/local/go
57
+ ENV GOPATH=/workspace/gopath
58
+
21
59
# Copy the sources
60
+ WORKDIR /workspace
22
61
COPY ./go-runner.go ./
23
62
COPY ./go.* ./
24
63
@@ -38,11 +77,8 @@ ENV GOPROXY="https://proxy.golang.org|direct"
38
77
39
78
# Build
40
79
ARG package=.
41
- ARG ARCH
42
80
43
81
ENV CGO_ENABLED=0
44
- ENV GOOS=linux
45
- ENV GOARCH=${ARCH}
46
82
47
83
RUN go env
48
84
@@ -54,5 +90,6 @@ FROM ${DISTROLESS_IMAGE}
54
90
LABEL maintainers="Kubernetes Authors"
55
91
LABEL description="go based runner for distroless scenarios"
56
92
WORKDIR /
93
+ COPY --from=builder /usr/local/go /usr/local/go
57
94
COPY --from=builder /workspace/go-runner .
58
95
ENTRYPOINT ["/go-runner" ]
0 commit comments