blob: dd5b86ea80049126806dfef9b69fd76962496b52 [file] [log] [blame]
Kent Hagermanda41d742020-01-07 14:55:56 -05001# Copyright 2020-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# set default shell options
16SHELL = bash -e -o pipefail
17
18## Variables
Kent Hagerman1f99b662020-03-10 17:22:11 -040019VERSION ?= $(shell cat ./VERSION)
20GO_JUNIT_REPORT_VERSION ?= "0.9.1"
21GOCOVER_COBERTURA_VERSION ?= "v0.0.0-20180217150009-aaee18c8195c"
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000022GOLANG_VERSION ?= "1.16.3"
Kent Hagerman1f99b662020-03-10 17:22:11 -040023GOLANGCI_LINT_VERSION ?= "1.23.6"
24HADOLINT_VERSION ?= "1.17.5"
25PROTOC_VERSION ?= "3.7.0"
26PROTOC_SHA256SUM ?= "a1b8ed22d6dc53c5b8680a6f1760a305b33ef471bece482e92728f00ba2a2969"
27PROTOC_GEN_GO_VERSION ?= "1.3.2"
Zack Williams88200d32020-04-02 13:36:41 -070028PROTOC_GEN_GRPC_GATEWAY_VERSION ?= "1.14.3"
Andrea Campanellaa13b2c52021-04-26 11:38:51 +000029PROTOC_GEN_CPP_VERSION ?= "1.3.1"
Kent Hagermanda41d742020-01-07 14:55:56 -050030
31# Docker related
32DOCKER_LABEL_VCS_DIRTY = false
33ifneq ($(shell git status --porcelain | wc -l | sed -e 's/ //g'),0)
34 DOCKER_LABEL_VCS_DIRTY = true
Kent Hagermanda41d742020-01-07 14:55:56 -050035endif
36
Zack Williamsfd620942020-01-28 11:18:38 -070037DOCKER ?= docker
Kent Hagermanda41d742020-01-07 14:55:56 -050038DOCKER_EXTRA_ARGS ?=
Kent Hagermanc5487052020-01-28 15:36:19 -050039DOCKER_REGISTRY ?=
40DOCKER_REPOSITORY ?= voltha/
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000041DOCKER_TAG ?= ${VERSION}$(shell [[ ${DOCKER_LABEL_VCS_DIRTY} == "true" ]] && echo "-dirty" || true)
Kent Hagermanc5487052020-01-28 15:36:19 -050042IMAGENAME := ${DOCKER_REGISTRY}${DOCKER_REPOSITORY}voltha-ci-tools
Kent Hagermanda41d742020-01-07 14:55:56 -050043
44## Docker labels. Only set ref and commit date if committed
Zack Williamsfd620942020-01-28 11:18:38 -070045DOCKER_LABEL_VCS_URL = $(shell git remote get-url "$(shell git remote)" 2>/dev/null)
Kent Hagermanc5487052020-01-28 15:36:19 -050046DOCKER_LABEL_VCS_REF = $(shell git rev-parse HEAD)
Zack Williamsfd620942020-01-28 11:18:38 -070047DOCKER_LABEL_BUILD_DATE = $(shell date -u "+%Y-%m-%dT%H:%M:%SZ")
Kent Hagermanc5487052020-01-28 15:36:19 -050048DOCKER_LABEL_COMMIT_DATE = $(shell git show -s --format=%cd --date=iso-strict HEAD)
Kent Hagermanda41d742020-01-07 14:55:56 -050049
50DOCKER_BUILD_ARGS ?= \
51 ${DOCKER_EXTRA_ARGS} \
52 --build-arg org_label_schema_version="${VERSION}" \
53 --build-arg org_label_schema_vcs_url="${DOCKER_LABEL_VCS_URL}" \
54 --build-arg org_label_schema_vcs_ref="${DOCKER_LABEL_VCS_REF}" \
55 --build-arg org_label_schema_build_date="${DOCKER_LABEL_BUILD_DATE}" \
56 --build-arg org_opencord_vcs_commit_date="${DOCKER_LABEL_COMMIT_DATE}" \
57 --build-arg org_opencord_vcs_dirty="${DOCKER_LABEL_VCS_DIRTY}"
58
59## runnable tool containers
Zack Williamsfd620942020-01-28 11:18:38 -070060HADOLINT = ${DOCKER} run --rm --user $$(id -u):$$(id -g) -v $$PWD:/app ${IMAGENAME}:${VERSION}-hadolint hadolint
Kent Hagermanda41d742020-01-07 14:55:56 -050061
Kent Hagermanc5487052020-01-28 15:36:19 -050062lint: docker-lint
Kent Hagermanda41d742020-01-07 14:55:56 -050063
64docker-lint: hadolint
65 @echo "Linting Dockerfiles..."
66 @${HADOLINT} $(shell ls docker/*.Dockerfile)
67 @echo "Dockerfiles linted OK"
68
69
70build: docker-build
71
Matteo Scandoloc333f522021-03-30 09:25:27 -070072docker-build: go-junit-report gocover-cobertura golang golangci-lint hadolint protoc python onos-config-loader
Kent Hagermanda41d742020-01-07 14:55:56 -050073
74go-junit-report:
Zack Williamsfd620942020-01-28 11:18:38 -070075 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000076 --build-arg GOLANG_VERSION=${GOLANG_VERSION} \
Kent Hagermanda41d742020-01-07 14:55:56 -050077 --build-arg GO_JUNIT_REPORT_VERSION=${GO_JUNIT_REPORT_VERSION} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000078 -t ${IMAGENAME}:${DOCKER_TAG}-go-junit-report \
Kent Hagermanda41d742020-01-07 14:55:56 -050079 -t ${IMAGENAME}:latest-go-junit-report \
80 -f docker/go-junit-report.Dockerfile .
81
82gocover-cobertura:
Zack Williamsfd620942020-01-28 11:18:38 -070083 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
Matteo Scandolo5cb1cce2020-11-19 17:39:13 -080084 --build-arg GOLANG_VERSION=${GOLANG_VERSION} \
Kent Hagermanda41d742020-01-07 14:55:56 -050085 --build-arg GOCOVER_COBERTURA_VERSION=${GOCOVER_COBERTURA_VERSION} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000086 -t ${IMAGENAME}:${DOCKER_TAG}-gocover-cobertura \
Kent Hagermanda41d742020-01-07 14:55:56 -050087 -t ${IMAGENAME}:latest-gocover-cobertura \
88 -f docker/gocover-cobertura.Dockerfile .
89
90golang:
Zack Williamsfd620942020-01-28 11:18:38 -070091 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
Kent Hagermanda41d742020-01-07 14:55:56 -050092 --build-arg GOLANG_VERSION=${GOLANG_VERSION} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000093 -t ${IMAGENAME}:${DOCKER_TAG}-golang \
Kent Hagermanda41d742020-01-07 14:55:56 -050094 -t ${IMAGENAME}:latest-golang \
95 -f docker/golang.Dockerfile .
96
Andrey Pozolotin49a35452020-08-14 22:14:51 +020097python:
98 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +000099 -t ${IMAGENAME}:${DOCKER_TAG}-python \
Andrey Pozolotin49a35452020-08-14 22:14:51 +0200100 -t ${IMAGENAME}:latest-python \
101 -f docker/python.Dockerfile .
102
Kent Hagermanda41d742020-01-07 14:55:56 -0500103golangci-lint:
Zack Williamsfd620942020-01-28 11:18:38 -0700104 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
Kent Hagermanda41d742020-01-07 14:55:56 -0500105 --build-arg GOLANGCI_LINT_VERSION=${GOLANGCI_LINT_VERSION} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +0000106 -t ${IMAGENAME}:${DOCKER_TAG}-golangci-lint \
Kent Hagermanda41d742020-01-07 14:55:56 -0500107 -t ${IMAGENAME}:latest-golangci-lint \
108 -f docker/golangci-lint.Dockerfile .
109
110hadolint:
Zack Williamsfd620942020-01-28 11:18:38 -0700111 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
Kent Hagermanda41d742020-01-07 14:55:56 -0500112 --build-arg HADOLINT_VERSION=${HADOLINT_VERSION} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +0000113 -t ${IMAGENAME}:${DOCKER_TAG}-hadolint \
Kent Hagermanda41d742020-01-07 14:55:56 -0500114 -t ${IMAGENAME}:latest-hadolint \
115 -f docker/hadolint.Dockerfile .
116
117protoc:
Zack Williamsfd620942020-01-28 11:18:38 -0700118 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +0000119 --build-arg GOLANG_VERSION=${GOLANG_VERSION} \
Kent Hagermanda41d742020-01-07 14:55:56 -0500120 --build-arg PROTOC_VERSION=${PROTOC_VERSION} \
121 --build-arg PROTOC_SHA256SUM=${PROTOC_SHA256SUM} \
122 --build-arg PROTOC_GEN_GO_VERSION=${PROTOC_GEN_GO_VERSION} \
Kent Hagerman1f99b662020-03-10 17:22:11 -0400123 --build-arg PROTOC_GEN_GRPC_GATEWAY_VERSION=${PROTOC_GEN_GRPC_GATEWAY_VERSION} \
Andrea Campanellaa13b2c52021-04-26 11:38:51 +0000124 --build-arg PROTOC_GEN_CPP_VERSION=${PROTOC_GEN_CPP_VERSION} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +0000125 -t ${IMAGENAME}:${DOCKER_TAG}-protoc \
Kent Hagermanda41d742020-01-07 14:55:56 -0500126 -t ${IMAGENAME}:latest-protoc \
127 -f docker/protoc.Dockerfile .
128
Matteo Scandolo9d34a0f2021-03-29 15:26:56 -0700129onos-config-loader:
130 ${DOCKER} build ${DOCKER_BUILD_ARGS} \
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +0000131 -t ${IMAGENAME}:${DOCKER_TAG}-onos-config-loader \
Matteo Scandolo9d34a0f2021-03-29 15:26:56 -0700132 -t ${IMAGENAME}:latest-onos-config-loader \
133 -f docker/onos-config-loader.Dockerfile .
134
Kent Hagermanda41d742020-01-07 14:55:56 -0500135docker-push:
136ifneq (false,$(DOCKER_LABEL_VCS_DIRTY))
137 @echo "Local repo is dirty. Refusing to push."
138 @exit 1
139endif
David K. Bainbridgee33a5bc2021-04-06 20:30:58 +0000140 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-go-junit-report
141 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-gocover-cobertura
142 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-golang
143 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-golangci-lint
144 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-hadolint
145 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-protoc
146 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-python
147 ${DOCKER} push ${IMAGENAME}:${DOCKER_TAG}-onos-config-loader