VOL-4905 - Deploy new voltctl version.
makefile/consts.mk
------------------
o Import current library contsants makefile for additional defines.
Makefile
makefiles/release/include.mk
makefiles/release/release-build.mk
----------------------------------
o Use std set -euo pipefail, -u missing, fix undef vars as needed.
o Modularize, relocate release-* target logic into a named makefile.
o Minor clenaups helped docker volume mount for /app/release => localhost:{cwd}/release.
o Replace GO_SH inlined quoting with macro $(quote-single).
- Syntax did not play well with editor colorization.
- Magic trailing command quote appended to line continuation were ugly problems.
- todo: replace with $GO_SH $(call quoted,command-text-line-continuation)
Change-Id: I4338d3f895cf45b508a705051c92df938be71296
diff --git a/.gitignore b/.gitignore
index 692a994..acc0e85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,7 @@
tests
/voltctl
voltctl.cp
-release
+/release
*.log
sca-report
.idea/
diff --git a/Makefile b/Makefile
index 32e9283..a8c4483 100644
--- a/Makefile
+++ b/Makefile
@@ -22,12 +22,16 @@
TOP ?= .
MAKEDIR ?= $(TOP)/makefiles
+quoted = $(quote-single)$(1)$(quote-single)
+
$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
##--------------------##
##---] INCLUDES [---##
##--------------------##
include $(MAKEDIR)/include.mk
+include $(MAKEDIR)/release/include.mk
+
ifdef LOCAL_LINT
include $(MAKEDIR)/lint/golang/sca.mk
endif
@@ -35,7 +39,6 @@
## Are lint-style and lint-sanity targets defined in docker ?
help ::
@echo
- @echo "release - build binaries using cross compliing for the support architectures"
@echo "build - build the binary as a local executable"
@echo "install - build and install the binary into \$$GOPATH/bin"
@echo "run - runs voltctl using the command specified as \$$CMD"
@@ -48,7 +51,7 @@
@echo "check - runs targets that should be run before a commit"
@echo "clean - remove temporary and generated files"
-SHELL=bash -e -o pipefail
+# SHELL=bash -e -o pipefail
VERSION=$(shell cat ./VERSION)
GITCOMMIT=$(shell git rev-parse HEAD)
@@ -85,11 +88,14 @@
# 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_SH = 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 sh -c
-GO_JUNIT_REPORT = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/appecho -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 -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 -e GOGC=10 voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golangci-lint golangci-lint
+docker-run = docker run --rm --user $$(id -u):$$(id -g)# # Docker command stem
+docker-run-app = $(docker-run) -v ${CURDIR}:/app# # w/filesystem mount
+
+GO = $(docker-run-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_SH = $(docker-run-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 sh -c
+GO_JUNIT_REPORT = $(docker-run) -v ${CURDIR}:/appecho -i voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-go-junit-report go-junit-report
+GOCOVER_COBERTURA = $(docker-run-app) -i voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-gocover-cobertura gocover-cobertura
+GOLANGCI_LINT = $(docker-run-app) $(shell test -t 0 && echo "-it") -v gocache:/.cache -v gocache-${VOLTHA_TOOLS_VERSION}:/go/pkg -e GOGC=10 voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golangci-lint golangci-lint
## -----------------------------------------------------------------------
## Why is docker an implicit dependency for "make lint" (?)
@@ -107,33 +113,42 @@
GOLANGCI_LINT := golangci-lint
endif
-release:
- @mkdir -p $(RELEASE_DIR)
- @${GO_SH} ' \
- set -e -o pipefail; \
- for x in ${RELEASE_OS_ARCH}; do \
- OUT_PATH="$(RELEASE_DIR)/$(RELEASE_NAME)-$(subst -dev,_dev,$(VERSION))-$$x"; \
- echo "$$OUT_PATH"; \
- GOOS=$${x%-*} GOARCH=$${x#*-} go build -mod=vendor -v $(LDFLAGS) -o "$$OUT_PATH" cmd/voltctl/voltctl.go; \
- done'
+## -----------------------------------------------------------------------
+## Intent: Cross-compile binaries for release
+## -----------------------------------------------------------------------
+release: release-build
+## -----------------------------------------------------------------------
## Local Development Helpers
+## -----------------------------------------------------------------------
local-lib-go:
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
+## -----------------------------------------------------------------------
+## Itent:
+## -----------------------------------------------------------------------
build: local-lib-go
go build -mod=vendor $(LDFLAGS) cmd/voltctl/voltctl.go
+## -----------------------------------------------------------------------
+## Itent:
+## -----------------------------------------------------------------------
install:
go install -mod=vendor $(LDFLAGS) cmd/voltctl/voltctl.go
+## -----------------------------------------------------------------------
+## Itent:
+## -----------------------------------------------------------------------
run:
go run -mod=vendor $(LDFLAGS) cmd/voltctl/voltctl.go $(CMD)
+## -----------------------------------------------------------------------
+## Itent:
+## -----------------------------------------------------------------------
lint-mod:
@echo "Running dependency check..."
@$(GO) mod verify
@@ -176,25 +191,31 @@
${GOCOVER_COBERTURA} < ./tests/results/go-test-coverage.out > ./tests/results/go-test-coverage.xml ;\
exit $$RETURN
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
view-coverage:
go tool cover -html ./tests/results/go-test-coverage.out
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
check: lint sca test
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
mod-update:
$(GO) mod tidy
$(GO) mod vendor
## ---------------------------------------------------------
## ---------------------------------------------------------
-clean:
- $(RM) -r voltctl voltctl.cp release sca-report
+clean ::
+ $(RM) -r voltctl voltctl.cp sca-report
## ---------------------------------------------------------
## This belongs in a library makefile: makefiles/go/clean.mk
## ---------------------------------------------------------
go-clean-cache += -cache
-go-clean-cache += -fuzzcache
+# go-clean-cache += -fuzzcache
go-clean-cache += -modcache
go-clean-cache += -testcache
diff --git a/makefiles/consts.mk b/makefiles/consts.mk
index 8d8270d..5f04e23 100644
--- a/makefiles/consts.mk
+++ b/makefiles/consts.mk
@@ -1,6 +1,6 @@
# -*- makefile -*-
# -----------------------------------------------------------------------
-# Copyright 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# Copyright 2022-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.
@@ -14,18 +14,41 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-# SPDX-FileCopyrightText: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-FileCopyrightText: 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
# SPDX-License-Identifier: Apache-2.0
# -----------------------------------------------------------------------
+# ONF.makefile.version = 1.0
+# -----------------------------------------------------------------------
-null :=#
-space := $(null) $(null)
-dot ?= .
+$(if $(DEBUG),$(warning ENTER))
+# include makefiles/constants.mk
+export dot :=.
+export null :=#
+export space := $(null) $(null)
+export quote-single := $(null)"$(null)# colorization-closing-quote(")
+export quote-double := $(null)'$(null)# colorization-closing-quote(')
+
+# [DEBUG] make {target} HIDE=
HIDE ?= @
-# SHELL := bash -e -o pipefail
-env-clean = /usr/bin/env --ignore-environment
+env-clean ?= /usr/bin/env --ignore-environment
+xargs-n1 := xargs -0 -t -n1 --no-run-if-empty
+xargs-n1-clean := $(env-clean) $(xargs-n1)
+## -----------------------------------------------------------------------
+## Default shell:
+## o set -e enable error checking
+## o set -u report undefined errors
+## o set -o pipefail propogate shell pipeline failures.
+## -----------------------------------------------------------------------
+SHELL ?= /bin/bash
+have-shell-bash := $(filter bash,$(subst /,$(space),$(SHELL)))
+$(if $(have-shell-bash),$(null),\
+ $(eval export SHELL := bash -euo pipefail))
+
+export SHELL ?= bash -euo pipefail
+
+$(if $(DEBUG),$(warning LEAVE))
# [EOF]
diff --git a/makefiles/release/include.mk b/makefiles/release/include.mk
new file mode 100644
index 0000000..4ee1f1a
--- /dev/null
+++ b/makefiles/release/include.mk
@@ -0,0 +1,38 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2017-2023 Open Networking Foundation
+#
+# 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
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-FileCopyrightText: 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## Intent: Dispaly a help section for release targets
+## -----------------------------------------------------------------------
+help::
+ @echo
+ @echo '[RELEASE]'
+ @echo " release Build then publish binaries to github/release"
+
+##--------------------##
+##---] INCLUDES [---##
+##--------------------##
+include $(MAKEDIR)/release/release-build.mk
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/release/release-build.mk b/makefiles/release/release-build.mk
new file mode 100644
index 0000000..4a2bd3f
--- /dev/null
+++ b/makefiles/release/release-build.mk
@@ -0,0 +1,72 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2019-2023 Open Networking Foundation
+#
+# 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
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+## -----------------------------------------------------------------------
+## Intent:
+## o Generate volctl binaries in a docker container container
+## o Copy container:/apps/release to localhost:{pwd}/release
+## -----------------------------------------------------------------------
+## [TODO] Replace ${GO_SH} $(single-quote) .. with $(call quoted,cmd-text)
+## -----------------------------------------------------------------------
+release-build :
+
+ @echo
+ @echo "** -----------------------------------------------------------------------"
+ @echo "** $(MAKE): processing target [$@]"
+ @echo "** Sandbox: $(shell /bin/pwd)"
+ @echo "** -----------------------------------------------------------------------"
+
+ @echo -e "\n** golang attributes"
+ $(HIDE)${GO_SH} $(call quoted,which$(space)-a$(space)go)
+ $(HIDE)${GO_SH} $(call quoted,go$(space)version)
+
+ @echo -e "\n** Create filesystem target for docker volume: $(RELEASE_DIR)"
+ $(RM) -r "./$(RELEASE_DIR)"
+ mkdir -vp "$(RELEASE_DIR)"
+
+ @echo
+ @echo '** Docker builds bins into mounted filesystem:'
+ @echo '** container:/app/relase'
+ @echo '** localhost:{pwd}/release'
+ @${GO_SH} $(single-quote) \
+ set -e -o pipefail; \
+ for x in ${RELEASE_OS_ARCH}; do \
+ OUT_PATH="$(RELEASE_DIR)/$(RELEASE_NAME)-$(subst -dev,_dev,$(VERSION))-$$x"; \
+ echo "$$OUT_PATH"; \
+ GOOS=$${x%-*} GOARCH=$${x#*-} go build -mod=vendor -v $(LDFLAGS) -o "$$OUT_PATH" cmd/voltctl/voltctl.go; \
+ done \
+$(single-quote)
+
+ @echo
+ @echo '** Post-build, files to release'
+ $(HIDE)find "$(RELEASE_DIR)" ! -type d -print
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+clean ::
+ $(RM) -r "./$(RELEASE_DIR)"
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help ::
+ @echo ' release-build Cross-compile binaries into a docker mounted filesystem'
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]