From b67ff9059bfad6975ff7efa1b0d100352ea09a09 Mon Sep 17 00:00:00 2001
From: Neil-Jocelyn Schark <neil.schark@h-da.de>
Date: Thu, 27 Jun 2024 14:08:44 +0000
Subject: [PATCH] Build statically linked binaries wherever possible

See merge request danet/gosdn!932
---
 Makefile                                          |  2 +-
 applications/venv-manager/venv-manager.Dockerfile | 13 +++----------
 controller/Dockerfile.debug                       |  2 +-
 csbi/Dockerfile.exec                              |  2 +-
 csbi/resources/Dockerfile                         |  2 +-
 makefiles/build/Makefile                          |  6 +++---
 6 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index cbd58775a..0a27ad738 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ GOBIN := $(GOSDN_PRG)
 SCRIPTS_DIR := /scripts
 MAKEFILE_SUBDIR := ./makefiles
 
-GOCMD=go
+GOCMD=CGO_ENABLED=0 go
 GOBUILD=$(GOCMD) build
 GOCLEAN=$(GOCMD) clean -cache -fuzzcache -testcache -modcache
 BUILD_ARTIFACTS_PATH=artifacts
diff --git a/applications/venv-manager/venv-manager.Dockerfile b/applications/venv-manager/venv-manager.Dockerfile
index 30a844ed2..33df4b0a7 100644
--- a/applications/venv-manager/venv-manager.Dockerfile
+++ b/applications/venv-manager/venv-manager.Dockerfile
@@ -6,18 +6,11 @@ FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-bookworm AS builder
 
 WORKDIR /gosdn
 
-COPY go.* ./
-RUN go mod download
-
-COPY ./models/generated/openconfig ./models/generated/openconfig
-COPY ./api ./api
-COPY ./controller ./controller
-COPY applications/venv-manager/ applications/venv-manager/
-
-RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o venv-manager applications/venv-manager/main.go
+COPY . .
 
+RUN make build-venv-manager
 
 FROM ${GITLAB_PROXY}ubuntu:22.04
-COPY --from=builder /gosdn/venv-manager /venv-manager
+COPY --from=builder /gosdn/artifacts/venv-manager /venv-manager
 
 ENTRYPOINT ["/venv-manager"]
diff --git a/controller/Dockerfile.debug b/controller/Dockerfile.debug
index 605fb0925..1560b16ea 100644
--- a/controller/Dockerfile.debug
+++ b/controller/Dockerfile.debug
@@ -12,7 +12,7 @@ COPY go.sum .
 RUN go mod download
 COPY . .
 RUN --mount=type=cache,target=/root/.cache/go-build \
-GOOS=linux go build -o gosdn ./cmd/gosdn
+GOOS=linux CGO_ENABLED=0 go build -o gosdn ./cmd/gosdn
 
 # Get Delve from a GOPATH not from a Go Modules project
 WORKDIR /go/src/
diff --git a/csbi/Dockerfile.exec b/csbi/Dockerfile.exec
index c0b3f6fb3..f750a8792 100644
--- a/csbi/Dockerfile.exec
+++ b/csbi/Dockerfile.exec
@@ -11,7 +11,7 @@ RUN go mod download
 FROM installer as builder
 COPY . .
 RUN --mount=type=cache,target=/root/.cache/go-build \
-GOOS=linux go build -o executor ./cmd/executor/executor.go
+GOOS=linux CGO_ENABLED=0 go build -o executor ./cmd/executor/executor.go
 
 FROM alpine
 COPY --from=builder /build/executor .
diff --git a/csbi/resources/Dockerfile b/csbi/resources/Dockerfile
index 169db470c..ace1399e4 100644
--- a/csbi/resources/Dockerfile
+++ b/csbi/resources/Dockerfile
@@ -11,7 +11,7 @@ COPY go.sum .
 FROM installer AS builder
 RUN go mod tidy
 COPY . .
-RUN GOOS=linux go build -o csbi
+RUN CGO_ENABLED=0 GOOS=linux go build -o csbi
 
 FROM alpine
 COPY --from=builder /src/csbi/csbi .
diff --git a/makefiles/build/Makefile b/makefiles/build/Makefile
index cf633e0c8..6ffa72f25 100644
--- a/makefiles/build/Makefile
+++ b/makefiles/build/Makefile
@@ -13,13 +13,13 @@ build-gosdn: pre
 	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn
 
 build-gosdnc: pre
-	CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/gosdnc ./cli/
+	$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/gosdnc ./cli/
 
 build-orchestrator: pre
-	CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/
+	$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/
 
 build-plugin-registry: pre
-	CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/plugin-registry ./plugin-registry/
+	$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/plugin-registry ./plugin-registry/
 
 build-venv-manager: pre
 	$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/venv-manager ./applications/venv-manager
-- 
GitLab