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