@@ -18,7 +18,46 @@ ARG BUILDER_IMAGE
1818FROM  ${BUILDER_IMAGE} as builder
1919WORKDIR  /workspace
2020
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+ 
2159#  Copy the sources
60+ WORKDIR  /workspace
2261COPY  ./go-runner.go ./
2362COPY  ./go.* ./
2463
@@ -38,11 +77,8 @@ ENV GOPROXY="https://proxy.golang.org|direct"
3877
3978#  Build
4079ARG  package=.
41- ARG  ARCH
4280
4381ENV  CGO_ENABLED=0
44- ENV  GOOS=linux
45- ENV  GOARCH=${ARCH}
4682
4783RUN  go env
4884
@@ -54,5 +90,6 @@ FROM ${DISTROLESS_IMAGE}
5490LABEL  maintainers="Kubernetes Authors" 
5591LABEL  description="go based runner for distroless scenarios" 
5692WORKDIR  /
93+ COPY  --from=builder /usr/local/go /usr/local/go
5794COPY  --from=builder /workspace/go-runner .
5895ENTRYPOINT  ["/go-runner" ]
0 commit comments