blob: 7f21a2c0635d48a92f1b01827f045f9b6efa855f [file] [log] [blame]
Joey Armstrongf9bffdf2022-12-27 07:05:28 -05001# -*- makefile -*-
2# -----------------------------------------------------------------------
3# Copyright 2016-2023 Open Networking Foundation (ONF) and the ONF Contributors
Phaneendra Manda4c62c802019-03-06 21:37:49 +05304#
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 Armstrongf9bffdf2022-12-27 07:05:28 -050016# -----------------------------------------------------------------------
Phaneendra Manda4c62c802019-03-06 21:37:49 +053017
Joey Armstrongf9bffdf2022-12-27 07:05:28 -050018$(if $(DEBUG),$(warning ENTER))
19
20.DEFAULT_GOAL := help
21
22TOP ?= .
23MAKEDIR ?= $(TOP)/makefiles
24
25$(if $(VERBOSE),$(eval export VERBOSE=$(VERBOSE))) # visible to include(s)
26
27##--------------------##
28##---] INCLUDES [---##
29##--------------------##
Joey Armstrong3f0e2422023-07-05 18:25:41 -040030include config.mk# # configure
31include makefiles/include.mk # top level include
32
Joey Armstrongf9bffdf2022-12-27 07:05:28 -050033ifdef LOCAL_LINT
34 include $(MAKEDIR)/lint/golang/sca.mk
35endif
Matt Jeanneret8b823f62019-05-11 11:01:28 -040036
37# Variables
38VERSION ?= $(shell cat ./VERSION)
39
Matt Jeanneretf880eb62019-07-16 20:08:03 -040040DOCKER_LABEL_VCS_DIRTY = false
41ifneq ($(shell git ls-files --others --modified --exclude-standard 2>/dev/null | wc -l | sed -e 's/ //g'),0)
42 DOCKER_LABEL_VCS_DIRTY = true
43endif
Matt Jeanneret8b823f62019-05-11 11:01:28 -040044## Docker related
Matt Jeanneretf880eb62019-07-16 20:08:03 -040045DOCKER_EXTRA_ARGS ?=
Matt Jeanneret8b823f62019-05-11 11:01:28 -040046DOCKER_REGISTRY ?=
47DOCKER_REPOSITORY ?=
David K. Bainbridge96b06512021-04-01 18:53:51 +000048DOCKER_TAG ?= ${VERSION}$(shell [[ ${DOCKER_LABEL_VCS_DIRTY} == "true" ]] && echo "-dirty" || true)
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -040049ADAPTER_IMAGENAME := ${DOCKER_REGISTRY}${DOCKER_REPOSITORY}voltha-openolt-adapter:${DOCKER_TAG}
David K. Bainbridge96b06512021-04-01 18:53:51 +000050DOCKER_TARGET ?= prod
Andrea Campanellacbf583e2019-12-17 15:26:00 -080051TYPE ?= minimal
Matt Jeanneret8b823f62019-05-11 11:01:28 -040052
53## Docker labels. Only set ref and commit date if committed
Matt Jeanneretf880eb62019-07-16 20:08:03 -040054DOCKER_LABEL_VCS_URL ?= $(shell git remote get-url $(shell git remote))
55DOCKER_LABEL_VCS_REF = $(shell git rev-parse HEAD)
56DOCKER_LABEL_BUILD_DATE ?= $(shell date -u "+%Y-%m-%dT%H:%M:%SZ")
57DOCKER_LABEL_COMMIT_DATE = $(shell git show -s --format=%cd --date=iso-strict HEAD)
Matt Jeanneret8b823f62019-05-11 11:01:28 -040058
Matt Jeanneretf880eb62019-07-16 20:08:03 -040059DOCKER_BUILD_ARGS ?= \
60 ${DOCKER_EXTRA_ARGS} \
61 --build-arg org_label_schema_version="${VERSION}" \
62 --build-arg org_label_schema_vcs_url="${DOCKER_LABEL_VCS_URL}" \
63 --build-arg org_label_schema_vcs_ref="${DOCKER_LABEL_VCS_REF}" \
64 --build-arg org_label_schema_build_date="${DOCKER_LABEL_BUILD_DATE}" \
65 --build-arg org_opencord_vcs_commit_date="${DOCKER_LABEL_COMMIT_DATE}" \
66 --build-arg org_opencord_vcs_dirty="${DOCKER_LABEL_VCS_DIRTY}"
67
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -050068# tool containers
David K. Bainbridge2f2658d2021-04-09 16:13:57 +000069VOLTHA_TOOLS_VERSION ?= 2.4.0
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -050070
Joey Armstrong3f0e2422023-07-05 18:25:41 -040071# 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
72# 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
73# GOCOVER_COBERTURA = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app/src/github.com/opencord/voltha-openolt-adapter -i voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-gocover-cobertura gocover-cobertura
74# 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
75# 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
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -050076
Zack Williams75662252020-04-06 18:16:54 -070077.PHONY: docker-build local-protos local-lib-go help
Phaneendra Manda4c62c802019-03-06 21:37:49 +053078
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -040079## Local Development Helpers
Zack Williams75662252020-04-06 18:16:54 -070080local-protos: ## Copies a local version of the voltha-protos dependency into the vendor directory
William Kurkianea869482019-04-09 15:16:11 -040081ifdef LOCAL_PROTOS
Joey Armstronga6af1522023-01-17 16:06:16 -050082 $(RM) -r vendor/github.com/opencord/voltha-protos/v5/go
khenaidoo106c61a2021-08-11 18:05:46 -040083 mkdir -p vendor/github.com/opencord/voltha-protos/v5/go
84 cp -r ${LOCAL_PROTOS}/go/* vendor/github.com/opencord/voltha-protos/v5/go
Joey Armstronga6af1522023-01-17 16:06:16 -050085 $(RM) -r vendor/github.com/opencord/voltha-protos/v5/go/vendor
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -040086endif
87
Zack Williams75662252020-04-06 18:16:54 -070088local-lib-go: ## Copies a local version of the voltha-lib-go dependency into the vendor directory
Scott Baker355d1742019-10-24 10:57:52 -070089ifdef LOCAL_LIB_GO
khenaidoo106c61a2021-08-11 18:05:46 -040090 mkdir -p vendor/github.com/opencord/voltha-lib-go/v7/pkg
91 cp -r ${LOCAL_LIB_GO}/pkg/* vendor/github.com/opencord/voltha-lib-go/v7/pkg/
William Kurkianea869482019-04-09 15:16:11 -040092endif
Matt Jeanneret8b823f62019-05-11 11:01:28 -040093
Joey Armstrongf9bffdf2022-12-27 07:05:28 -050094## -----------------------------------------------------------------------
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -040095## Docker targets
Joey Armstrongf9bffdf2022-12-27 07:05:28 -050096## -----------------------------------------------------------------------
Zack Williams75662252020-04-06 18:16:54 -070097build: docker-build ## Alias for 'docker build'
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -040098
Joey Armstrongf9bffdf2022-12-27 07:05:28 -050099## -----------------------------------------------------------------------
100## -----------------------------------------------------------------------
Matteo Scandolo6ec3c352020-04-29 15:27:03 -0700101docker-build: local-protos local-lib-go ## Build openolt adapter docker image (set BUILD_PROFILED=true to also build the profiled image)
David K. Bainbridgee2d9b332021-04-15 00:11:51 +0000102 docker build $(DOCKER_BUILD_ARGS) --target=${DOCKER_TARGET} --build-arg CGO_PARAMETER=0 -t ${ADAPTER_IMAGENAME} -f docker/Dockerfile.openolt .
Matteo Scandolo6ec3c352020-04-29 15:27:03 -0700103ifdef BUILD_PROFILED
David K. Bainbridgee2d9b332021-04-15 00:11:51 +0000104 docker build $(DOCKER_BUILD_ARGS) --target=dev --build-arg CGO_PARAMETER=1 --build-arg EXTRA_GO_BUILD_TAGS="-tags profile" -t ${ADAPTER_IMAGENAME}-profile -f docker/Dockerfile.openolt .
105endif
106ifdef BUILD_RACE
107 docker build $(DOCKER_BUILD_ARGS) --target=dev --build-arg CGO_PARAMETER=1 --build-arg EXTRA_GO_BUILD_TAGS="-race" -t ${ADAPTER_IMAGENAME}-rd -f docker/Dockerfile.openolt .
Matteo Scandolo6ec3c352020-04-29 15:27:03 -0700108endif
Matteo Scandolo8f2b9572020-02-28 15:35:23 -0800109
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500110## -----------------------------------------------------------------------
111## -----------------------------------------------------------------------
Zack Williams75662252020-04-06 18:16:54 -0700112docker-push: ## Push the docker images to an external repository
Matt Jeanneret8b823f62019-05-11 11:01:28 -0400113 docker push ${ADAPTER_IMAGENAME}
Matteo Scandolo24ed9672020-05-04 10:53:08 -0700114ifdef BUILD_PROFILED
115 docker push ${ADAPTER_IMAGENAME}-profile
116endif
David K. Bainbridgee2d9b332021-04-15 00:11:51 +0000117ifdef BUILD_RACE
118 docker push ${ADAPTER_IMAGENAME}-rd
119endif
Matt Jeanneret8b823f62019-05-11 11:01:28 -0400120
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500121## -----------------------------------------------------------------------
122## -----------------------------------------------------------------------
Zack Williams75662252020-04-06 18:16:54 -0700123docker-kind-load: ## Load docker images into a KinD cluster
Andrea Campanellacbf583e2019-12-17 15:26:00 -0800124 @if [ "`kind get clusters | grep voltha-$(TYPE)`" = '' ]; then echo "no voltha-$(TYPE) cluster found" && exit 1; fi
125 kind load docker-image ${ADAPTER_IMAGENAME} --name=voltha-$(TYPE) --nodes $(shell kubectl get nodes --template='{{range .items}}{{.metadata.name}},{{end}}' | sed 's/,$$//')
126
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500127## -----------------------------------------------------------------------
Matt Jeanneret8b823f62019-05-11 11:01:28 -0400128## lint and unit tests
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500129## -----------------------------------------------------------------------
Zack Williams75662252020-04-06 18:16:54 -0700130lint-dockerfile: ## Perform static analysis on Dockerfile
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -0500131 @echo "Running Dockerfile lint check ..."
132 @${HADOLINT} $$(find . -name "Dockerfile.*")
133 @echo "Dockerfile lint check OK"
134
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500135## -----------------------------------------------------------------------
136## -----------------------------------------------------------------------
Zack Williams75662252020-04-06 18:16:54 -0700137lint-mod: ## Verify the Go dependencies
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400138
Matt Jeanneret384d8c92019-05-06 14:27:31 -0400139 @echo "Running dependency check..."
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -0500140 @${GO} mod verify
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400141
Scott Baker22c0e9c2019-11-26 08:11:29 -0800142 @echo "Dependency check OK. Running vendor check..."
143 @git status > /dev/null
Kent Hagermane71b52d2020-02-26 11:13:42 -0500144 @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)
145 @[[ `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 Armstrong3f0e2422023-07-05 18:25:41 -0400146
147 $(MAKE) mod-update
148# ${GO} mod tidy
149# ${GO} mod vendor
150
Scott Baker22c0e9c2019-11-26 08:11:29 -0800151 @git status > /dev/null
Kent Hagermane71b52d2020-02-26 11:13:42 -0500152 @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)
153 @[[ `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 Baker22c0e9c2019-11-26 08:11:29 -0800154 @echo "Vendor check OK."
Matt Jeanneret384d8c92019-05-06 14:27:31 -0400155
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500156## -----------------------------------------------------------------------
157## -----------------------------------------------------------------------
Joey Armstronga6af1522023-01-17 16:06:16 -0500158lint: local-lib-go lint-mod lint-dockerfile
David Bainbridge788e5202019-10-21 18:49:40 +0000159
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500160## -----------------------------------------------------------------------
161## -----------------------------------------------------------------------
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400162coverage-out := ./tests/results/go-test-coverage.out
163coverage-res := ./tests/results/go-test-results.out
Zack Williams75662252020-04-06 18:16:54 -0700164test: ## Run unit tests
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400165
166 $(call banner-enter,$@)
167
168 $(RM) -r tests/results
Matt Jeanneret384d8c92019-05-06 14:27:31 -0400169 @mkdir -p ./tests/results
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400170
171 @$(if $(LOCAL_FIX_PERMS),chmod 777 tests/results)
172
173 $(HIDE) $(MAKE) --no-print-directory test-go-coverage
174 $(HIDE) $(MAKE) --no-print-directory test-junit
175 $(HIDE) $(MAKE) --no-print-directory test-cobertura
176
177# ${GOCOVER_COBERTURA} < $(coverage-out) \
178# > ./tests/results/go-test-coverage.xml
179
180 @$(if $(LOCAL_FIX_PERMS),chmod 775 tests/results) # yes this may not run
181
182 $(call banner-leave,$@)
183
184## -----------------------------------------------------------------------
185## -----------------------------------------------------------------------
186test-go-coverage:
187 $(call banner-enter,$@)
188 @$(if $(LOCAL_FIX_PERMS),chmod 777 tests/results)
189 ( ${GO} test -mod=vendor -v -coverprofile $(coverage-out) -covermode count ./... 2>&1 ) \
190 | tee $(coverage-res)
191 @$(if $(LOCAL_FIX_PERMS),chmod 775 tests/results)
192 $(call banner-leave,$@)
193
194## -----------------------------------------------------------------------
195## -----------------------------------------------------------------------
196test-junit:
197 $(call banner-enter,$@)
198 @$(if $(LOCAL_FIX_PERMS),chmod 777 tests/results)
199 ${GO_JUNIT_REPORT} < $(coverage-res) \
200 > ./tests/results/go-test-results.xml
201 @$(if $(LOCAL_FIX_PERMS),chmod 775 tests/results)
202 $(call banner-leave,$@)
203
204## -----------------------------------------------------------------------
205## -----------------------------------------------------------------------
206test-cobertura:
207 $(call banner-enter,$@)
208 @$(if $(LOCAL_FIX_PERMS),chmod 777 tests/results)
209 ${GOCOVER_COBERTURA} < $(coverage-out) \
210 > ./tests/results/go-test-coverage.xml
211 @$(if $(LOCAL_FIX_PERMS),chmod 775 tests/results)
212 $(call banner-leave,$@)
213
214## -----------------------------------------------------------------------
215## -----------------------------------------------------------------------
216help ::
217 @echo '[TEST: Coverage report]'
218 @echo ' test-go-coverage Generate a coverage report for vendor/'
219 @echo ' test-junit Digest go coverage, generate junit'
220 @echo ' test-cobertura Digest coverage and junit reports'
Matt Jeanneret384d8c92019-05-06 14:27:31 -0400221
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500222## -----------------------------------------------------------------------
223## -----------------------------------------------------------------------
Joey Armstronga6af1522023-01-17 16:06:16 -0500224sca:
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400225 $(call banner-enter,$@)
226
Joey Armstronga6af1522023-01-17 16:06:16 -0500227 @$(RM) -r ./sca-report
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700228 @mkdir -p ./sca-report
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -0500229 @echo "Running static code analysis..."
Joey Armstronga6af1522023-01-17 16:06:16 -0500230 @${GOLANGCI_LINT} run --deadline=6m --out-format junit-xml ./... \
231 | tee ./sca-report/sca-report.xml
Kent Hagermane71b52d2020-02-26 11:13:42 -0500232 @echo ""
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -0500233 @echo "Static code analysis OK"
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700234
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400235 $(call banner-leave,$@)
236
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500237## -----------------------------------------------------------------------
238## -----------------------------------------------------------------------
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400239clean :: distclean
240sterile :: clean distclean
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -0400241
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500242## -----------------------------------------------------------------------
243## -----------------------------------------------------------------------
Joey Armstronga6af1522023-01-17 16:06:16 -0500244distclean:
245 $(RM) -r ./sca-report
Matt Jeanneretb5bf10e2019-05-18 15:02:51 -0400246
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500247## -----------------------------------------------------------------------
248## -----------------------------------------------------------------------
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400249.PHONY: mod-update
250mod-update: mod-tidy mod-vendor
251
252## -----------------------------------------------------------------------
253## -----------------------------------------------------------------------
254.PHONY: mod-tidy
255mod-tidy:
256 $(call banner-enter,$@)
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -0500257 ${GO} mod tidy
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400258 $(call banner-leave,$@)
259
260## -----------------------------------------------------------------------
261## -----------------------------------------------------------------------
262.PHONY: mod-vendor
263mod-vendor:
264 $(call banner-enter,$@)
265 @$(if $(LOCAL_FIX_PERMS),chmod 777 .)
Kent Hagerman2cd4b7b2020-02-04 15:15:14 -0500266 ${GO} mod vendor
Joey Armstrong3f0e2422023-07-05 18:25:41 -0400267 @$(if $(LOCAL_FIX_PERMS),chmod 755 .)
268 $(call banner-leave,$@)
269
270## -----------------------------------------------------------------------
271## -----------------------------------------------------------------------
272help ::
273 @echo '[MOD UPDATE]'
274 @echo ' mod-update'
275 @echo ' LOCAL_FIX_PERMS=1 Hack to fix docker access problems'
276 @echo ' mod-tidy'
277 @echo ' mod-vendor'
Zack Williams75662252020-04-06 18:16:54 -0700278
Joey Armstrongf9bffdf2022-12-27 07:05:28 -0500279# [EOF]