-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🌱 Makefile: fix issues with repeated evaluations, other minor improvements #813
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,15 +2,25 @@ | |
# Configuration Variables # | ||
########################### | ||
# Image URL to use all building/pushing image targets | ||
export IMAGE_REPO ?= quay.io/operator-framework/operator-controller | ||
export IMAGE_TAG ?= devel | ||
export CERT_MGR_VERSION ?= v1.9.0 | ||
export CATALOGD_VERSION ?= $(shell go list -mod=mod -m -f "{{.Version}}" github.com/operator-framework/catalogd) | ||
export KAPP_VERSION ?= $(shell go list -mod=mod -m -f "{{.Version}}" github.com/vmware-tanzu/carvel-kapp-controller) | ||
export RUKPAK_VERSION=$(shell go list -mod=mod -m -f "{{.Version}}" github.com/operator-framework/rukpak) | ||
export WAIT_TIMEOUT ?= 60s | ||
IMG?=$(IMAGE_REPO):$(IMAGE_TAG) | ||
TESTDATA_DIR := testdata | ||
ifeq ($(origin IMAGE_REPO), undefined) | ||
IMAGE_REPO := quay.io/operator-framework/operator-controller | ||
endif | ||
export IMAGE_REPO | ||
|
||
ifeq ($(origin IMAGE_TAG), undefined) | ||
IMAGE_TAG := devel | ||
endif | ||
export IMAGE_TAG | ||
|
||
IMG := $(IMAGE_REPO):$(IMAGE_TAG) | ||
|
||
|
||
# Define dependency versions (use go.mod if we also use Go code from dependency) | ||
export CERT_MGR_VERSION := v1.9.0 | ||
export CATALOGD_VERSION := $(shell go list -mod=mod -m -f "{{.Version}}" github.com/operator-framework/catalogd) | ||
export KAPP_VERSION := $(shell go list -mod=mod -m -f "{{.Version}}" github.com/vmware-tanzu/carvel-kapp-controller) | ||
export RUKPAK_VERSION := $(shell go list -mod=mod -m -f "{{.Version}}" github.com/operator-framework/rukpak) | ||
export WAIT_TIMEOUT := 60s | ||
|
||
# By default setup-envtest will write to $XDG_DATA_HOME, or $HOME/.local/share if that is not defined. | ||
# If $HOME is not set, we need to specify a binary directory to prevent an error in setup-envtest. | ||
|
@@ -23,34 +33,28 @@ endif | |
# bingo manages consistent tooling versions for things like kind, kustomize, etc. | ||
include .bingo/Variables.mk | ||
|
||
# ARTIFACT_PATH is the absolute path to the directory where the operator-controller e2e tests will store the artifacts | ||
# for example: ARTIFACT_PATH=/tmp/artifacts make test | ||
joelanford marked this conversation as resolved.
Show resolved
Hide resolved
|
||
export ARTIFACT_PATH ?= | ||
|
||
OPERATOR_CONTROLLER_NAMESPACE ?= operator-controller-system | ||
KIND_CLUSTER_NAME ?= operator-controller | ||
KIND_CLUSTER_NAME := operator-controller | ||
# Not guaranteed to have patch releases available and node image tags are full versions (i.e v1.28.0 - no v1.28, v1.29, etc.) | ||
# The KIND_NODE_VERSION is set by getting the version of the k8s.io/client-go dependency from the go.mod | ||
# and sets major version to "1" and the patch version to "0". For example, a client-go version of v0.28.5 | ||
# will map to a KIND_NODE_VERSION of 1.28.0 | ||
KIND_NODE_VERSION = $(shell go list -m k8s.io/client-go | cut -d" " -f2 | sed 's/^v0\.\([[:digit:]]\{1,\}\)\.[[:digit:]]\{1,\}$$/1.\1.0/') | ||
KIND_CLUSTER_IMAGE ?= kindest/node:v${KIND_NODE_VERSION} | ||
|
||
CONTAINER_RUNTIME ?= docker | ||
KIND_NODE_VERSION := $(shell go list -m k8s.io/client-go | cut -d" " -f2 | sed 's/^v0\.\([[:digit:]]\{1,\}\)\.[[:digit:]]\{1,\}$$/1.\1.0/') | ||
KIND_CLUSTER_IMAGE := kindest/node:v$(KIND_NODE_VERSION) | ||
|
||
KUSTOMIZE_BUILD_DIR ?= config/default | ||
|
||
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) | ||
ifeq (,$(shell go env GOBIN)) | ||
GOBIN=$(shell go env GOPATH)/bin | ||
ifneq (, $(shell command -v docker 2>/dev/null)) | ||
CONTAINER_RUNTIME := docker | ||
else ifneq (, $(shell command -v podman 2>/dev/null)) | ||
CONTAINER_RUNTIME := podman | ||
else | ||
GOBIN=$(shell go env GOBIN) | ||
$(error Could not find docker or podman in path!) | ||
endif | ||
|
||
KUSTOMIZE_BUILD_DIR := config/default | ||
|
||
# Setting SHELL to bash allows bash commands to be executed by recipes. | ||
# Options are set to exit when a recipe line exits non-zero or a piped command fails. | ||
SHELL = /usr/bin/env bash -o pipefail | ||
.SHELLFLAGS = -ec | ||
SHELL := /usr/bin/env bash -o pipefail | ||
.SHELLFLAGS := -ec | ||
|
||
# Disable -j flag for make | ||
.NOTPARALLEL: | ||
|
@@ -83,7 +87,7 @@ help-extended: #HELP Display extended help. | |
|
||
.PHONY: lint | ||
lint: $(GOLANGCI_LINT) #HELP Run golangci linter. | ||
$(GOLANGCI_LINT) run --build-tags $(GO_BUILD_TAGS) $(GOLANGCI_LINT_ARGS) | ||
$(GOLANGCI_LINT) run $(GOLANGCI_LINT_ARGS) | ||
|
||
.PHONY: tidy | ||
tidy: #HELP Update dependencies. | ||
|
@@ -114,38 +118,43 @@ test: manifests generate fmt vet test-unit test-e2e #HELP Run all tests. | |
|
||
.PHONY: e2e | ||
e2e: $(SETUP_ENVTEST) #EXHELP Run the e2e tests. | ||
go test -tags $(GO_BUILD_TAGS) -v ./test/e2e/... | ||
go test -v ./test/e2e/... | ||
|
||
export REG_PKG_NAME=registry-operator | ||
export PLAIN_PKG_NAME=plain-operator | ||
export CATALOG_IMG=${E2E_REGISTRY_NAME}.${E2E_REGISTRY_NAMESPACE}.svc:5000/test-catalog:e2e | ||
E2E_REGISTRY_NAME := docker-registry | ||
E2E_REGISTRY_NAMESPACE := operator-controller-e2e | ||
export REG_PKG_NAME := registry-operator | ||
Comment on lines
+123
to
+125
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @joelanford I found a misalignment here ;) I would prefer if we could avoid formatting like this as it is hard to maintain this style. This also leads to larger diffs: for example, here I wanted to only remove one line but I had to change another for it to not look weird. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
export PLAIN_PKG_NAME := plain-operator | ||
export CATALOG_IMG := $(E2E_REGISTRY_NAME).$(E2E_REGISTRY_NAMESPACE).svc:5000/test-catalog:e2e | ||
.PHONY: test-ext-dev-e2e | ||
test-ext-dev-e2e: $(SETUP_ENVTEST) $(OPERATOR_SDK) $(KUSTOMIZE) $(KIND) #HELP Run extension create, upgrade and delete tests. | ||
test/extension-developer-e2e/setup.sh $(OPERATOR_SDK) $(CONTAINER_RUNTIME) $(KUSTOMIZE) $(KIND) $(KIND_CLUSTER_NAME) ${E2E_REGISTRY_NAMESPACE} | ||
go test -tags $(GO_BUILD_TAGS) -v ./test/extension-developer-e2e/... | ||
test/extension-developer-e2e/setup.sh $(OPERATOR_SDK) $(CONTAINER_RUNTIME) $(KUSTOMIZE) $(KIND) $(KIND_CLUSTER_NAME) $(E2E_REGISTRY_NAMESPACE) | ||
go test -v ./test/extension-developer-e2e/... | ||
|
||
.PHONY: test-unit | ||
ENVTEST_VERSION = $(shell go list -m k8s.io/client-go | cut -d" " -f2 | sed 's/^v0\.\([[:digit:]]\{1,\}\)\.[[:digit:]]\{1,\}$$/1.\1.x/') | ||
UNIT_TEST_DIRS=$(shell go list ./... | grep -v /test/) | ||
ENVTEST_VERSION := $(shell go list -m k8s.io/client-go | cut -d" " -f2 | sed 's/^v0\.\([[:digit:]]\{1,\}\)\.[[:digit:]]\{1,\}$$/1.\1.x/') | ||
UNIT_TEST_DIRS := $(shell go list ./... | grep -v /test/) | ||
test-unit: $(SETUP_ENVTEST) #HELP Run the unit tests | ||
eval $$($(SETUP_ENVTEST) use -p env $(ENVTEST_VERSION) $(SETUP_ENVTEST_BIN_DIR_OVERRIDE)) && go test -tags $(GO_BUILD_TAGS) -count=1 -short $(UNIT_TEST_DIRS) -coverprofile cover.out | ||
eval $$($(SETUP_ENVTEST) use -p env $(ENVTEST_VERSION) $(SETUP_ENVTEST_BIN_DIR_OVERRIDE)) && go test -count=1 -short $(UNIT_TEST_DIRS) -coverprofile cover.out | ||
|
||
E2E_REGISTRY_NAME=docker-registry | ||
E2E_REGISTRY_NAMESPACE=operator-controller-e2e | ||
image-registry: ## Setup in-cluster image registry | ||
./test/tools/image-registry.sh ${E2E_REGISTRY_NAMESPACE} ${E2E_REGISTRY_NAME} | ||
./test/tools/image-registry.sh $(E2E_REGISTRY_NAMESPACE) $(E2E_REGISTRY_NAME) | ||
|
||
build-push-e2e-catalog: ## Build the testdata catalog used for e2e tests and push it to the image registry | ||
./test/tools/build-push-e2e-catalog.sh ${E2E_REGISTRY_NAMESPACE} ${CATALOG_IMG} | ||
./test/tools/build-push-e2e-catalog.sh $(E2E_REGISTRY_NAMESPACE) $(CATALOG_IMG) | ||
|
||
# When running the e2e suite, you can set the ARTIFACT_PATH variable to the absolute path | ||
# of the directory for the operator-controller e2e tests to store the artifacts, which | ||
# may be helpful for debugging purposes after a test run. | ||
# | ||
# for example: ARTIFACT_PATH=/tmp/artifacts make test-e2e | ||
.PHONY: test-e2e | ||
test-e2e: KIND_CLUSTER_NAME=operator-controller-e2e | ||
test-e2e: KUSTOMIZE_BUILD_DIR=config/e2e | ||
test-e2e: GO_BUILD_FLAGS=-cover | ||
test-e2e: KIND_CLUSTER_NAME := operator-controller-e2e | ||
test-e2e: KUSTOMIZE_BUILD_DIR := config/e2e | ||
test-e2e: GO_BUILD_FLAGS := -cover | ||
test-e2e: run image-registry build-push-e2e-catalog kind-load-test-artifacts e2e e2e-coverage kind-clean #HELP Run e2e test suite on local kind cluster | ||
|
||
.PHONY: extension-developer-e2e | ||
extension-developer-e2e: KIND_CLUSTER_NAME=operator-controller-ext-dev-e2e #EXHELP Run extension-developer e2e on local kind cluster | ||
extension-developer-e2e: KIND_CLUSTER_NAME := operator-controller-ext-dev-e2e #EXHELP Run extension-developer e2e on local kind cluster | ||
extension-developer-e2e: run image-registry test-ext-dev-e2e kind-clean | ||
|
||
.PHONY: e2e-coverage | ||
|
@@ -156,29 +165,29 @@ e2e-coverage: | |
kind-load: $(KIND) #EXHELP Loads the currently constructed image onto the cluster. | ||
$(CONTAINER_RUNTIME) save $(IMG) | $(KIND) load image-archive /dev/stdin --name $(KIND_CLUSTER_NAME) | ||
|
||
kind-deploy: export MANIFEST="./operator-controller.yaml" | ||
kind-deploy: export MANIFEST := ./operator-controller.yaml | ||
kind-deploy: manifests $(KUSTOMIZE) #EXHELP Install controller and dependencies onto the kind cluster. | ||
$(KUSTOMIZE) build $(KUSTOMIZE_BUILD_DIR) > operator-controller.yaml | ||
envsubst '$$CATALOGD_VERSION,$$CERT_MGR_VERSION,$$KAPP_VERSION,$$RUKPAK_VERSION,$$MANIFEST' < scripts/install.tpl.sh | bash -s | ||
|
||
.PHONY: kind-cluster | ||
kind-cluster: $(KIND) #EXHELP Standup a kind cluster. | ||
-$(KIND) delete cluster --name ${KIND_CLUSTER_NAME} | ||
-$(KIND) delete cluster --name $(KIND_CLUSTER_NAME) | ||
# kind-config.yaml can be deleted after upgrading to Kubernetes 1.30 | ||
$(KIND) create cluster --name ${KIND_CLUSTER_NAME} --image ${KIND_CLUSTER_IMAGE} --config ./kind-config.yaml | ||
$(KIND) export kubeconfig --name ${KIND_CLUSTER_NAME} | ||
$(KIND) create cluster --name $(KIND_CLUSTER_NAME) --image $(KIND_CLUSTER_IMAGE) --config ./kind-config.yaml | ||
$(KIND) export kubeconfig --name $(KIND_CLUSTER_NAME) | ||
|
||
.PHONY: kind-clean | ||
kind-clean: $(KIND) #EXHELP Delete the kind cluster. | ||
$(KIND) delete cluster --name ${KIND_CLUSTER_NAME} | ||
$(KIND) delete cluster --name $(KIND_CLUSTER_NAME) | ||
|
||
.PHONY: kind-load-test-artifacts | ||
kind-load-test-artifacts: $(KIND) #EXHELP Load the e2e testdata container images into a kind cluster. | ||
$(CONTAINER_RUNTIME) build $(TESTDATA_DIR)/bundles/registry-v1/prometheus-operator.v1.0.0 -t localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.0 | ||
$(CONTAINER_RUNTIME) build testdata/bundles/registry-v1/prometheus-operator.v1.0.0 -t localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.0 | ||
$(CONTAINER_RUNTIME) tag localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.0 localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.1 | ||
$(CONTAINER_RUNTIME) tag localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.0 localhost/testdata/bundles/registry-v1/prometheus-operator:v1.2.0 | ||
$(CONTAINER_RUNTIME) tag localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.0 localhost/testdata/bundles/registry-v1/prometheus-operator:v2.0.0 | ||
$(CONTAINER_RUNTIME) build $(TESTDATA_DIR)/bundles/plain-v0/plain.v0.1.0 -t localhost/testdata/bundles/plain-v0/plain:v0.1.0 | ||
$(CONTAINER_RUNTIME) build testdata/bundles/plain-v0/plain.v0.1.0 -t localhost/testdata/bundles/plain-v0/plain:v0.1.0 | ||
$(KIND) load docker-image localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.0 --name $(KIND_CLUSTER_NAME) | ||
$(KIND) load docker-image localhost/testdata/bundles/registry-v1/prometheus-operator:v1.0.1 --name $(KIND_CLUSTER_NAME) | ||
$(KIND) load docker-image localhost/testdata/bundles/registry-v1/prometheus-operator:v1.2.0 --name $(KIND_CLUSTER_NAME) | ||
|
@@ -188,28 +197,35 @@ kind-load-test-artifacts: $(KIND) #EXHELP Load the e2e testdata container images | |
|
||
#SECTION Build | ||
|
||
export VERSION ?= $(shell git describe --tags --always --dirty) | ||
export CGO_ENABLED ?= 0 | ||
export GO_BUILD_ASMFLAGS ?= all=-trimpath=${PWD} | ||
export GO_BUILD_LDFLAGS ?= -s -w -X $(shell go list -m)/version.Version=$(VERSION) | ||
export GO_BUILD_GCFLAGS ?= all=-trimpath=${PWD} | ||
export GO_BUILD_TAGS ?= upstream | ||
export GO_BUILD_FLAGS ?= | ||
ifeq ($(origin VERSION), undefined) | ||
VERSION := $(shell git describe --tags --always --dirty) | ||
endif | ||
export VERSION | ||
|
||
ifeq ($(origin CGO_ENABLED), undefined) | ||
CGO_ENABLED := 0 | ||
endif | ||
export CGO_ENABLED | ||
|
||
export GO_BUILD_ASMFLAGS := all=-trimpath=$(PWD) | ||
export GO_BUILD_LDFLAGS := -s -w -X $(shell go list -m)/version.Version=$(VERSION) | ||
export GO_BUILD_GCFLAGS := all=-trimpath=$(PWD) | ||
export GO_BUILD_FLAGS := | ||
|
||
BUILDCMD = go build $(GO_BUILD_FLAGS) -tags '$(GO_BUILD_TAGS)' -ldflags '$(GO_BUILD_LDFLAGS)' -gcflags '$(GO_BUILD_GCFLAGS)' -asmflags '$(GO_BUILD_ASMFLAGS)' -o $(BUILDBIN)/manager ./cmd/manager | ||
BUILDCMD = go build $(GO_BUILD_FLAGS) -ldflags '$(GO_BUILD_LDFLAGS)' -gcflags '$(GO_BUILD_GCFLAGS)' -asmflags '$(GO_BUILD_ASMFLAGS)' -o $(BUILDBIN)/manager ./cmd/manager | ||
|
||
.PHONY: build-deps | ||
build-deps: manifests generate fmt vet | ||
|
||
.PHONY: build go-build-local | ||
build: build-deps go-build-local #HELP Build manager binary for current GOOS and GOARCH. Default target. | ||
go-build-local: BUILDBIN = bin | ||
go-build-local: BUILDBIN := bin | ||
go-build-local: | ||
$(BUILDCMD) | ||
|
||
.PHONY: build-linux go-build-linux | ||
build-linux: build-deps go-build-linux #EXHELP Build manager binary for GOOS=linux and local GOARCH. | ||
go-build-linux: BUILDBIN = bin/linux | ||
go-build-linux: BUILDBIN := bin/linux | ||
go-build-linux: | ||
GOOS=linux $(BUILDCMD) | ||
|
||
|
@@ -218,27 +234,33 @@ run: docker-build kind-cluster kind-load kind-deploy #HELP Build the operator-co | |
|
||
.PHONY: docker-build | ||
docker-build: build-linux #EXHELP Build docker image for operator-controller with GOOS=linux and local GOARCH. | ||
$(CONTAINER_RUNTIME) build -t ${IMG} -f Dockerfile ./bin/linux | ||
$(CONTAINER_RUNTIME) build -t $(IMG) -f Dockerfile ./bin/linux | ||
|
||
#SECTION Release | ||
ifeq ($(origin ENABLE_RELEASE_PIPELINE), undefined) | ||
ENABLE_RELEASE_PIPELINE := false | ||
endif | ||
ifeq ($(origin GORELEASER_ARGS), undefined) | ||
GORELEASER_ARGS := --snapshot --clean | ||
endif | ||
|
||
export ENABLE_RELEASE_PIPELINE ?= false | ||
export GORELEASER_ARGS ?= --snapshot --clean | ||
export ENABLE_RELEASE_PIPELINE | ||
export GORELEASER_ARGS | ||
|
||
.PHONY: release | ||
release: $(GORELEASER) #EXHELP Runs goreleaser for the operator-controller. By default, this will run only as a snapshot and will not publish any artifacts unless it is run with different arguments. To override the arguments, run with "GORELEASER_ARGS=...". When run as a github action from a tag, this target will publish a full release. | ||
$(GORELEASER) $(GORELEASER_ARGS) | ||
|
||
.PHONY: quickstart | ||
quickstart: export MANIFEST="https://github.com/operator-framework/operator-controller/releases/download/$(VERSION)/operator-controller.yaml" | ||
quickstart: export MANIFEST := https://github.com/operator-framework/operator-controller/releases/download/$(VERSION)/operator-controller.yaml | ||
quickstart: $(KUSTOMIZE) manifests #EXHELP Generate the installation release manifests and scripts. | ||
$(KUSTOMIZE) build $(KUSTOMIZE_BUILD_DIR) | sed "s/:devel/:$(VERSION)/g" > operator-controller.yaml | ||
envsubst '$$CATALOGD_VERSION,$$CERT_MGR_VERSION,$$KAPP_VERSION,$$RUKPAK_VERSION,$$MANIFEST' < scripts/install.tpl.sh > install.sh | ||
|
||
##@ Docs | ||
|
||
VENVDIR=$(abspath docs/.venv) | ||
REQUIREMENTS_TXT=docs/requirements.txt | ||
VENVDIR := $(abspath docs/.venv) | ||
REQUIREMENTS_TXT := docs/requirements.txt | ||
|
||
.PHONY: build-docs | ||
build-docs: venv | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How does this new variable assignment impact doing something like:
IIUC using the
?=
variable assignment would only expand the variables if they were not already defined via something like the above example. Is overriding the values still possible with this new variable assignment?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we want the variables to be overridable, they would need this sort of construction:
Does the catalogd version need to be configurable like that? If so, I can change it. Let me know if there are other variables in the same boat that you see with the non-overridable assignment.