blob: 1e52fea1bd15cbf0f8e27fa0c18f3a8eaaa37936 [file] [log] [blame]
Joey Armstrongb085c502023-01-17 13:56:24 -05001# -*- makefile -*-
2# -----------------------------------------------------------------------
Joey Armstrong9cdee9f2024-01-03 04:56:14 -05003# Copyright 2016-2024 Open Networking Foundation (ONF) and the ONF Contributors
Scott Baker2c1c4822019-10-16 11:02:41 -07004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
Joey Armstrongb085c502023-01-17 13:56:24 -050016# -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070017
Joey Armstrongb085c502023-01-17 13:56:24 -050018.DEFAULT_GOAL := help
19
20##-------------------##
21##---] GLOBALS [---##
22##-------------------##
Joey Armstrongb085c502023-01-17 13:56:24 -050023
24##--------------------##
25##---] INCLUDES [---##
26##--------------------##
Joey Armstrong7f8436c2023-07-09 20:23:27 -040027include config.mk
28include makefiles/include.mk
Scott Baker2c1c4822019-10-16 11:02:41 -070029
30# Variables
31VERSION ?= $(shell cat ./VERSION)
32
Joey Armstrongb085c502023-01-17 13:56:24 -050033## -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070034## Local Development Helpers
Joey Armstrongb085c502023-01-17 13:56:24 -050035## -----------------------------------------------------------------------
36.PHONY: local-protos
Scott Baker2c1c4822019-10-16 11:02:41 -070037local-protos:
38 @mkdir -p python/local_imports
39ifdef LOCAL_PROTOS
Joey Armstrong26245a32022-12-17 21:49:06 -050040 $(RM) -r vendor/github.com/opencord/voltha-protos
khenaidoo26721882021-08-11 17:42:52 -040041 mkdir -p vendor/github.com/opencord/voltha-protos/v5/go
42 cp -r ${LOCAL_PROTOS}/go/* vendor/github.com/opencord/voltha-protos/v5/go
Joey Armstrong26245a32022-12-17 21:49:06 -050043 $(RM) -r python/local_imports/voltha-protos
Scott Baker2c1c4822019-10-16 11:02:41 -070044 mkdir -p python/local_imports/voltha-protos/dist
Scott Bakerf1b096c2019-11-01 12:36:30 -070045 cp ${LOCAL_PROTOS}/dist/*.tar.gz python/local_imports/voltha-protos/dist/
Scott Baker2c1c4822019-10-16 11:02:41 -070046endif
47
Joey Armstrongb085c502023-01-17 13:56:24 -050048## -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070049## build the library
Joey Armstrongb085c502023-01-17 13:56:24 -050050## -----------------------------------------------------------------------
Scott Bakerf1b096c2019-11-01 12:36:30 -070051build: local-protos
Joey Armstrong7f8436c2023-07-09 20:23:27 -040052 $(call banner-enter,Target $@)
Kent Hagermanfac11d42020-01-28 12:18:55 -050053 ${GO} build -mod=vendor ./...
Joey Armstrong7f8436c2023-07-09 20:23:27 -040054 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -070055
Joey Armstrongb085c502023-01-17 13:56:24 -050056## -----------------------------------------------------------------------
57## -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070058lint-mod:
Joey Armstrong7f8436c2023-07-09 20:23:27 -040059 $(call banner-entry,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -070060 @echo "Running dependency check..."
Kent Hagermanfac11d42020-01-28 12:18:55 -050061 @${GO} mod verify
Scott Bakera36b4982019-11-26 08:09:23 -080062 @echo "Dependency check OK. Running vendor check..."
63 @git status > /dev/null
Kent Hagerman3da1fd02020-02-26 10:54:07 -050064 @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)
65 @[[ `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)
Joey Armstrong7f8436c2023-07-09 20:23:27 -040066
67 $(HIDE)$(MAKE) --no-print-directory mod-update
68
Scott Bakera36b4982019-11-26 08:09:23 -080069 @git status > /dev/null
Kent Hagerman3da1fd02020-02-26 10:54:07 -050070 @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)
71 @[[ `git ls-files --exclude-standard --others go.mod go.sum vendor` == "" ]] || (echo "ERROR: Untracked 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)
Scott Bakera36b4982019-11-26 08:09:23 -080072 @echo "Vendor check OK."
Joey Armstrong7f8436c2023-07-09 20:23:27 -040073 $(call banner-leave,Target $@)
74
75## -----------------------------------------------------------------------
76## -----------------------------------------------------------------------
77.PHONY: mod-update
Joey Armstrong074f64f2023-12-01 10:05:02 -050078mod-update: go-version mod-tidy mod-vendor
79
80## -----------------------------------------------------------------------
81## -----------------------------------------------------------------------
82.PHONY: go-version
83go-version :
84 $(call banner-enter,Target $@)
85 ${GO} version
86 $(call banner-leave,Target $@)
Joey Armstrong7f8436c2023-07-09 20:23:27 -040087
88## -----------------------------------------------------------------------
89## -----------------------------------------------------------------------
90.PHONY: mod-tidy
91mod-tidy :
92 $(call banner-enter,Target $@)
93 ${GO} mod tidy
94 $(call banner-leave,Target $@)
95
96## -----------------------------------------------------------------------
97## -----------------------------------------------------------------------
98.PHONY: mod-vendor
99mod-vendor : mod-tidy
100mod-vendor :
101 $(call banner-enter,Target $@)
102 $(if $(LOCAL_FIX_PERMS),chmod o+w $(CURDIR))
103 ${GO} mod vendor
104 $(if $(LOCAL_FIX_PERMS),chmod o-w $(CURDIR))
105 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700106
Joey Armstrongb085c502023-01-17 13:56:24 -0500107## -----------------------------------------------------------------------
108## -----------------------------------------------------------------------
Kent Hagerman3da1fd02020-02-26 10:54:07 -0500109lint: lint-mod
Scott Baker2c1c4822019-10-16 11:02:41 -0700110
Joey Armstrongb085c502023-01-17 13:56:24 -0500111## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400112## Coverage report: Static code analysis
Joey Armstrongb085c502023-01-17 13:56:24 -0500113## -----------------------------------------------------------------------
Kent Hagermanfac11d42020-01-28 12:18:55 -0500114sca:
Joey Armstrong26245a32022-12-17 21:49:06 -0500115 @$(RM) -r ./sca-report
Scott Baker2c1c4822019-10-16 11:02:41 -0700116 @mkdir -p ./sca-report
Kent Hagerman3da1fd02020-02-26 10:54:07 -0500117 @echo "Running static code analysis..."
118 @${GOLANGCI_LINT} run --deadline=4m --out-format junit-xml ./... | tee ./sca-report/sca-report.xml
119 @echo ""
120 @echo "Static code analysis OK"
Scott Baker2c1c4822019-10-16 11:02:41 -0700121
Joey Armstrongb085c502023-01-17 13:56:24 -0500122## -----------------------------------------------------------------------
123## -----------------------------------------------------------------------
Matteo Scandolod58eaef2020-03-30 12:30:02 -0700124test: local-protos
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400125
126 $(call banner-enter,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700127 @mkdir -p ./tests/results
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400128
129 # No stream redirects, exit with shell status
130 $(MAKE) test-go
131
132 # Redirect I/O, ignore shell exit status (for now)
133 $(MAKE) test-go-cover
134
135 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700136
Joey Armstrongb085c502023-01-17 13:56:24 -0500137## -----------------------------------------------------------------------
138## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400139.PHONY: test-go
140test-go :
141
142 $(call banner-enter,Target $@)
143 @echo "** Testing attempt #1: exit-with-error-status: enabled"
144 -$(GO) test -mod=vendor ./...
145 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700146
Joey Armstrongb085c502023-01-17 13:56:24 -0500147## -----------------------------------------------------------------------
148## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400149.PHONY: test-go-cover
Joey Armstrongfd77d5e2023-07-15 16:37:44 -0400150test-go-cover : gen-coverage-coverprofile gen-coverage-junit gen-coverage-cobertura
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400151
152## -----------------------------------------------------------------------
153## Intent: Generate coverprofile data
154## -----------------------------------------------------------------------
155cover-dir := ./tests/results
156go-cover-out := $(cover-dir)/go-test-coverage.out
157go-result-out := $(cover-dir)/go-test-results.out
158
159.PHONY: gen-coverage-coverprofile
160gen-coverage-coverprofile:
161
162 $(call banner-enter,Target $@)
163 @echo "** Testing attempt #2: exit-with-error-status: disabled"
164
165 # Fix docker volume perms if building locally
166 touch "$(go-cover-out)"
167 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-cover-out)")
168
169 # Fix docker volume perms if building locally
170 $(if $(LOCAL_FIX_PERMS),touch "$(go-result-out)")
171 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-result-out)")
172
173 # ------------------------------------------
174 # set -euo pipefail else tee masks $? return
175 # ------------------------------------------
176 @echo '** Running test coverage: exit-on-error is currently disabled'
177 -(\
178 set -euo pipefail; \
179 $(GO) test -mod=vendor -v -coverprofile "$(go-cover-out)" -covermode count ./... 2>&1 | tee "$(go-result-out)" \
180 )
181
182 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-result-out)")
Joey Armstrongfd77d5e2023-07-15 16:37:44 -0400183 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-cover-out)")
184
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400185 $(call banner-leave,Target $@)
186
187## -----------------------------------------------------------------------
188## Intent: Morph coverage data into junit/xml content
189## -----------------------------------------------------------------------
190go-results-xml := $(cover-dir)/go-test-results.xml
191
192.PHONY: gen-coverage-junit
193gen-coverage-junit : gen-coverage-coverprofile
194gen-coverage-junit:
195 $(call banner-enter,Target $@)
196
197 # Fix docker volume perms if building locally
198 $(if $(LOCAL_FIX_PERMS),touch "$(go-results-xml)")
199 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-results-xml)")
200
201 ${GO_JUNIT_REPORT} < $(go-result-out) > "$(go-results-xml)"
202
203 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-results-xml)")
204 $(call banner-leave,Target $@)
205
206## -----------------------------------------------------------------------
207## Intent: Morph coverage data into cobertura xml
208## -----------------------------------------------------------------------
209go-cover-xml := $(cover-dir)/go-test-coverage.xml
210
211.PHONY: gen-coverage-cobertura
212gen-coverage-cobertura : gen-coverage-junit
213gen-coverage-cobertura :
214
215 $(call banner-enter,Target $@)
216
217 # Fix docker volume perms if building locally
218 $(if $(LOCAL_FIX_PERMS),touch "$(go-cover-xml)")
Joey Armstrongfd77d5e2023-07-15 16:37:44 -0400219 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-cover-xml)")
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400220
221 ${GOCOVER_COBERTURA} < "$(go-cover-out)" > "$(go-cover-xml)"
222
223 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-cover-xml)")
224 $(call banner-leave,Target $@)
225
226## -----------------------------------------------------------------------
227## -----------------------------------------------------------------------
228distclean:
Joey Armstrong26245a32022-12-17 21:49:06 -0500229 $(RM) -r ./sca-report ./tests
Scott Baker2c1c4822019-10-16 11:02:41 -0700230
Joey Armstrongb085c502023-01-17 13:56:24 -0500231## -----------------------------------------------------------------------
232## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400233clean :: distclean
234
235## -----------------------------------------------------------------------
236## -----------------------------------------------------------------------
237sterile :: clean
238
239## -----------------------------------------------------------------------
240## -----------------------------------------------------------------------
241help ::
242 @echo "Usage: make [<target>]"
243 @echo "where available targets are:"
244 @echo
245 @echo "build : Build the library"
246 @echo "clean : Remove files created by the build"
247 @echo "distclean : Remove build and testing artifacts and reports"
248 @echo "lint-mod : Verify the integrity of the 'mod' files"
249 @echo "mod-update : Update go.mod and the vendor directory"
250 @echo "test : Generate reports for all go tests"
251 @echo
252 @echo '[REPORT: coverage]'
253 @echo ' gen-coverage-coverprofile Generate profiling data'
254 @echo ' gen-coverage-junit Generate junit coverage report'
255 @echo ' gen-coverage-cobertura Generate cobertura report'
Joey Armstrong26245a32022-12-17 21:49:06 -0500256
257# [EOF]
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400258