github.com/verrazzano/verrazzano@v1.7.0/platform-operator/Makefile (about) 1 # Copyright (C) 2020, 2023, Oracle and/or its affiliates. 2 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 include ../make/quality.mk 5 include ../make/generate.mk 6 include ../make/retry.mk 7 8 SCRIPT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))/../build 9 TOOLS_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))/../tools 10 11 NAME:=verrazzano-platform-operator 12 REPO_NAME:=verrazzano-platform-operator 13 14 CONTROLLER_GEN_VERSION ?= $(shell go list -m -f '{{.Version}}' sigs.k8s.io/controller-tools) 15 CREATE_LATEST_TAG=0 16 17 CRD_OPTIONS ?= "crd:crdVersions=v1,maxDescLen=0" 18 KUBECONFIG ?= ${HOME}/.kube/config 19 20 export MODULE_INTEGRATION ?= true 21 22 ifndef DOCKER_IMAGE_FULLNAME 23 DOCKER_IMAGE_NAME ?= ${NAME}-dev 24 DOCKER_IMAGE_FULLNAME=${DOCKER_IMAGE_NAME} 25 ifeq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),docker-push push-tag)) 26 ifndef DOCKER_REPO 27 $(error DOCKER_REPO must be defined as the name of the docker repository where image will be pushed) 28 endif 29 ifndef DOCKER_NAMESPACE 30 $(error DOCKER_NAMESPACE must be defined as the name of the docker namespace where image will be pushed) 31 endif 32 endif 33 ifdef DOCKER_NAMESPACE 34 DOCKER_IMAGE_FULLNAME := ${DOCKER_NAMESPACE}/${DOCKER_IMAGE_FULLNAME} 35 endif 36 ifdef DOCKER_REPO 37 DOCKER_IMAGE_FULLNAME := ${DOCKER_REPO}/${DOCKER_IMAGE_FULLNAME} 38 endif 39 endif 40 41 DOCKER_IMAGE_TAG ?= local-$(shell git rev-parse --short HEAD) 42 43 SHORT_COMMIT_HASH ?= $(shell git rev-parse --short=8 HEAD) 44 VERRAZZANO_DEV_VERSION ?= $(shell grep verrazzano-development-version ../.verrazzano-development-version | sed -e 's/verrazzano-development-version=//') 45 VERRAZZANO_VERSION ?= ${VERRAZZANO_DEV_VERSION}-local+${SHORT_COMMIT_HASH} 46 47 VERRAZZANO_APPLICATION_OPERATOR_IMAGE ?= verrazzano-application-operator-dev 48 VERRAZZANO_CLUSTER_OPERATOR_IMAGE ?= verrazzano-cluster-operator-dev 49 VERRAZZANO_AUTHPROXY_IMAGE ?= verrazzano-authproxy-dev 50 51 OPERATOR_VERSION = ${DOCKER_IMAGE_TAG} 52 ifdef RELEASE_VERSION 53 OPERATOR_VERSION = ${RELEASE_VERSION} 54 endif 55 ifndef RELEASE_BRANCH 56 RELEASE_BRANCH=$(shell git rev-parse --abbrev-ref HEAD) 57 endif 58 59 VZ_BASE_IMAGE ?= ghcr.io/verrazzano/verrazzano-base:v1.0.0-20230327155846-4653b27 60 61 ISTIO_ISTIOCTL_IMAGE ?= ghcr.io/verrazzano/istio-istioctl:1.19.0-20231002202943-1a85d369 62 63 DIST_DIR:=dist 64 GO ?= GO111MODULE=on GOPRIVATE=github.com/verrazzano go 65 GO_LDFLAGS ?= -extldflags -static -X main.buildVersion=${BUILDVERSION} -X main.buildDate=${BUILDDATE} 66 67 CRD_PATH=helm_config/charts/verrazzano-platform-operator/crds 68 69 SHELL = bash 70 71 # Run against the configured Kubernetes cluster in ~/.kube/config 72 .PHONY: run 73 run: 74 $(GO) run main.go --kubeconfig=${KUBECONFIG} --zap-log-level=debug 75 76 # Install CRDs into a cluster 77 .PHONY: install-crds 78 install-crds: 79 kubectl apply -f ${CRD_PATH} 80 81 # Uninstall CRDs from a cluster 82 .PHONY: uninstall-crds 83 uninstall-crds: 84 kubectl delete -f ${CRD_PATH} 85 86 # 87 # Go build related tasks 88 # 89 .PHONY: go-build 90 go-build: 91 $(GO) build \ 92 -ldflags "${GO_LDFLAGS}" \ 93 -o out/$(shell uname)_$(shell uname -m)/verrazzano-platform-operator \ 94 main.go 95 96 .PHONY: go-build-linux 97 go-build-linux: 98 GOOS=linux GOARCH=amd64 $(GO) build \ 99 -ldflags "-s -w ${GO_LDFLAGS}" \ 100 -o out/linux_amd64/verrazzano-platform-operator \ 101 main.go 102 103 .PHONY: go-build-linux-debug 104 go-build-linux-debug: 105 GOOS=linux GOARCH=amd64 $(GO) build \ 106 -ldflags "${GO_LDFLAGS}" \ 107 -o out/linux_amd64/verrazzano-platform-operator \ 108 main.go 109 110 .PHONY: go-install 111 go-install: 112 $(GO) install ./... 113 114 manifests: export EXP_CRD_PATH ?= experimental/crds 115 .PHONY: manifests 116 manifests: platform-manifests 117 118 # Generate mocks 119 .PHONY: mock-gen 120 mock-gen: 121 mockgen --build_flags=--mod=mod -destination=mocks/component_mock.go -package=mocks -copyright_file=hack/boilerplate.go.txt github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/spi ComponentContext,ComponentInfo,ComponentInstaller,ComponentUpgrader,Component 122 mockgen --build_flags=--mod=mod -destination=mocks/controller_mock.go -package=mocks -copyright_file=hack/boilerplate.go.txt sigs.k8s.io/controller-runtime/pkg/client Client,StatusWriter 123 mockgen --build_flags=--mod=mod -destination=mocks/runtime_controller_mock.go -package=mocks -copyright_file=hack/boilerplate.go.txt sigs.k8s.io/controller-runtime/pkg/controller Controller 124 125 # 126 # Docker-related tasks 127 # 128 .PHONY: docker-clean 129 docker-clean: 130 rm -rf ${DIST_DIR} 131 132 .PHONY: docker-build 133 docker-build: generate-bom generate-catalog go-build-linux docker-build-common 134 135 .PHONY: docker-build-debug 136 docker-build-debug: generate-bom generate-catalog go-build-linux-debug docker-build-common 137 138 .PHONY: docker-build-common 139 docker-build-common: 140 @echo Building verrazzano-platform-operator image ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} 141 @echo using verrazzano-application-operator image ${VERRAZZANO_APPLICATION_OPERATOR_IMAGE} 142 @echo using verrazzano-cluster-operator image ${VERRAZZANO_CLUSTER_OPERATOR_IMAGE} 143 @echo using verrazzano-authproxy image ${VERRAZZANO_AUTHPROXY_IMAGE} 144 @echo using istio-istioctl image ${ISTIO_ISTIOCTL_IMAGE} 145 # the TPL file needs to be copied into this dir so it is in the docker build context 146 cp ../THIRD_PARTY_LICENSES.txt . 147 docker build --pull -f Dockerfile \ 148 --build-arg VERRAZZANO_PLATFORM_OPERATOR_IMAGE="${DOCKER_IMAGE_FULLNAME}:${DOCKER_IMAGE_TAG}" \ 149 --build-arg BASE_IMAGE="${VZ_BASE_IMAGE}" \ 150 --build-arg ISTIO_ISTIOCTL_IMAGE="${ISTIO_ISTIOCTL_IMAGE}" \ 151 -t ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} . 152 153 .PHONY: docker-push 154 docker-push: docker-build docker-push-common 155 156 .PHONY: docker-push-debug 157 docker-push-debug: docker-build-debug docker-push-common 158 159 .PHONY: docker-push-common 160 docker-push-common: 161 docker tag ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} ${DOCKER_IMAGE_FULLNAME}:${DOCKER_IMAGE_TAG} 162 $(call retry_docker_push,${DOCKER_IMAGE_FULLNAME}:${DOCKER_IMAGE_TAG}) 163 164 ifeq ($(CREATE_LATEST_TAG), "1") 165 docker tag ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} ${DOCKER_IMAGE_FULLNAME}:latest; 166 $(call retry_docker_push,${DOCKER_IMAGE_FULLNAME}:latest); 167 endif 168 169 # 170 # Test-related tasks 171 # 172 .PHONY: unit-test 173 unit-test: go-install 174 $(GO) test ./internal/... ./controllers/... ./apis/... 175 176 CLUSTER_NAME ?= verrazzano 177 BUILD_DEPLOY = build/deploy 178 OPERATOR_YAML ?= ${BUILD_DEPLOY}/operator.yaml 179 180 .PHONY: generate-operator-yaml 181 generate-operator-yaml: 182 OPERATOR_DIR=$$(dirname ${OPERATOR_YAML}) ; \ 183 mkdir -p $${OPERATOR_DIR} ; \ 184 env DOCKER_IMAGE=${DOCKER_IMAGE_FULLNAME}:${DOCKER_IMAGE_TAG} IMAGE_PULL_SECRETS=${IMAGE_PULL_SECRETS} APP_OPERATOR_IMAGE=${VERRAZZANO_APPLICATION_OPERATOR_IMAGE} CLUSTER_OPERATOR_IMAGE=${VERRAZZANO_CLUSTER_OPERATOR_IMAGE} AUTHPROXY_IMAGE=${VERRAZZANO_AUTHPROXY_IMAGE} ../tools/scripts/generate_operator_yaml.sh > ${OPERATOR_YAML} 185 186 .PHONY: generate-local-operator-yaml 187 generate-local-operator-yaml: 188 OPERATOR_DIR=$$(dirname ${OPERATOR_YAML}) ; \ 189 mkdir -p $${OPERATOR_DIR} ; \ 190 env DOCKER_IMAGE=${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} IMAGE_PULL_SECRETS=${IMAGE_PULL_SECRETS} APP_OPERATOR_IMAGE=${VERRAZZANO_APPLICATION_OPERATOR_IMAGE} CLUSTER_OPERATOR_IMAGE=${VERRAZZANO_CLUSTER_OPERATOR_IMAGE} AUTHPROXY_IMAGE=${VERRAZZANO_AUTHPROXY_IMAGE} ../tools/scripts/generate_operator_yaml.sh > ${OPERATOR_YAML} 191 192 .PHONY: load-local-operators 193 load-local-operators: generate-local-operator-yaml 194 kind load docker-image --name ${CLUSTER_NAME} ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} 195 if [ -n "${APP_OPERATOR_IMAGE}" ] && [[ "${APP_OPERATOR_IMAGE}" == *:* ]] ; then \ 196 kind load docker-image --name ${CLUSTER_NAME} ${APP_OPERATOR_IMAGE}; \ 197 else \ 198 kind load docker-image --name ${CLUSTER_NAME} ${VERRAZZANO_APPLICATION_OPERATOR_IMAGE}:${DOCKER_IMAGE_TAG}; \ 199 fi 200 201 .PHONY: delete-cluster 202 delete-cluster: 203 kind delete cluster --name ${CLUSTER_NAME} 204 205 .PHONY: push-tag 206 push-tag: 207 PUBLISH_TAG="${DOCKER_IMAGE_TAG}"; \ 208 echo "Tagging and pushing image ${DOCKER_IMAGE_FULLNAME}:$$PUBLISH_TAG"; \ 209 docker pull "${DOCKER_IMAGE_FULLNAME}:${DOCKER_IMAGE_TAG}"; \ 210 docker tag "${DOCKER_IMAGE_FULLNAME}:${DOCKER_IMAGE_TAG}" "${DOCKER_IMAGE_FULLNAME}:$$PUBLISH_TAG"; \ 211 $(call retry_docker_push,"${DOCKER_IMAGE_FULLNAME}:$$PUBLISH_TAG") 212 213 .PHONY: create-test-deploy 214 create-test-deploy: 215 if [ -n "${VZ_DEV_IMAGE}" ]; then \ 216 IMAGE=$$(echo $${VZ_DEV_IMAGE} | cut -f 1 -d :) ; \ 217 IMAGE_TAG=$$(echo $${VZ_DEV_IMAGE} | cut -f 2 -d :) ; \ 218 DOCKER_IMAGE_FULLNAME=$${IMAGE} DOCKER_IMAGE_TAG=$${IMAGE_TAG} VERRAZZANO_APPLICATION_OPERATOR_IMAGE=$${VZ_APP_OP_IMAGE} VERRAZZANO_CLUSTER_OPERATOR_IMAGE=$${VZ_CLUSTER_OP_IMAGE} VERRAZZANO_AUTHPROXY_IMAGE=$${VZ_AUTHPROXY_IMAGE} $(MAKE) generate-operator-yaml ; \ 219 else \ 220 echo "VZ_DEV_IMAGE not defined, please set it to a valid image name/tag"; \ 221 fi 222 223 .PHONY: generate-bom 224 generate-bom: 225 @echo Generating BOM verrazzano-platform-operator image ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} 226 @echo verrazzano-application-operator image ${VERRAZZANO_APPLICATION_OPERATOR_IMAGE} 227 @echo verrazzano-cluster-operator image ${VERRAZZANO_CLUSTER_OPERATOR_IMAGE} 228 @echo verrazzano-authproxy image ${VERRAZZANO_AUTHPROXY_IMAGE} 229 mkdir out || true 230 ../tools/scripts/generate_bom.sh verrazzano-bom.json ${VERRAZZANO_VERSION} ${VERRAZZANO_APPLICATION_OPERATOR_IMAGE} ${VERRAZZANO_CLUSTER_OPERATOR_IMAGE} ${VERRAZZANO_AUTHPROXY_IMAGE} ${DOCKER_IMAGE_NAME} ${DOCKER_IMAGE_TAG} out/generated-verrazzano-bom.json 231 232 .PHONY: generate-catalog 233 generate-catalog: 234 @echo Generating catalog with verrazzano version ${VERRAZZANO_VERSION} 235 mkdir out || true 236 ../tools/scripts/generate_catalog.sh manifests/catalog/catalog.yaml ${VERRAZZANO_VERSION} out/generated-catalog.yaml