@@ -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
0 commit comments