diff --git a/go-builder/Dockerfile b/go-builder/Dockerfile new file mode 100644 index 0000000..35ddaae --- /dev/null +++ b/go-builder/Dockerfile @@ -0,0 +1,18 @@ +ARG GO_VERSION=1.25 +FROM ghcr.io/fission/builder AS fission-builder +FROM golang:${GO_VERSION} + +ENV GOPATH=/usr +ENV GO111MODULE=on +ENV GOTOOLCHAIN=local + +WORKDIR ${GOPATH} + +COPY --from=fission-builder /builder /builder + +# Prebuild stdlib для -buildmode=plugin → бьём кэш в образе +# После этого go build -buildmode=plugin НЕ БУДЕТ перекомпилировать stdlib +RUN go install -buildmode=plugin std + +ADD build.sh /usr/local/bin/build +RUN chmod +x /usr/local/bin/build diff --git a/go-builder/build.sh b/go-builder/build.sh new file mode 100644 index 0000000..c904d36 --- /dev/null +++ b/go-builder/build.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -eux + +srcDir=${GOPATH}/src/$(basename ${SRC_PKG}) +trap "rm -rf ${srcDir}" EXIT + +version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; } + +if [ -d ${SRC_PKG} ]; then + echo "Building in directory ${srcDir}" + ln -sf ${SRC_PKG} ${srcDir} +elif [ -f ${SRC_PKG} ]; then + echo "Building file ${SRC_PKG} in ${srcDir}" + mkdir -p ${srcDir} + cp ${SRC_PKG} ${srcDir}/function.go +fi + +cd ${srcDir} + +if [ -f "go.mod" ]; then + go mod download +else + export GO111MODULE="on" + go mod init + go mod tidy +fi + +GOFLAGS="-buildmode=plugin" + +if [ -d "vendor" ] && version_ge ${GOLANG_VERSION} "1.12"; then + GOFLAGS="${GOFLAGS} -mod=vendor" +fi + +go build ${GOFLAGS} -o ${DEPLOY_PKG} .