blob: 490f9577b811d273a82ff5817a4ead51dde5efc1 [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 Armstrong7cd92a12024-05-01 17:47:58 -040027$(if $(findstring disabled-joey,$(USER)),\
28 $(eval USE_LF_MK := 1)) # special snowflake
29
30##--------------------##
31##---] INCLUDES [---##
32##--------------------##
33ifdef USE_LF_MK
34 $(error should not be here)
35 include lf/include.mk
36else
37 include lf/transition.mk
38endif # ifdef USE_LF_MK
Scott Baker2c1c4822019-10-16 11:02:41 -070039
40# Variables
41VERSION ?= $(shell cat ./VERSION)
42
Joey Armstrongb085c502023-01-17 13:56:24 -050043## -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070044## Local Development Helpers
Joey Armstrongb085c502023-01-17 13:56:24 -050045## -----------------------------------------------------------------------
46.PHONY: local-protos
Scott Baker2c1c4822019-10-16 11:02:41 -070047local-protos:
48 @mkdir -p python/local_imports
49ifdef LOCAL_PROTOS
Joey Armstrong26245a32022-12-17 21:49:06 -050050 $(RM) -r vendor/github.com/opencord/voltha-protos
khenaidoo26721882021-08-11 17:42:52 -040051 mkdir -p vendor/github.com/opencord/voltha-protos/v5/go
52 cp -r ${LOCAL_PROTOS}/go/* vendor/github.com/opencord/voltha-protos/v5/go
Joey Armstrong26245a32022-12-17 21:49:06 -050053 $(RM) -r python/local_imports/voltha-protos
Scott Baker2c1c4822019-10-16 11:02:41 -070054 mkdir -p python/local_imports/voltha-protos/dist
Scott Bakerf1b096c2019-11-01 12:36:30 -070055 cp ${LOCAL_PROTOS}/dist/*.tar.gz python/local_imports/voltha-protos/dist/
Scott Baker2c1c4822019-10-16 11:02:41 -070056endif
57
Joey Armstrongb085c502023-01-17 13:56:24 -050058## -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070059## build the library
Joey Armstrongb085c502023-01-17 13:56:24 -050060## -----------------------------------------------------------------------
Scott Bakerf1b096c2019-11-01 12:36:30 -070061build: local-protos
Joey Armstrong7f8436c2023-07-09 20:23:27 -040062 $(call banner-enter,Target $@)
Kent Hagermanfac11d42020-01-28 12:18:55 -050063 ${GO} build -mod=vendor ./...
Joey Armstrong7f8436c2023-07-09 20:23:27 -040064 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -070065
Joey Armstrongb085c502023-01-17 13:56:24 -050066## -----------------------------------------------------------------------
67## -----------------------------------------------------------------------
Scott Baker2c1c4822019-10-16 11:02:41 -070068lint-mod:
Joey Armstrong7f8436c2023-07-09 20:23:27 -040069 $(call banner-entry,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -070070 @echo "Running dependency check..."
Kent Hagermanfac11d42020-01-28 12:18:55 -050071 @${GO} mod verify
Scott Bakera36b4982019-11-26 08:09:23 -080072 @echo "Dependency check OK. Running vendor check..."
73 @git status > /dev/null
Kent Hagerman3da1fd02020-02-26 10:54:07 -050074 @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)
75 @[[ `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 -040076
77 $(HIDE)$(MAKE) --no-print-directory mod-update
78
Scott Bakera36b4982019-11-26 08:09:23 -080079 @git status > /dev/null
Kent Hagerman3da1fd02020-02-26 10:54:07 -050080 @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)
81 @[[ `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 -080082 @echo "Vendor check OK."
Joey Armstrong7f8436c2023-07-09 20:23:27 -040083 $(call banner-leave,Target $@)
84
85## -----------------------------------------------------------------------
86## -----------------------------------------------------------------------
87.PHONY: mod-update
Joey Armstrong074f64f2023-12-01 10:05:02 -050088mod-update: go-version mod-tidy mod-vendor
89
90## -----------------------------------------------------------------------
91## -----------------------------------------------------------------------
92.PHONY: go-version
93go-version :
94 $(call banner-enter,Target $@)
95 ${GO} version
96 $(call banner-leave,Target $@)
Joey Armstrong7f8436c2023-07-09 20:23:27 -040097
98## -----------------------------------------------------------------------
99## -----------------------------------------------------------------------
100.PHONY: mod-tidy
101mod-tidy :
102 $(call banner-enter,Target $@)
103 ${GO} mod tidy
104 $(call banner-leave,Target $@)
105
106## -----------------------------------------------------------------------
107## -----------------------------------------------------------------------
108.PHONY: mod-vendor
109mod-vendor : mod-tidy
110mod-vendor :
111 $(call banner-enter,Target $@)
112 $(if $(LOCAL_FIX_PERMS),chmod o+w $(CURDIR))
113 ${GO} mod vendor
114 $(if $(LOCAL_FIX_PERMS),chmod o-w $(CURDIR))
115 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700116
Joey Armstrongb085c502023-01-17 13:56:24 -0500117## -----------------------------------------------------------------------
118## -----------------------------------------------------------------------
Kent Hagerman3da1fd02020-02-26 10:54:07 -0500119lint: lint-mod
Scott Baker2c1c4822019-10-16 11:02:41 -0700120
Joey Armstrongb085c502023-01-17 13:56:24 -0500121## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400122## Coverage report: Static code analysis
Joey Armstrongb085c502023-01-17 13:56:24 -0500123## -----------------------------------------------------------------------
Kent Hagermanfac11d42020-01-28 12:18:55 -0500124sca:
Joey Armstrong26245a32022-12-17 21:49:06 -0500125 @$(RM) -r ./sca-report
Scott Baker2c1c4822019-10-16 11:02:41 -0700126 @mkdir -p ./sca-report
Kent Hagerman3da1fd02020-02-26 10:54:07 -0500127 @echo "Running static code analysis..."
128 @${GOLANGCI_LINT} run --deadline=4m --out-format junit-xml ./... | tee ./sca-report/sca-report.xml
129 @echo ""
130 @echo "Static code analysis OK"
Scott Baker2c1c4822019-10-16 11:02:41 -0700131
Joey Armstrongb085c502023-01-17 13:56:24 -0500132## -----------------------------------------------------------------------
133## -----------------------------------------------------------------------
Matteo Scandolod58eaef2020-03-30 12:30:02 -0700134test: local-protos
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400135
136 $(call banner-enter,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700137 @mkdir -p ./tests/results
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400138
139 # No stream redirects, exit with shell status
140 $(MAKE) test-go
141
142 # Redirect I/O, ignore shell exit status (for now)
143 $(MAKE) test-go-cover
144
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
150test-go :
151
152 $(call banner-enter,Target $@)
153 @echo "** Testing attempt #1: exit-with-error-status: enabled"
154 -$(GO) test -mod=vendor ./...
155 $(call banner-leave,Target $@)
Scott Baker2c1c4822019-10-16 11:02:41 -0700156
Joey Armstrongb085c502023-01-17 13:56:24 -0500157## -----------------------------------------------------------------------
158## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400159.PHONY: test-go-cover
Joey Armstrongfd77d5e2023-07-15 16:37:44 -0400160test-go-cover : gen-coverage-coverprofile gen-coverage-junit gen-coverage-cobertura
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400161
162## -----------------------------------------------------------------------
163## Intent: Generate coverprofile data
164## -----------------------------------------------------------------------
165cover-dir := ./tests/results
166go-cover-out := $(cover-dir)/go-test-coverage.out
167go-result-out := $(cover-dir)/go-test-results.out
168
169.PHONY: gen-coverage-coverprofile
170gen-coverage-coverprofile:
171
172 $(call banner-enter,Target $@)
173 @echo "** Testing attempt #2: exit-with-error-status: disabled"
174
175 # Fix docker volume perms if building locally
176 touch "$(go-cover-out)"
177 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-cover-out)")
178
179 # Fix docker volume perms if building locally
180 $(if $(LOCAL_FIX_PERMS),touch "$(go-result-out)")
181 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-result-out)")
182
Joey Armstrong7cd92a12024-05-01 17:47:58 -0400183 # ------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400184 # set -euo pipefail else tee masks $? return
185 # ------------------------------------------
186 @echo '** Running test coverage: exit-on-error is currently disabled'
187 -(\
188 set -euo pipefail; \
189 $(GO) test -mod=vendor -v -coverprofile "$(go-cover-out)" -covermode count ./... 2>&1 | tee "$(go-result-out)" \
Joey Armstrong7cd92a12024-05-01 17:47:58 -0400190 )
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400191
192 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-result-out)")
Joey Armstrongfd77d5e2023-07-15 16:37:44 -0400193 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-cover-out)")
194
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400195 $(call banner-leave,Target $@)
196
197## -----------------------------------------------------------------------
198## Intent: Morph coverage data into junit/xml content
199## -----------------------------------------------------------------------
200go-results-xml := $(cover-dir)/go-test-results.xml
201
202.PHONY: gen-coverage-junit
203gen-coverage-junit : gen-coverage-coverprofile
204gen-coverage-junit:
205 $(call banner-enter,Target $@)
206
207 # Fix docker volume perms if building locally
208 $(if $(LOCAL_FIX_PERMS),touch "$(go-results-xml)")
209 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-results-xml)")
210
211 ${GO_JUNIT_REPORT} < $(go-result-out) > "$(go-results-xml)"
212
213 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-results-xml)")
214 $(call banner-leave,Target $@)
215
216## -----------------------------------------------------------------------
217## Intent: Morph coverage data into cobertura xml
218## -----------------------------------------------------------------------
219go-cover-xml := $(cover-dir)/go-test-coverage.xml
220
221.PHONY: gen-coverage-cobertura
222gen-coverage-cobertura : gen-coverage-junit
223gen-coverage-cobertura :
224
225 $(call banner-enter,Target $@)
226
227 # Fix docker volume perms if building locally
228 $(if $(LOCAL_FIX_PERMS),touch "$(go-cover-xml)")
Joey Armstrongfd77d5e2023-07-15 16:37:44 -0400229 $(if $(LOCAL_FIX_PERMS),chmod o+w "$(go-cover-xml)")
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400230
231 ${GOCOVER_COBERTURA} < "$(go-cover-out)" > "$(go-cover-xml)"
232
233 $(if $(LOCAL_FIX_PERMS),chmod o-w "$(go-cover-xml)")
234 $(call banner-leave,Target $@)
235
236## -----------------------------------------------------------------------
237## -----------------------------------------------------------------------
238distclean:
Joey Armstrong26245a32022-12-17 21:49:06 -0500239 $(RM) -r ./sca-report ./tests
Scott Baker2c1c4822019-10-16 11:02:41 -0700240
Joey Armstrongb085c502023-01-17 13:56:24 -0500241## -----------------------------------------------------------------------
242## -----------------------------------------------------------------------
Joey Armstrong7f8436c2023-07-09 20:23:27 -0400243clean :: distclean
244
245## -----------------------------------------------------------------------
246## -----------------------------------------------------------------------
247sterile :: clean
248
249## -----------------------------------------------------------------------
250## -----------------------------------------------------------------------
251help ::
252 @echo "Usage: make [<target>]"
253 @echo "where available targets are:"
254 @echo
255 @echo "build : Build the library"
256 @echo "clean : Remove files created by the build"
257 @echo "distclean : Remove build and testing artifacts and reports"
258 @echo "lint-mod : Verify the integrity of the 'mod' files"
259 @echo "mod-update : Update go.mod and the vendor directory"
260 @echo "test : Generate reports for all go tests"
261 @echo
262 @echo '[REPORT: coverage]'
263 @echo ' gen-coverage-coverprofile Generate profiling data'
264 @echo ' gen-coverage-junit Generate junit coverage report'
265 @echo ' gen-coverage-cobertura Generate cobertura report'
Joey Armstrong26245a32022-12-17 21:49:06 -0500266
267# [EOF]