From 508d527393c7d79e43e770c542397e0ff52da9e3 Mon Sep 17 00:00:00 2001
From: Fabian Seidl <fabian.seidl@h-da.de>
Date: Mon, 21 Aug 2023 07:55:38 +0000
Subject: [PATCH] Resolve "Controller/Makefile uses older versions than the one
 in the top level"

See merge request danet/gosdn!513
---
 Makefile                     | 153 +++--------------------------------
 controller/Makefile          |  14 ++--
 makefiles/build/Makefile     |  37 +++++++++
 makefiles/ci/Makefile        |   5 ++
 makefiles/clab/Makefile      |  31 +++++++
 makefiles/container/Makefile |  24 ++++++
 makefiles/generate/Makefile  |  44 ++++++++++
 7 files changed, 159 insertions(+), 149 deletions(-)
 create mode 100644 makefiles/build/Makefile
 create mode 100644 makefiles/ci/Makefile
 create mode 100644 makefiles/clab/Makefile
 create mode 100644 makefiles/container/Makefile
 create mode 100644 makefiles/generate/Makefile

diff --git a/Makefile b/Makefile
index b8149d287..515245e72 100644
--- a/Makefile
+++ b/Makefile
@@ -7,6 +7,7 @@ GOSDN_PRG := $(MAKEFILE_DIR)$(TOOLS_DIR)
 GOPATH := $(~/go)
 GOBIN := $(GOSDN_PRG)
 SCRIPTS_DIR := /scripts
+MAKEFILE_SUBDIR := ./makefiles
 
 GOCMD=go
 GOBUILD=$(GOCMD) build
@@ -22,6 +23,14 @@ MOCKERY_VERSION=v2.20.0
 YGOT_GENERATOR_VERSION=v0.27.0
 YGOT_GENERATOR_GENERATOR_VERSION=v0.0.4
 
+include $(MAKEFILE_SUBDIR)/build/Makefile
+include $(MAKEFILE_SUBDIR)/ci/Makefile
+include $(MAKEFILE_SUBDIR)/clab/Makefile
+include $(MAKEFILE_SUBDIR)/container/Makefile
+include $(MAKEFILE_SUBDIR)/generate/Makefile
+
+.DEFAULT_GOAL := all
+
 all: build
 
 pre:
@@ -43,162 +52,18 @@ install-tools:
 	go install github.com/andresterba/go-ygot-generator-generator@$(YGOT_GENERATOR_GENERATOR_VERSION)
 	@echo Finished installing development tooling
 
-ci-install-tools:
-	go install gotest.tools/gotestsum@v1.7.0
-
-ci-lint: ci-install-tools
-	golangci-lint run --config .golangci.yml --out-format code-climate
-
 lint: install-tools
 	./$(TOOLS_DIR)/golangci-lint run --config .golangci.yml | jq
 
 lint-fix: install-tools
 	./$(TOOLS_DIR)/golangci-lint run --config .golangci.yml --fix | jq
 
-generate-controller-mocks: install-tools
-	./$(TOOLS_DIR)/mockery --all --output './controller/mocks' --dir './controller/interfaces/'
-
-generate-yang-models: install-tools
-	cd models/generated/openconfig &&\
-	../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml openconfig.go &&\
-	go generate &&\
-	cat additions.patch >> yang.go
-	cd models/generated/arista &&\
-	../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml arista.go &&\
-	go generate &&\
-	cat additions.patch >> yang.go
-
-generate-csbi-yang-models: install-tools
-	cd csbi/resources &&\
-	../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\
-	go generate
-
 build: pre build-gosdn build-gosdnc build-plugin-registry build-venv-manager build-arista-routing-engine-app build-hostname-checker-app build-basic-interface-monitoring-app
 
-build-plugins:
-	for d in ./plugins/examples/*/ ; do\
-		d="$${d%*/}";\
-	    d="$${d##*/}";\
-		rm plugin-registry/plugins/$$d/$(PLUGIN_NAME);\
-		$(GOBUILD) -o plugin-registry/plugins/$$d/plugin ./plugins/examples/$$d/cmd;\
-		cp plugins/examples/$$d/plugin.yaml plugin-registry/plugins/$$d/;\
-		zip -r -j plugin-registry/plugins/$$d/$(PLUGIN_NAME) plugin-registry/plugins/$$d/;\
-		rm plugin-registry/plugins/$$d/plugin;\
-	done
-
-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/
-
-build-orchestrator: pre
-	CGO_ENABLED=0 $(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/
-
-build-venv-manager: pre
-	$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/venv-manager ./applications/venv-manager
-
-build-arista-routing-engine-app: pre
-	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/arista-routing-engine ./applications/arista-routing-engine
-
-build-hostname-checker-app: pre
-	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/hostname-checker ./applications/hostname-checker
-
-build-basic-interface-monitoring-app: pre
-	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/basic-interface-monitoring ./applications/basic-interface-monitoring
-
-build-ws-events-app: pre
-	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/ws-events ./applications/ws-events
-
 containerize-all: containerize-gosdn containerize-gosdnc containerize-plugin-registry
 
-containerize-gosdn:
-	docker buildx build --rm -t gosdn --load -f controller/controller.Dockerfile .
-
-containerize-gosdnc:
-	docker buildx build --rm -t gosdnc --load -f cli/cli.Dockerfile .
-
-containerize-venv-manager:
-	docker buildx build --rm -t venv-manager --load -f applications/venv-manager/venv-manager.Dockerfile .
-
-containerize-orchestrator:
-	docker buildx build --rm -t orchestrator --load -f csbi/csbi.Dockerfile .
-
-containerize-plugin-registry:
-	docker buildx build --rm -t plugin-registry --load -f plugin-registry/plugin-registry.Dockerfile .
-
-containerize-arista-routing-engine-app:
-	docker buildx build --rm -t arista-routing-engine-app -f applications/arista-routing-engine/arista-routing-engine.Dockerfile .
-
-containerize-hostname-checker-app:
-	docker buildx build --rm -t hostname-checker-app -f applications/hostname-checker/hostname-checker.Dockerfile .
-
-containerize-ws-events-app:
-	docker buildx build --rm -t ws-events-app -f applications/ws-events/ws-events.Dockerfile .
-
-containerlab-start: create-clab-dir containerize-all generate-all-certs
-	cd $(CLAB_DIR) &&\
-	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
-
-containerlab-start-reconfigure: create-clab-dir containerize-all generate-all-certs
-	cd $(CLAB_DIR) &&\
-	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml --reconfigure
-
-containerlab-stop: create-clab-dir
-	cd $(CLAB_DIR) &&\
-	sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
-
-containerlab-slim-start: create-clab-dir containerize-all generate-all-certs
-	cd $(CLAB_DIR) &&\
-	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml
-
-containerlab-slim-start-reconfigure: create-clab-dir containerize-all generate-all-certs
-	cd $(CLAB_DIR) &&\
-	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml --reconfigure
-
-containerlab-slim-start-configured: containerlab-slim-start
-	.$(SCRIPTS_DIR)/setup-clab-slim.sh -s true
-
-containerlab-slim-stop: create-clab-dir
-	cd $(CLAB_DIR) &&\
-	sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml
-
-containerlab-graph: create-clab-dir
-	cd $(CLAB_DIR) &&\
-	sudo containerlab graph --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
-
 generate-all-certs: pre generate-root-ca generate-gosdn-certs generate-gnmi-target-certs
 
-generate-root-ca: pre
-	if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl" ]; then \
-		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl; \
-		openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=ROOT_CA' \
-		-keyout $(BUILD_ARTIFACTS_PATH)/ssl/ca.key -out $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt; \
-	fi
-
-generate-gosdn-certs: pre
-	if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gosdn" ]; then \
-		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private; \
-		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs; \
-		openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=GOSDN' \
-		-CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \
-		-keyout $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private/gosdn-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs/gosdn-selfsigned.crt; \
-		cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/ca.crt; \
-	fi
-
-generate-gnmi-target-certs: pre generate-root-ca
-	if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target" ]; then \
-		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private; \
-		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs; \
-		openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=TARGET' \
-		-CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \
-		-keyout $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private/gnmi-target-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs/gnmi-target-selfsigned.crt; \
-		cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/ca.crt; \
-	fi
-
 shell-gosdn:
 	docker exec -it clab-gosdn_csbi_arista_base-gosdn bash
 
diff --git a/controller/Makefile b/controller/Makefile
index 0c94ce65b..d558d5c61 100644
--- a/controller/Makefile
+++ b/controller/Makefile
@@ -9,19 +9,23 @@ GOBUILD=$(GOCMD) build
 GOCLEAN=$(GOCMD) clean
 BINARY_NAME=gosdn
 
+# Tool Vesions
+GOTESTSUM_VERSION=v1.8.1
+MOCKERY_VERSION=v2.20.0
+GOCOVER_COBERTURA=v1.2.0
+
 all: build
 
 install-tools:
 	@echo Install development tooling
 	mkdir -p $(GOSDN_PRG)
-	go install gotest.tools/gotestsum@v1.7.0
-	go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2
-	go install github.com/vektra/mockery/v2@v2.14.0
+	go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION)
+	go install github.com/vektra/mockery/v2@$(MOCKERY_VERSION)
 	@echo Finished installing development tooling
 
 ci-install-tools:
-	go install gotest.tools/gotestsum@v1.7.0
-	go install github.com/boumenot/gocover-cobertura@v1.2.0
+	go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION)
+	go install github.com/boumenot/gocover-cobertura@$(GOCOVER_COBERTURA)
 
 build:
 	$(GOBUILD) -o $(BINARY_NAME) ./cmd/gosdn
diff --git a/makefiles/build/Makefile b/makefiles/build/Makefile
new file mode 100644
index 000000000..cf633e0c8
--- /dev/null
+++ b/makefiles/build/Makefile
@@ -0,0 +1,37 @@
+build-plugins:
+	for d in ./plugins/examples/*/ ; do\
+		d="$${d%*/}";\
+	    d="$${d##*/}";\
+		rm plugin-registry/plugins/$$d/$(PLUGIN_NAME);\
+		$(GOBUILD) -o plugin-registry/plugins/$$d/plugin ./plugins/examples/$$d/cmd;\
+		cp plugins/examples/$$d/plugin.yaml plugin-registry/plugins/$$d/;\
+		zip -r -j plugin-registry/plugins/$$d/$(PLUGIN_NAME) plugin-registry/plugins/$$d/;\
+		rm plugin-registry/plugins/$$d/plugin;\
+	done
+
+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/
+
+build-orchestrator: pre
+	CGO_ENABLED=0 $(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/
+
+build-venv-manager: pre
+	$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/venv-manager ./applications/venv-manager
+
+build-arista-routing-engine-app: pre
+	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/arista-routing-engine ./applications/arista-routing-engine
+
+build-hostname-checker-app: pre
+	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/hostname-checker ./applications/hostname-checker
+
+build-basic-interface-monitoring-app: pre
+	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/basic-interface-monitoring ./applications/basic-interface-monitoring
+
+build-ws-events-app: pre
+	$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/ws-events ./applications/ws-events
diff --git a/makefiles/ci/Makefile b/makefiles/ci/Makefile
new file mode 100644
index 000000000..dae623fa2
--- /dev/null
+++ b/makefiles/ci/Makefile
@@ -0,0 +1,5 @@
+ci-install-tools:
+	go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION)
+
+ci-lint: ci-install-tools
+	golangci-lint run --config .golangci.yml --out-format code-climate
diff --git a/makefiles/clab/Makefile b/makefiles/clab/Makefile
new file mode 100644
index 000000000..b5a7f3957
--- /dev/null
+++ b/makefiles/clab/Makefile
@@ -0,0 +1,31 @@
+
+containerlab-start: create-clab-dir containerize-all generate-all-certs
+	cd $(CLAB_DIR) &&\
+	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
+
+containerlab-start-reconfigure: create-clab-dir containerize-all generate-all-certs
+	cd $(CLAB_DIR) &&\
+	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml --reconfigure
+
+containerlab-stop: create-clab-dir
+	cd $(CLAB_DIR) &&\
+	sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
+
+containerlab-slim-start: create-clab-dir containerize-all generate-all-certs
+	cd $(CLAB_DIR) &&\
+	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml
+
+containerlab-slim-start-reconfigure: create-clab-dir containerize-all generate-all-certs
+	cd $(CLAB_DIR) &&\
+	sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml --reconfigure
+
+containerlab-slim-start-configured: containerlab-slim-start
+	.$(SCRIPTS_DIR)/setup-clab-slim.sh -s true
+
+containerlab-slim-stop: create-clab-dir
+	cd $(CLAB_DIR) &&\
+	sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml
+
+containerlab-graph: create-clab-dir
+	cd $(CLAB_DIR) &&\
+	sudo containerlab graph --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
diff --git a/makefiles/container/Makefile b/makefiles/container/Makefile
new file mode 100644
index 000000000..34b1e740e
--- /dev/null
+++ b/makefiles/container/Makefile
@@ -0,0 +1,24 @@
+
+containerize-gosdn:
+	docker buildx build --rm -t gosdn --load -f controller/controller.Dockerfile .
+
+containerize-gosdnc:
+	docker buildx build --rm -t gosdnc --load -f cli/cli.Dockerfile .
+
+containerize-venv-manager:
+	docker buildx build --rm -t venv-manager --load -f applications/venv-manager/venv-manager.Dockerfile .
+
+containerize-orchestrator:
+	docker buildx build --rm -t orchestrator --load -f csbi/csbi.Dockerfile .
+
+containerize-plugin-registry:
+	docker buildx build --rm -t plugin-registry --load -f plugin-registry/plugin-registry.Dockerfile .
+
+containerize-arista-routing-engine-app:
+	docker buildx build --rm -t arista-routing-engine-app -f applications/arista-routing-engine/arista-routing-engine.Dockerfile .
+
+containerize-hostname-checker-app:
+	docker buildx build --rm -t hostname-checker-app -f applications/hostname-checker/hostname-checker.Dockerfile .
+
+containerize-ws-events-app:
+	docker buildx build --rm -t ws-events-app -f applications/ws-events/ws-events.Dockerfile .
diff --git a/makefiles/generate/Makefile b/makefiles/generate/Makefile
new file mode 100644
index 000000000..c7b383473
--- /dev/null
+++ b/makefiles/generate/Makefile
@@ -0,0 +1,44 @@
+generate-controller-mocks: install-tools
+	./$(TOOLS_DIR)/mockery --all --output './controller/mocks' --dir './controller/interfaces/'
+
+generate-yang-models: install-tools
+	cd models/generated/openconfig &&\
+	../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml openconfig.go &&\
+	go generate &&\
+	cat additions.patch >> yang.go
+	cd models/generated/arista &&\
+	../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml arista.go &&\
+	go generate &&\
+	cat additions.patch >> yang.go
+
+generate-csbi-yang-models: install-tools
+	cd csbi/resources &&\
+	../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\
+	go generate
+
+generate-root-ca: pre
+	if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl" ]; then \
+		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl; \
+		openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=ROOT_CA' \
+		-keyout $(BUILD_ARTIFACTS_PATH)/ssl/ca.key -out $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt; \
+	fi
+
+generate-gosdn-certs: pre
+	if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gosdn" ]; then \
+		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private; \
+		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs; \
+		openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=GOSDN' \
+		-CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \
+		-keyout $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private/gosdn-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs/gosdn-selfsigned.crt; \
+		cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/ca.crt; \
+	fi
+
+generate-gnmi-target-certs: pre generate-root-ca
+	if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target" ]; then \
+		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private; \
+		mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs; \
+		openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=TARGET' \
+		-CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \
+		-keyout $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private/gnmi-target-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs/gnmi-target-selfsigned.crt; \
+		cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/ca.crt; \
+	fi
-- 
GitLab