[VOL-5026] - Build and (pre-) deploy repo:voltha-go

Makefile
--------
  o Refactor test and mod-* targets per voltha-openolt-adatpter/Makefile.
  o Logic moved into makefiles/analysis/{coverage,sca}.mk
  o Inline ( set -euo pipefail && cmd | tee log) in test-coverage.
  o Improve error handling, "cmd | tee" will silently mask shell exit status.
  o make test failing locally (docker image: cpu profile acces denied).
  o Local problem, send a job through jenkins for accurate status.

makefiles/
----------
  o Copy in library makefiles
  o Esp docker/include.mk

compose/*/*.yaml
----------------
  o Update copyright notice

db/*/*.go
rw_core/*/*.go
--------------
  o Run gofmt -s -w on source to fix latent linting problmes that fail jobs.

Change-Id: If7cd349822edd0e604ac4daf27d315f528c6bcf6
diff --git a/Makefile b/Makefile
index 4141898..88cc745 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 # -*- makefile -*-
 # -----------------------------------------------------------------------#
 # Copyright 2016-2023 Open Networking Foundation (ONF) and the ONF Contributors
-
+#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
@@ -15,6 +15,8 @@
 # limitations under the License.
 # -----------------------------------------------------------------------
 
+$(if $(DEBUG),$(warning ENTER))
+
 .DEFAULT_GOAL := help
 
 $(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
@@ -63,15 +65,6 @@
 DOCKER_BUILD_ARGS_LOCAL ?= ${DOCKER_BUILD_ARGS} \
 	--build-arg LOCAL_PROTOS=${LOCAL_PROTOS}
 
-# tool containers
-VOLTHA_TOOLS_VERSION ?= 2.4.0
-
-GO                = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app $(shell test -t 0 && echo "-it") -v gocache:/.cache -v gocache-${VOLTHA_TOOLS_VERSION}:/go/pkg voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golang go
-GO_JUNIT_REPORT   = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app -i voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-go-junit-report go-junit-report
-GOCOVER_COBERTURA = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app/src/github.com/opencord/voltha-go -i voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-gocover-cobertura gocover-cobertura
-GOLANGCI_LINT     = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app $(shell test -t 0 && echo "-it") -v gocache:/.cache -v gocache-${VOLTHA_TOOLS_VERSION}:/go/pkg voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golangci-lint golangci-lint
-HADOLINT          = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app $(shell test -t 0 && echo "-it") voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-hadolint hadolint
-
 .PHONY: docker-build local-protos local-lib-go help
 .DEFAULT_GOAL := help
 
@@ -79,7 +72,7 @@
 ## Local Development Helpers
 local-protos: ## Copies a local version of the voltha-protos dependency into the vendor directory
 ifdef LOCAL_PROTOS
-	rm -rf vendor/github.com/opencord/voltha-protos/v5/go
+	$(RM) -r vendor/github.com/opencord/voltha-protos/v5/go
 	mkdir -p vendor/github.com/opencord/voltha-protos/v5/go
 	cp -r ${LOCAL_PROTOS}/go/* vendor/github.com/opencord/voltha-protos/v5/go
 endif
@@ -87,7 +80,7 @@
 ## Local Development Helpers
 local-lib-go: ## Copies a local version of the voltha-lib-go dependency into the vendor directory
 ifdef LOCAL_LIB_GO
-	rm -rf vendor/github.com/opencord/voltha-lib-go/v7/pkg
+	$(RM) -r vendor/github.com/opencord/voltha-lib-go/v7/pkg
 	mkdir -p vendor/github.com/opencord/voltha-lib-go/v7/pkg
 	cp -r ${LOCAL_LIB_GO}/pkg/* vendor/github.com/opencord/voltha-lib-go/v7/pkg/
 endif
@@ -102,10 +95,9 @@
 docker-build-args := $(null)# comment line for debug mode
 
 docker-build: local-protos local-lib-go ## Build core docker image (set BUILD_PROFILED=true to also build the profiled image)
-	@echo "======================================================================="
-	@echo " ** TARGET: $@"
-	@echo "======================================================================="
-	$(MAKE) --no-print-directory init-test-results
+
+	$(call banner-enter,$@)
+	$(MAKE) --no-print-directory test-coverage-init
 
 	docker $(docker-build-args) build $(DOCKER_BUILD_ARGS) -t ${RWCORE_IMAGENAME}:${DOCKER_TAG} --target ${DOCKER_TARGET} -f docker/Dockerfile.rw_core .
 ifdef BUILD_PROFILED
@@ -117,11 +109,16 @@
 	docker build $(DOCKER_BUILD_ARGS) --target dev --build-arg GOLANG_IMAGE=golang:1.13.8-buster --build-arg CGO_PARAMETER="CGO_ENABLED=1" --build-arg DEPLOY_IMAGE=debian:buster-slim --build-arg EXTRA_GO_BUILD_TAGS="--race" -t ${RWCORE_IMAGENAME}:${DOCKER_TAG}-rd -f docker/Dockerfile.rw_core .
 endif
 
+	$(call banner-leave,$@)
+
 ## -----------------------------------------------------------------------
 ## Intent:
 ## -----------------------------------------------------------------------
 docker-push: ## Push the docker images to an external repository
-	docker push ${RWCORE_IMAGENAME}:${DOCKER_TAG}
+
+	$(call banner-enter,$@)
+
+docker push ${RWCORE_IMAGENAME}:${DOCKER_TAG}
 ifdef BUILD_PROFILED
 	docker push ${RWCORE_IMAGENAME}:${DOCKER_TAG}-profile
 endif
@@ -132,7 +129,14 @@
 	@if [ "`kind get clusters | grep voltha-$(TYPE)`" = '' ]; then echo "no voltha-$(TYPE) cluster found" && exit 1; fi
 	kind load docker-image ${RWCORE_IMAGENAME}:${DOCKER_TAG} --name=voltha-$(TYPE) --nodes $(shell kubectl get nodes --template='{{range .items}}{{.metadata.name}},{{end}}' | rev | cut -c 2- | rev)
 
+	$(call banner-leave,$@)
+
+## -----------------------------------------------------------------------
 ## lint and unit tests
+## -----------------------------------------------------------------------
+
+# [TODO]
+#   o Merge lint-* targets with repo:openolt-adapter/Makefile
 
 lint-dockerfile: ## Perform static analysis on Dockerfile
 	@echo "Running Dockerfile lint check..."
@@ -146,10 +150,8 @@
 	@git status > /dev/null
 	@git diff-index --quiet HEAD -- go.mod go.sum vendor || (echo "ERROR: Staged or modified files must be committed before running this test" && git status -- go.mod go.sum vendor && exit 1)
 	@[[ `git ls-files --exclude-standard --others go.mod go.sum vendor` == "" ]] || (echo "ERROR: Untracked files must be cleaned up before running this test" && git status -- go.mod go.sum vendor && exit 1)
-	${GO} mod tidy
 
-        # This command is destructive, vendor/ removed
-	${GO} mod vendor
+	$(MAKE) mod-update
 
 	@git status > /dev/null
 	@git diff-index --quiet HEAD -- go.mod go.sum vendor || (echo "ERROR: Modified files detected after running go mod tidy / go mod vendor" && git status -- go.mod go.sum vendor && git checkout -- go.mod go.sum vendor && exit 1)
@@ -160,47 +162,63 @@
 ## -----------------------------------------------------------------------
 lint: lint-mod lint-dockerfile ## Run all lint targets
 
-sca: ## Runs static code analysis with the golangci-lint tool
-	@$(RM) -r ./sca-report
-	@mkdir -p ./sca-report
-	@echo "Running static code analysis..."
-	@${GOLANGCI_LINT} run --deadline=6m --out-format junit-xml ./... \
-	    | tee ./sca-report/sca-report.xml
-	@echo ""
-	@echo "Static code analysis OK"
+include $(MAKEDIR)/analysis/include.mk
 
 ## -----------------------------------------------------------------------
 ## -----------------------------------------------------------------------
 tests-dir      := ./tests/results
 tests-coverage := $(tests-dir)/go-test-coverage
 tests-results  := $(tests-dir)/go-test-results
-test: local-lib-go ## Run unit tests
-	$(MAKE) --no-print-directory init-test-results
-	$(HIDE)${GO} test -mod=vendor -v -coverprofile $(tests-coverage).out -covermode count ./... 2>&1 | tee $(tests-results).out ;\
-	RETURN=$$? ;\
-	${GO_JUNIT_REPORT} < $(tests-results).out > $(tests-results).xml ;\
-	${GOCOVER_COBERTURA} < $(tests-coverage).out > $(tests-coverage).xml ;\
-	exit $$RETURN
+
+test :: test-coverage ## Run unit tests
+test-coverage : local-lib-go
 
 clean :: distclean ## Removes any local filesystem artifacts generated by a build
 
 distclean sterile :: ## Removes any local filesystem artifacts generated by a build or test run
 	$(RM) -r ./sca-report
 
-mod-update: ## Update go mod files
-	${GO} mod tidy
-	${GO} mod vendor
-
 fmt: ## Formats the soure code to go best practice style
+#	gofmt -s -w $(PACKAGES)
 	@go fmt ${PACKAGES}
 
-## ---------------------------------------------------------------------------
-## Intent: Prep work, test -coverprofile fails w/o a file on disk ?!?
-## ---------------------------------------------------------------------------
-init-test-results:
-	@$(RM) -r tests/results
-	@mkdir -p tests/results
-	@touch $(tests-coverage).out
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+.PHONY: mod-update
+mod-update: mod-tidy mod-vendor
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+.PHONY: mod-tidy
+mod-tidy:
+	$(call banner-enter,$@)
+	${GO} mod tidy
+	$(call banner-leave,$@)
+
+## -----------------------------------------------------------------------
+## Intent: Refresh vendor/ directory package source
+## -----------------------------------------------------------------------
+##   Note: This target is destructive, vendor/ directory will be removed.
+##   Todo: Update logic to checkout version on demand VS checkin a static
+##         copy of vendor/ sources then augment.  Logically removal of
+##         files under revision control is strange.
+## -----------------------------------------------------------------------
+.PHONY: mod-vendor
+mod-vendor:
+	$(call banner-enter,$@)
+	@$(if $(LOCAL_FIX_PERMS),chmod 777 .)
+	${GO} mod vendor
+	@$(if $(LOCAL_FIX_PERMS),chmod 755 .)
+	$(call banner-leave,$@)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help ::
+	@echo '[MOD UPDATE]'
+	@echo '  mod-update'
+	@echo '    LOCAL_FIX_PERMS=1    Hack to fix docker filesystem access problems'
+	@echo '  mod-tidy'
+	@echo '  mod-vendor'
 
 ## ---------------------------------------------------------------------------
 # For each makefile target, add ## <description> on the target line and it will be listed by 'make help'
@@ -212,11 +230,12 @@
 	@echo "  versions    Display version-by-tool used while building"
   ifdef VERBOSE
 	@echo
-	@echo "  init-test-results    Massage tests/results to fix coverage reporting"
   endif
 	@echo
 	@grep --no-filename '^[[:alpha:]_-]*:.* ##' $(MAKEFILE_LIST) \
 		| sort \
 		| awk 'BEGIN {FS=":.* ## "}; {printf "%-25s : %s\n", $$1, $$2};'
 
+$(if $(DEBUG),$(warning LEAVE))
+
 # [EOF]