From a5070637552ff63cd30de7184b6a8a5e341824ae Mon Sep 17 00:00:00 2001 From: ira-pandey1 Date: Fri, 7 Mar 2025 14:43:26 +0530 Subject: [PATCH 1/4] Added test cases for list.go and github.go --- hack/tools/release/notes/list_test.go | 140 ++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/hack/tools/release/notes/list_test.go b/hack/tools/release/notes/list_test.go index 688abc9a1c0e..d74b4ae75833 100644 --- a/hack/tools/release/notes/list_test.go +++ b/hack/tools/release/notes/list_test.go @@ -65,3 +65,143 @@ func Test_buildSetOfPRNumbers(t *testing.T) { }) } } + +func Test_githubFromToPRLister_listPRs(t *testing.T) { + type fields struct { + client *githubClient + fromRef *ref + toRef *ref + branch string + } + type args struct { + previousReleaseRef ref + } + tests := []struct { + name string + fields *githubFromToPRLister + args ref + wantErr bool + }{ + { + name: "Successful PR Listing", + fields: &githubFromToPRLister{ + client: &githubClient{ + repo: "kubernetes-sigs/kind", + }, + fromRef: ref{ + reType: "tags", + value: "v0.26.0", + }, + toRef: ref{ + reType: "tags", + value: "v0.27.0", + }, + branch: "main", + }, + args: ref{ + reType: "tags", + value: "v0.26.0", + }, + wantErr: false, + }, + { + name: "Setting previousReleaseRef.value blank - should use toRef and fromRef from fields", + fields: &githubFromToPRLister{ + client: &githubClient{ + repo: "kubernetes-sigs/kind", + }, + fromRef: ref{ + reType: "tags", + value: "v0.26.0", + }, + toRef: ref{ + reType: "tags", + value: "v0.27.0", + }, + branch: "main", + }, + args: ref{ + reType: "tags", + value: "", + }, + wantErr: false, + }, + { + name: "Create PR List when fromRef is not set", + fields: &githubFromToPRLister{ + client: &githubClient{ + repo: "kubernetes-sigs/kind", + }, + toRef: ref{ + reType: "tags", + value: "v0.27.0", + }, + branch: "main", + }, + args: ref{ + reType: "tags", + value: "v0.26.0", + }, + wantErr: false, + }, + { + name: "Fail when previousReleaseRef.value is set to invalid", + fields: &githubFromToPRLister{ + client: &githubClient{ + repo: "kubernetes-sigs/kind", + }, + fromRef: ref{ + reType: "tags", + value: "v0.26.0", + }, + toRef: ref{ + reType: "tags", + value: "v0.27.0", + }, + branch: "main", + }, + args: ref{ + reType: "tags", + value: "invalid", + }, + wantErr: true, + }, + { + name: "Fail when toRef and previousReleaseRef set blank", + fields: &githubFromToPRLister{ + client: &githubClient{ + repo: "kubernetes-sigs/kind", + }, + fromRef: ref{ + reType: "tags", + value: "v0.26.0", + }, + toRef: ref{ + reType: "tags", + value: "", + }, + branch: "main", + }, + args: ref{ + reType: "tags", + value: "", + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + l := &githubFromToPRLister{ + client: tt.fields.client, + fromRef: tt.fields.fromRef, + toRef: tt.fields.toRef, + branch: tt.fields.branch, + } + _, err := l.listPRs(tt.args) + if (err != nil) != tt.wantErr { + t.Errorf("githubFromToPRLister.listPRs() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} From 8b3ece593caf8f3a829208631d4408dc80b398a0 Mon Sep 17 00:00:00 2001 From: ira-pandey1 Date: Wed, 26 Mar 2025 10:52:14 +0530 Subject: [PATCH 2/4] Linting issues fixed --- hack/tools/release/notes/list_test.go | 67 ++++++++++++--------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/hack/tools/release/notes/list_test.go b/hack/tools/release/notes/list_test.go index d74b4ae75833..c5848e236d9f 100644 --- a/hack/tools/release/notes/list_test.go +++ b/hack/tools/release/notes/list_test.go @@ -67,15 +67,6 @@ func Test_buildSetOfPRNumbers(t *testing.T) { } func Test_githubFromToPRLister_listPRs(t *testing.T) { - type fields struct { - client *githubClient - fromRef *ref - toRef *ref - branch string - } - type args struct { - previousReleaseRef ref - } tests := []struct { name string fields *githubFromToPRLister @@ -85,106 +76,106 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { { name: "Successful PR Listing", fields: &githubFromToPRLister{ - client: &githubClient{ - repo: "kubernetes-sigs/kind", + client: &githubClient{ + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v0.27.0", }, - branch: "main", + branch: "main", }, args: ref{ reType: "tags", - value: "v0.26.0", + value: "v0.26.0", }, wantErr: false, }, { name: "Setting previousReleaseRef.value blank - should use toRef and fromRef from fields", fields: &githubFromToPRLister{ - client: &githubClient{ - repo: "kubernetes-sigs/kind", + client: &githubClient{ + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v0.27.0", }, - branch: "main", + branch: "main", }, args: ref{ reType: "tags", - value: "", + value: "", }, wantErr: false, }, { name: "Create PR List when fromRef is not set", fields: &githubFromToPRLister{ - client: &githubClient{ - repo: "kubernetes-sigs/kind", + client: &githubClient{ + repo: "kubernetes-sigs/kind", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v0.27.0", }, - branch: "main", + branch: "main", }, args: ref{ reType: "tags", - value: "v0.26.0", + value: "v0.26.0", }, wantErr: false, }, { name: "Fail when previousReleaseRef.value is set to invalid", fields: &githubFromToPRLister{ - client: &githubClient{ - repo: "kubernetes-sigs/kind", + client: &githubClient{ + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v0.27.0", }, - branch: "main", + branch: "main", }, args: ref{ reType: "tags", - value: "invalid", + value: "invalid", }, wantErr: true, }, { name: "Fail when toRef and previousReleaseRef set blank", fields: &githubFromToPRLister{ - client: &githubClient{ - repo: "kubernetes-sigs/kind", + client: &githubClient{ + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "", + value: "", }, - branch: "main", + branch: "main", }, args: ref{ reType: "tags", - value: "", + value: "", }, wantErr: true, }, From 321b6c99b4853b738b2a0996c8befdf1cdac5635 Mon Sep 17 00:00:00 2001 From: ira-pandey1 Date: Wed, 14 May 2025 16:15:03 +0530 Subject: [PATCH 3/4] Temp Changes --- Makefile | 172 ++++++++++++++++++-------- hack/tools/release/notes/list_test.go | 50 ++++---- 2 files changed, 140 insertions(+), 82 deletions(-) diff --git a/Makefile b/Makefile index f85bc16b8ce4..70cf9ab9ef73 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ SHELL:=/usr/bin/env bash # # Go. # -GO_VERSION ?= 1.23.6 +GO_VERSION ?= 1.23.0 GO_DIRECTIVE_VERSION ?= 1.23.0 GO_CONTAINER_IMAGE ?= docker.io/library/golang:$(GO_VERSION) @@ -79,10 +79,8 @@ export PATH := $(abspath $(TOOLS_BIN_DIR)):$(PATH) # GINKGO_FOCUS ?= GINKGO_SKIP ?= -GINKGO_LABEL_FILTER ?= GINKGO_NODES ?= 1 -GINKGO_TIMEOUT ?= 3h -GINKGO_ARGS ?= +GINKGO_TIMEOUT ?= 2h GINKGO_POLL_PROGRESS_AFTER ?= 60m GINKGO_POLL_PROGRESS_INTERVAL ?= 5m E2E_CONF_FILE ?= $(ROOT_DIR)/$(TEST_DIR)/e2e/config/docker.yaml @@ -102,7 +100,7 @@ get_go_version = $(shell go list -m $1 | awk '{print $$2}') # Binaries. # # Note: Need to use abspath so we can invoke these from subdirectories -KUSTOMIZE_VER := v5.6.0 +KUSTOMIZE_VER := v5.3.0 KUSTOMIZE_BIN := kustomize KUSTOMIZE := $(abspath $(TOOLS_BIN_DIR)/$(KUSTOMIZE_BIN)-$(KUSTOMIZE_VER)) KUSTOMIZE_PKG := sigs.k8s.io/kustomize/kustomize/v5 @@ -112,7 +110,7 @@ SETUP_ENVTEST_BIN := setup-envtest SETUP_ENVTEST := $(abspath $(TOOLS_BIN_DIR)/$(SETUP_ENVTEST_BIN)-$(SETUP_ENVTEST_VER)) SETUP_ENVTEST_PKG := sigs.k8s.io/controller-runtime/tools/setup-envtest -CONTROLLER_GEN_VER := v0.17.2 +CONTROLLER_GEN_VER := v0.17.0 CONTROLLER_GEN_BIN := controller-gen CONTROLLER_GEN := $(abspath $(TOOLS_BIN_DIR)/$(CONTROLLER_GEN_BIN)-$(CONTROLLER_GEN_VER)) CONTROLLER_GEN_PKG := sigs.k8s.io/controller-tools/cmd/controller-gen @@ -122,13 +120,18 @@ GOTESTSUM_BIN := gotestsum GOTESTSUM := $(abspath $(TOOLS_BIN_DIR)/$(GOTESTSUM_BIN)-$(GOTESTSUM_VER)) GOTESTSUM_PKG := gotest.tools/gotestsum -CONVERSION_GEN_VER := v0.32.2 +CONVERSION_GEN_VER := v0.32.0 CONVERSION_GEN_BIN := conversion-gen # We are intentionally using the binary without version suffix, to avoid the version # in generated files. CONVERSION_GEN := $(abspath $(TOOLS_BIN_DIR)/$(CONVERSION_GEN_BIN)) CONVERSION_GEN_PKG := k8s.io/code-generator/cmd/conversion-gen +ENVSUBST_BIN := envsubst +ENVSUBST_VER := $(call get_go_version,github.com/drone/envsubst/v2) +ENVSUBST := $(abspath $(TOOLS_BIN_DIR)/$(ENVSUBST_BIN)-$(ENVSUBST_VER)) +ENVSUBST_PKG := github.com/drone/envsubst/v2/cmd/envsubst + GO_APIDIFF_VER := v0.8.2 GO_APIDIFF_BIN := go-apidiff GO_APIDIFF := $(abspath $(TOOLS_BIN_DIR)/$(GO_APIDIFF_BIN)-$(GO_APIDIFF_VER)) @@ -164,12 +167,8 @@ GOLANGCI_LINT_VER := $(shell cat .github/workflows/pr-golangci-lint.yaml | grep GOLANGCI_LINT := $(abspath $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)-$(GOLANGCI_LINT_VER)) GOLANGCI_LINT_PKG := github.com/golangci/golangci-lint/cmd/golangci-lint -GOLANGCI_LINT_KAL_BIN := golangci-lint-kal -GOLANGCI_LINT_KAL_VER := $(shell cat ./hack/tools/.custom-gcl.yaml | grep name: | sed 's/name: golangci-lint-kal-//') -GOLANGCI_LINT_KAL := $(abspath $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_KAL_BIN)-$(GOLANGCI_LINT_KAL_VER)) - GOVULNCHECK_BIN := govulncheck -GOVULNCHECK_VER := v1.1.4 +GOVULNCHECK_VER := v1.0.4 GOVULNCHECK := $(abspath $(TOOLS_BIN_DIR)/$(GOVULNCHECK_BIN)-$(GOVULNCHECK_VER)) GOVULNCHECK_PKG := golang.org/x/vuln/cmd/govulncheck @@ -226,6 +225,10 @@ KUBEADM_CONTROL_PLANE_CONTROLLER_IMG ?= $(REGISTRY)/$(KUBEADM_CONTROL_PLANE_IMAG CAPD_IMAGE_NAME ?= capd-manager CAPD_CONTROLLER_IMG ?= $(REGISTRY)/$(CAPD_IMAGE_NAME) +# capim +CAPIM_IMAGE_NAME ?= capim-manager +CAPIM_CONTROLLER_IMG ?= $(REGISTRY)/$(CAPIM_IMAGE_NAME) + # clusterctl CLUSTERCTL_MANIFEST_DIR := cmd/clusterctl/config CLUSTERCTL_IMAGE_NAME ?= clusterctl @@ -268,7 +271,7 @@ help: # Display this help ##@ generate: -ALL_GENERATE_MODULES = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure test-extension +ALL_GENERATE_MODULES = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure test-extension .PHONY: generate generate: ## Run all generate-manifests-*, generate-go-deepcopy-*, generate-go-conversions-* and generate-go-openapi targets @@ -360,6 +363,21 @@ generate-manifests-docker-infrastructure: $(CONTROLLER_GEN) ## Generate manifest output:webhook:dir=./config/webhook \ webhook + +.PHONY: generate-manifests-in-memory-infrastructure +generate-manifests-in-memory-infrastructure: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc. for in-memory infrastructure provider + $(MAKE) clean-generated-yaml SRC_DIRS="$(CAPIM_DIR)/config/crd/bases,$(CAPIM_DIR)/config/webhook/manifests.yaml" + cd $(CAPIM_DIR); $(CONTROLLER_GEN) \ + paths=./ \ + paths=./api/... \ + paths=./internal/controllers/... \ + paths=./internal/webhooks/... \ + crd:crdVersions=v1 \ + rbac:roleName=manager-role \ + output:crd:dir=./config/crd/bases \ + output:webhook:dir=./config/webhook \ + webhook + .PHONY: generate-manifests-test-extension generate-manifests-test-extension: $(CONTROLLER_GEN) ## Generate manifests e.g. RBAC for test-extension provider cd ./test/extension; $(CONTROLLER_GEN) \ @@ -402,7 +420,7 @@ generate-go-deepcopy-kubeadm-control-plane: $(CONTROLLER_GEN) ## Generate deepco paths=./controlplane/kubeadm/api/... .PHONY: generate-go-deepcopy-docker-infrastructure -generate-go-deepcopy-docker-infrastructure: $(CONTROLLER_GEN) generate-go-deepcopy-in-memory-infrastructure ## Generate deepcopy go code for docker infrastructure provider +generate-go-deepcopy-docker-infrastructure: $(CONTROLLER_GEN) ## Generate deepcopy go code for docker infrastructure provider $(MAKE) clean-generated-deepcopy SRC_DIRS="$(CAPD_DIR)/api,$(CAPD_DIR)/$(EXP_DIR)/api" cd $(CAPD_DIR); $(CONTROLLER_GEN) \ object:headerFile=../../../hack/boilerplate/boilerplate.generatego.txt \ @@ -410,11 +428,12 @@ generate-go-deepcopy-docker-infrastructure: $(CONTROLLER_GEN) generate-go-deepco paths=./$(EXP_DIR)/api/... .PHONY: generate-go-deepcopy-in-memory-infrastructure -generate-go-deepcopy-in-memory-infrastructure: $(CONTROLLER_GEN) ## Generate deepcopy go code for in-memory cloud resources - $(MAKE) clean-generated-deepcopy SRC_DIRS="$(CAPIM_DIR)/pkg/cloud/api" +generate-go-deepcopy-in-memory-infrastructure: $(CONTROLLER_GEN) ## Generate deepcopy go code for in-memory infrastructure provider + $(MAKE) clean-generated-deepcopy SRC_DIRS="$(CAPIM_DIR)/api,$(CAPIM_DIR)/internal/cloud/api" cd $(CAPIM_DIR); $(CONTROLLER_GEN) \ object:headerFile=../../../hack/boilerplate/boilerplate.generatego.txt \ - paths=./pkg/cloud/api/... + paths=./api/... \ + paths=./internal/cloud/api/... .PHONY: generate-go-deepcopy-test-extension generate-go-deepcopy-test-extension: $(CONTROLLER_GEN) ## Generate deepcopy go code for test-extension @@ -503,8 +522,12 @@ generate-go-conversions-docker-infrastructure: $(CONVERSION_GEN) ## Generate con ./$(EXP_DIR)/api/v1alpha3 \ ./$(EXP_DIR)/api/v1alpha4 +.PHONY: generate-go-conversions-in-memory-infrastructure +generate-go-conversions-in-memory-infrastructure: $(CONVERSION_GEN) ## Generate conversions go code for in-memory infrastructure provider + cd $(CAPIM_DIR) + .PHONY: generate-go-conversions-test-extension -generate-go-conversions-test-extension: $(CONVERSION_GEN) ## Generate conversions go code for test runtime extension provider +generate-go-conversions-test-extension: $(CONVERSION_GEN) ## Generate conversions go code for in-memory infrastructure provider # The tmp/sigs.k8s.io/cluster-api symlink is a workaround to make this target run outside of GOPATH .PHONY: generate-go-openapi @@ -533,9 +556,10 @@ generate-doctoc: TRACE=$(TRACE) ./hack/generate-doctoc.sh .PHONY: generate-e2e-templates -generate-e2e-templates: $(KUSTOMIZE) $(addprefix generate-e2e-templates-, v0.3 v0.4 v1.5 v1.6 v1.7 v1.8 v1.9 main) ## Generate cluster templates for all versions +generate-e2e-templates: $(KUSTOMIZE) $(addprefix generate-e2e-templates-, v0.3 v0.4 v1.0 v1.5 v1.6 v1.8 v1.9 main) ## Generate cluster templates for all versions DOCKER_TEMPLATES := test/e2e/data/infrastructure-docker +INMEMORY_TEMPLATES := test/e2e/data/infrastructure-inmemory .PHONY: generate-e2e-templates-v0.3 generate-e2e-templates-v0.3: $(KUSTOMIZE) @@ -545,6 +569,10 @@ generate-e2e-templates-v0.3: $(KUSTOMIZE) generate-e2e-templates-v0.4: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v0.4/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v0.4/cluster-template.yaml +.PHONY: generate-e2e-templates-v1.0 +generate-e2e-templates-v1.0: $(KUSTOMIZE) + $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.0/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.0/cluster-template.yaml + .PHONY: generate-e2e-templates-v1.5 generate-e2e-templates-v1.5: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.5/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.5/cluster-template.yaml @@ -555,11 +583,6 @@ generate-e2e-templates-v1.6: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.6/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.6/cluster-template.yaml $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.6/cluster-template-topology --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.6/cluster-template-topology.yaml -.PHONY: generate-e2e-templates-v1.7 -generate-e2e-templates-v1.7: $(KUSTOMIZE) - $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.7/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.7/cluster-template.yaml - $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.7/cluster-template-topology --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.7/cluster-template-topology.yaml - .PHONY: generate-e2e-templates-v1.8 generate-e2e-templates-v1.8: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.8/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.8/cluster-template.yaml @@ -593,15 +616,17 @@ generate-e2e-templates-main: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/main/cluster-template-ignition --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/main/cluster-template-ignition.yaml $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/main/clusterclass-quick-start-kcp-only --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/main/clusterclass-quick-start-kcp-only.yaml + $(KUSTOMIZE) build $(INMEMORY_TEMPLATES)/main/cluster-template --load-restrictor LoadRestrictionsNone > $(INMEMORY_TEMPLATES)/main/cluster-template.yaml + .PHONY: generate-metrics-config -generate-metrics-config: ## Generate ./config/metrics/crd-metrics-config.yaml +generate-metrics-config: $(ENVSUBST_BIN) ## Generate ./config/metrics/crd-metrics-config.yaml OUTPUT_FILE="./config/metrics/crd-metrics-config.yaml"; \ METRIC_TEMPLATES_DIR="./config/metrics/templates"; \ echo "# This file was auto-generated via: make generate-metrics-config" > "$${OUTPUT_FILE}"; \ cat "$${METRIC_TEMPLATES_DIR}/header.yaml" >> "$${OUTPUT_FILE}"; \ for resource in clusterclass cluster kubeadmcontrolplane kubeadmconfig machine machinedeployment machinehealthcheck machineset machinepool; do \ cat "$${METRIC_TEMPLATES_DIR}/$${resource}.yaml"; \ - sed 's/$${RESOURCE}/'$${resource}'/g' "$${METRIC_TEMPLATES_DIR}/common_metrics.yaml"; \ + RESOURCE="$${resource}" ${ENVSUBST_BIN} < "$${METRIC_TEMPLATES_DIR}/common_metrics.yaml"; \ if [[ "$${resource}" != "cluster" ]]; then \ cat "$${METRIC_TEMPLATES_DIR}/owner_metric.yaml"; \ fi \ @@ -635,12 +660,11 @@ generate-test-infra-prowjobs: $(PROWJOB_GEN) ## Generates the prowjob configurat ##@ lint and verify: .PHONY: lint -lint: $(GOLANGCI_LINT) $(GOLANGCI_LINT_KAL) ## Lint the codebase +lint: $(GOLANGCI_LINT) ## Lint the codebase $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) cd $(TEST_DIR); $(GOLANGCI_LINT) run --path-prefix $(TEST_DIR) --config $(ROOT_DIR)/.golangci.yml -v $(GOLANGCI_LINT_EXTRA_ARGS) cd $(TOOLS_DIR); $(GOLANGCI_LINT) run --path-prefix $(TOOLS_DIR) --config $(ROOT_DIR)/.golangci.yml -v $(GOLANGCI_LINT_EXTRA_ARGS) ./scripts/lint-dockerfiles.sh $(HADOLINT_VER) $(HADOLINT_FAILURE_THRESHOLD) - $(GOLANGCI_LINT_KAL) run -v --config $(ROOT_DIR)/.golangci-kal.yml $(GOLANGCI_LINT_EXTRA_ARGS) .PHONY: lint-dockerfiles lint-dockerfiles: @@ -650,14 +674,6 @@ lint-dockerfiles: lint-fix: $(GOLANGCI_LINT) ## Lint the codebase and run auto-fixers if supported by the linter GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint -.PHONY: lint-api -lint-api: $(GOLANGCI_LINT_KAL) - $(GOLANGCI_LINT_KAL) run -v --config $(ROOT_DIR)/.golangci-kal.yml $(GOLANGCI_LINT_EXTRA_ARGS) - -.PHONY: lint-api-fix -lint-api-fix: $(GOLANGCI_LINT_KAL) - GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint-api - .PHONY: tiltfile-fix tiltfile-fix: ## Format the Tiltfile TRACE=$(TRACE) ./hack/verify-starlark.sh fix @@ -769,7 +785,7 @@ verify-import-restrictions: $(IMPORT_BOSS) ## Verify import restrictions with im clusterctl: ## Build the clusterctl binary go build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/clusterctl sigs.k8s.io/cluster-api/cmd/clusterctl -ALL_MANAGERS = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure +ALL_MANAGERS = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure .PHONY: managers managers: $(addprefix manager-,$(ALL_MANAGERS)) ## Run all manager-* targets @@ -790,6 +806,10 @@ manager-kubeadm-control-plane: ## Build the kubeadm control plane manager binary manager-docker-infrastructure: ## Build the docker infrastructure manager binary into the ./bin folder cd $(CAPD_DIR); go build -trimpath -ldflags "$(LDFLAGS)" -o ../../../$(BIN_DIR)/capd-manager sigs.k8s.io/cluster-api/test/infrastructure/docker +.PHONY: manager-in-memory-infrastructure +manager-in-memory-infrastructure: ## Build the in-memory-infrastructure infrastructure manager binary into the ./bin folder + cd $(CAPIM_DIR); go build -trimpath -ldflags "$(LDFLAGS)" -o ../../../$(BIN_DIR)/capim-manager sigs.k8s.io/cluster-api/test/infrastructure/inmemory + .PHONY: docker-pull-prerequisites docker-pull-prerequisites: docker pull docker.io/docker/dockerfile:1.4 @@ -803,13 +823,13 @@ docker-build-%: $(MAKE) ARCH=$* docker-build # Choice of images to build/push -ALL_DOCKER_BUILD ?= core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure test-extension clusterctl +ALL_DOCKER_BUILD ?= core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure test-extension clusterctl .PHONY: docker-build docker-build: docker-pull-prerequisites ## Run docker-build-* targets for all the images $(MAKE) ARCH=$(ARCH) $(addprefix docker-build-,$(ALL_DOCKER_BUILD)) -ALL_DOCKER_BUILD_E2E = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure test-extension +ALL_DOCKER_BUILD_E2E = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure test-extension .PHONY: docker-build-e2e docker-build-e2e: ## Run docker-build-* targets for all the images with settings to be used for the e2e tests @@ -845,6 +865,13 @@ docker-build-docker-infrastructure: ## Build the docker image for docker infrast $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPD_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_pull_policy.yaml" +.PHONY: docker-build-in-memory-infrastructure +docker-build-in-memory-infrastructure: ## Build the docker image for in-memory infrastructure controller manager +## reads Dockerfile from stdin to avoid an incorrectly cached Dockerfile (https://github.com/moby/buildkit/issues/1368) + cat $(CAPIM_DIR)/Dockerfile | DOCKER_BUILDKIT=1 docker build --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg ldflags="$(LDFLAGS)" . -t $(CAPIM_CONTROLLER_IMG)-$(ARCH):$(TAG) --file - + $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPIM_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_image_patch.yaml" + $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_pull_policy.yaml" + .PHONY: docker-build-clusterctl docker-build-clusterctl: ## Build the docker image for clusterctl ## reads Dockerfile from stdin to avoid an incorrectly cached Dockerfile (https://github.com/moby/buildkit/issues/1368) @@ -924,6 +951,20 @@ test-docker-infrastructure-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and $(GOTESTSUM) --junitfile $(ARTIFACTS)/junit.infra_docker.xml --raw-command cat $(ARTIFACTS)/junit.infra_docker.stdout exit $$(cat $(ARTIFACTS)/junit.infra_docker.exitcode) +.PHONY: test-in-memory-infrastructure +test-in-memory-infrastructure: $(SETUP_ENVTEST) ## Run unit and integration tests for in-memory infrastructure provider + cd $(CAPIM_DIR); KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race ./... $(TEST_ARGS) + +.PHONY: test-in-memory-infrastructure-verbose +test-in-memory-infrastructure-verbose: ## Run unit and integration tests for in-memory infrastructure provider with verbose flag + $(MAKE) test-in-memory-infrastructure TEST_ARGS="$(TEST_ARGS) -v" + +.PHONY: test-in-memory-infrastructure-junit +test-in-memory-infrastructure-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integration tests and generate a junit report for in-memory infrastructure provider + cd $(CAPIM_DIR); set +o errexit; (KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race -json ./... $(TEST_ARGS); echo $$? > $(ARTIFACTS)/junit.infra_inmemory.exitcode) | tee $(ARTIFACTS)/junit.infra_inmemory.stdout + $(GOTESTSUM) --junitfile $(ARTIFACTS)/junit.infra_inmemory.xml --raw-command cat $(ARTIFACTS)/junit.infra_inmemory.stdout + exit $$(cat $(ARTIFACTS)/junit.infra_inmemory.exitcode) + .PHONY: test-test-extension test-test-extension: $(SETUP_ENVTEST) ## Run unit and integration tests for the test extension cd $(TEST_EXTENSION_DIR); KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race ./... $(TEST_ARGS) @@ -940,17 +981,13 @@ test-test-extension-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integra .PHONY: test-e2e test-e2e: $(GINKGO) generate-e2e-templates ## Run the end-to-end tests - $(GINKGO) -v --trace --tags=e2e \ - --nodes=$(GINKGO_NODES) --timeout=$(GINKGO_TIMEOUT) \ - --label-filter="$(GINKGO_LABEL_FILTER)" --focus="$(GINKGO_FOCUS)" $(_SKIP_ARGS) \ - --poll-progress-after=$(GINKGO_POLL_PROGRESS_AFTER) --poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) \ - --fail-on-pending --fail-on-empty \ - --no-color=$(GINKGO_NOCOLOR) --output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" \ - $(GINKGO_ARGS) ./test/e2e -- \ - --e2e.artifacts-folder="$(ARTIFACTS)" \ - --e2e.config="$(E2E_CONF_FILE)" \ - --e2e.skip-resource-cleanup=$(SKIP_RESOURCE_CLEANUP) \ - --e2e.use-existing-cluster=$(USE_EXISTING_CLUSTER) + $(GINKGO) -v --trace -poll-progress-after=$(GINKGO_POLL_PROGRESS_AFTER) \ + -poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) --tags=e2e --focus="$(GINKGO_FOCUS)" \ + $(_SKIP_ARGS) --nodes=$(GINKGO_NODES) --timeout=$(GINKGO_TIMEOUT) --no-color=$(GINKGO_NOCOLOR) \ + --output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" $(GINKGO_ARGS) $(ROOT_DIR)/$(TEST_DIR)/e2e -- \ + -e2e.artifacts-folder="$(ARTIFACTS)" \ + -e2e.config="$(E2E_CONF_FILE)" \ + -e2e.skip-resource-cleanup=$(SKIP_RESOURCE_CLEANUP) -e2e.use-existing-cluster=$(USE_EXISTING_CLUSTER) .PHONY: kind-cluster @@ -1040,6 +1077,10 @@ manifest-modification-dev: # Set the manifest images to the staging bucket. MANIFEST_IMG=$(REGISTRY)/$(CAPD_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy PULL_POLICY=IfNotPresent TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_pull_policy.yaml" + $(MAKE) set-manifest-image \ + MANIFEST_IMG=$(REGISTRY)/$(CAPIM_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ + TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_image_patch.yaml" + $(MAKE) set-manifest-pull-policy PULL_POLICY=IfNotPresent TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_pull_policy.yaml" $(MAKE) set-manifest-image \ MANIFEST_IMG=$(REGISTRY)/$(TEST_EXTENSION_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ TARGET_RESOURCE="$(TEST_EXTENSION_DIR)/config/default/manager_image_patch.yaml" @@ -1071,6 +1112,8 @@ release-manifests: $(RELEASE_DIR) $(KUSTOMIZE) $(RUNTIME_OPENAPI_GEN) ## Build t release-manifests-dev: $(RELEASE_DIR) $(KUSTOMIZE) ## Build the development manifests and copies them in the release folder cd $(CAPD_DIR); $(KUSTOMIZE) build config/default > ../../../$(RELEASE_DIR)/infrastructure-components-development.yaml cp $(CAPD_DIR)/templates/* $(RELEASE_DIR)/ + cd $(CAPIM_DIR); $(KUSTOMIZE) build config/default > ../../../$(RELEASE_DIR)/infrastructure-components-in-memory-development.yaml + cp $(CAPIM_DIR)/templates/* $(RELEASE_DIR)/ cd $(TEST_EXTENSION_DIR); $(KUSTOMIZE) build config/default > ../../$(RELEASE_DIR)/runtime-extension-components-development.yaml .PHONY: release-binaries @@ -1139,6 +1182,7 @@ release-alias-tag: ## Add the release alias tag to the last build tag gcloud container images add-tag $(KUBEADM_CONTROL_PLANE_CONTROLLER_IMG):$(TAG) $(KUBEADM_CONTROL_PLANE_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG) gcloud container images add-tag $(CLUSTERCTL_IMG):$(TAG) $(CLUSTERCTL_IMG):$(RELEASE_ALIAS_TAG) gcloud container images add-tag $(CAPD_CONTROLLER_IMG):$(TAG) $(CAPD_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG) + gcloud container images add-tag $(CAPIM_CONTROLLER_IMG):$(TAG) $(CAPIM_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG) gcloud container images add-tag $(TEST_EXTENSION_IMG):$(TAG) $(TEST_EXTENSION_IMG):$(RELEASE_ALIAS_TAG) .PHONY: release-notes-tool @@ -1151,7 +1195,11 @@ release-notes: release-notes-tool .PHONY: test-release-notes-tool test-release-notes-tool: - go test -race -C hack/tools -v -tags tools,integration sigs.k8s.io/cluster-api/hack/tools/release/notes + go test -C hack/tools -race -v -tags tools,integration sigs.k8s.io/cluster-api/hack/tools/release/notes -coverprofile=$(ROOT_DIR)/bin/coverage.out + +.PHONY: test-release-notes-coverage +test-release-notes-coverage: + go tool cover -html=$(ROOT_DIR)/bin/coverage.out -o $(ROOT_DIR)/bin/coverage.html .PHONY: release-provider-issues-tool release-provider-issues-tool: # Creates GitHub issues in a pre-defined list of CAPI provider repositories @@ -1231,6 +1279,18 @@ docker-push-manifest-docker-infrastructure: ## Push the multiarch manifest for t $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPD_CONTROLLER_IMG) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_pull_policy.yaml" +.PHONY: docker-push-in-memory-infrastructure +docker-push-in-memory-infrastructure: ## Push the in-memory infrastructure provider image + docker push $(CAPIM_CONTROLLER_IMG)-$(ARCH):$(TAG) + +.PHONY: docker-push-manifest-in-memory-infrastructure +docker-push-manifest-in-memory-infrastructure: ## Push the multiarch manifest for the in-memory infrastructure provider images + docker manifest create --amend $(CAPIM_CONTROLLER_IMG):$(TAG) $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~$(CAPIM_CONTROLLER_IMG)\-&:$(TAG)~g") + @for arch in $(ALL_ARCH); do docker manifest annotate --arch $${arch} ${CAPIM_CONTROLLER_IMG}:${TAG} ${CAPIM_CONTROLLER_IMG}-$${arch}:${TAG}; done + docker manifest push --purge $(CAPIM_CONTROLLER_IMG):$(TAG) + $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPIM_CONTROLLER_IMG) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_image_patch.yaml" + $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_pull_policy.yaml" + .PHONY: docker-push-test-extension docker-push-test-extension: ## Push the test extension provider image docker push $(TEST_EXTENSION_IMG)-$(ARCH):$(TAG) @@ -1291,6 +1351,7 @@ clean-tilt: clean-charts clean-kind ## Remove all files generated by Tilt rm -rf ./controlplane/kubeadm/.tiltbuild rm -rf ./bootstrap/kubeadm/.tiltbuild rm -rf ./test/infrastructure/docker/.tiltbuild + rm -rf ./test/infrastructure/inmemory/.tiltbuild .PHONY: clean-charts clean-charts: ## Remove all local copies of Helm charts in ./hack/observability @@ -1359,6 +1420,9 @@ $(GOTESTSUM_BIN): $(GOTESTSUM) ## Build a local copy of gotestsum. .PHONY: $(GO_APIDIFF_BIN) $(GO_APIDIFF_BIN): $(GO_APIDIFF) ## Build a local copy of go-apidiff +.PHONY: $(ENVSUBST_BIN) +$(ENVSUBST_BIN): $(ENVSUBST) ## Build a local copy of envsubst. + .PHONY: $(KUSTOMIZE_BIN) $(KUSTOMIZE_BIN): $(KUSTOMIZE) ## Build a local copy of kustomize. @@ -1417,6 +1481,9 @@ $(GOTESTSUM): # Build gotestsum from tools folder. $(GO_APIDIFF): # Build go-apidiff from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GO_APIDIFF_PKG) $(GO_APIDIFF_BIN) $(GO_APIDIFF_VER) +$(ENVSUBST): # Build gotestsum from tools folder. + GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(ENVSUBST_PKG) $(ENVSUBST_BIN) $(ENVSUBST_VER) + $(KUSTOMIZE): # Build kustomize from tools folder. CGO_ENABLED=0 GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(KUSTOMIZE_PKG) $(KUSTOMIZE_BIN) $(KUSTOMIZE_VER) @@ -1438,9 +1505,6 @@ $(GINKGO): # Build ginkgo from tools folder. $(GOLANGCI_LINT): # Build golangci-lint from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GOLANGCI_LINT_PKG) $(GOLANGCI_LINT_BIN) $(GOLANGCI_LINT_VER) -$(GOLANGCI_LINT_KAL): $(GOLANGCI_LINT) # Build golangci-lint-kal from custom configuration. - cd $(TOOLS_DIR); $(GOLANGCI_LINT) custom - $(GOVULNCHECK): # Build govulncheck. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GOVULNCHECK_PKG) $(GOVULNCHECK_BIN) $(GOVULNCHECK_VER) diff --git a/hack/tools/release/notes/list_test.go b/hack/tools/release/notes/list_test.go index c5848e236d9f..c45722215edb 100644 --- a/hack/tools/release/notes/list_test.go +++ b/hack/tools/release/notes/list_test.go @@ -69,45 +69,45 @@ func Test_buildSetOfPRNumbers(t *testing.T) { func Test_githubFromToPRLister_listPRs(t *testing.T) { tests := []struct { name string - fields *githubFromToPRLister + lister *githubFromToPRLister args ref wantErr bool }{ { name: "Successful PR Listing", - fields: &githubFromToPRLister{ + lister: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/kind", + repo: "kubernetes-sigs/cluster-api", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v1.4.0", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v1.5.0", }, branch: "main", }, args: ref{ reType: "tags", - value: "v0.26.0", + value: "v1.4.0", }, wantErr: false, }, { name: "Setting previousReleaseRef.value blank - should use toRef and fromRef from fields", - fields: &githubFromToPRLister{ + lister: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/kind", + repo: "kubernetes-sigs/cluster-api", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v1.4.0", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v1.5.0", }, branch: "main", }, @@ -119,35 +119,35 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { }, { name: "Create PR List when fromRef is not set", - fields: &githubFromToPRLister{ + lister: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/kind", + repo: "kubernetes-sigs/cluster-api", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v1.5.0", }, branch: "main", }, args: ref{ reType: "tags", - value: "v0.26.0", + value: "v1.4.0", }, wantErr: false, }, { name: "Fail when previousReleaseRef.value is set to invalid", - fields: &githubFromToPRLister{ + lister: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/kind", + repo: "kubernetes-sigs/cluster-api", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v1.4.0", }, toRef: ref{ reType: "tags", - value: "v0.27.0", + value: "v1.5.0", }, branch: "main", }, @@ -159,13 +159,13 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { }, { name: "Fail when toRef and previousReleaseRef set blank", - fields: &githubFromToPRLister{ + lister: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/kind", + repo: "kubernetes-sigs/cluster-api", }, fromRef: ref{ reType: "tags", - value: "v0.26.0", + value: "v1.4.0", }, toRef: ref{ reType: "tags", @@ -182,13 +182,7 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - l := &githubFromToPRLister{ - client: tt.fields.client, - fromRef: tt.fields.fromRef, - toRef: tt.fields.toRef, - branch: tt.fields.branch, - } - _, err := l.listPRs(tt.args) + _, err := tt.lister.listPRs(tt.args) if (err != nil) != tt.wantErr { t.Errorf("githubFromToPRLister.listPRs() error = %v, wantErr %v", err, tt.wantErr) return From f6be5ee073b4ba4ba32de8befa771e7cf200a2a8 Mon Sep 17 00:00:00 2001 From: ira-pandey1 Date: Wed, 14 May 2025 18:01:13 +0530 Subject: [PATCH 4/4] Revert "Temp Changes" This reverts commit 321b6c99b4853b738b2a0996c8befdf1cdac5635. --- Makefile | 172 ++++++++------------------ hack/tools/release/notes/list_test.go | 50 ++++---- 2 files changed, 82 insertions(+), 140 deletions(-) diff --git a/Makefile b/Makefile index 70cf9ab9ef73..f85bc16b8ce4 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ SHELL:=/usr/bin/env bash # # Go. # -GO_VERSION ?= 1.23.0 +GO_VERSION ?= 1.23.6 GO_DIRECTIVE_VERSION ?= 1.23.0 GO_CONTAINER_IMAGE ?= docker.io/library/golang:$(GO_VERSION) @@ -79,8 +79,10 @@ export PATH := $(abspath $(TOOLS_BIN_DIR)):$(PATH) # GINKGO_FOCUS ?= GINKGO_SKIP ?= +GINKGO_LABEL_FILTER ?= GINKGO_NODES ?= 1 -GINKGO_TIMEOUT ?= 2h +GINKGO_TIMEOUT ?= 3h +GINKGO_ARGS ?= GINKGO_POLL_PROGRESS_AFTER ?= 60m GINKGO_POLL_PROGRESS_INTERVAL ?= 5m E2E_CONF_FILE ?= $(ROOT_DIR)/$(TEST_DIR)/e2e/config/docker.yaml @@ -100,7 +102,7 @@ get_go_version = $(shell go list -m $1 | awk '{print $$2}') # Binaries. # # Note: Need to use abspath so we can invoke these from subdirectories -KUSTOMIZE_VER := v5.3.0 +KUSTOMIZE_VER := v5.6.0 KUSTOMIZE_BIN := kustomize KUSTOMIZE := $(abspath $(TOOLS_BIN_DIR)/$(KUSTOMIZE_BIN)-$(KUSTOMIZE_VER)) KUSTOMIZE_PKG := sigs.k8s.io/kustomize/kustomize/v5 @@ -110,7 +112,7 @@ SETUP_ENVTEST_BIN := setup-envtest SETUP_ENVTEST := $(abspath $(TOOLS_BIN_DIR)/$(SETUP_ENVTEST_BIN)-$(SETUP_ENVTEST_VER)) SETUP_ENVTEST_PKG := sigs.k8s.io/controller-runtime/tools/setup-envtest -CONTROLLER_GEN_VER := v0.17.0 +CONTROLLER_GEN_VER := v0.17.2 CONTROLLER_GEN_BIN := controller-gen CONTROLLER_GEN := $(abspath $(TOOLS_BIN_DIR)/$(CONTROLLER_GEN_BIN)-$(CONTROLLER_GEN_VER)) CONTROLLER_GEN_PKG := sigs.k8s.io/controller-tools/cmd/controller-gen @@ -120,18 +122,13 @@ GOTESTSUM_BIN := gotestsum GOTESTSUM := $(abspath $(TOOLS_BIN_DIR)/$(GOTESTSUM_BIN)-$(GOTESTSUM_VER)) GOTESTSUM_PKG := gotest.tools/gotestsum -CONVERSION_GEN_VER := v0.32.0 +CONVERSION_GEN_VER := v0.32.2 CONVERSION_GEN_BIN := conversion-gen # We are intentionally using the binary without version suffix, to avoid the version # in generated files. CONVERSION_GEN := $(abspath $(TOOLS_BIN_DIR)/$(CONVERSION_GEN_BIN)) CONVERSION_GEN_PKG := k8s.io/code-generator/cmd/conversion-gen -ENVSUBST_BIN := envsubst -ENVSUBST_VER := $(call get_go_version,github.com/drone/envsubst/v2) -ENVSUBST := $(abspath $(TOOLS_BIN_DIR)/$(ENVSUBST_BIN)-$(ENVSUBST_VER)) -ENVSUBST_PKG := github.com/drone/envsubst/v2/cmd/envsubst - GO_APIDIFF_VER := v0.8.2 GO_APIDIFF_BIN := go-apidiff GO_APIDIFF := $(abspath $(TOOLS_BIN_DIR)/$(GO_APIDIFF_BIN)-$(GO_APIDIFF_VER)) @@ -167,8 +164,12 @@ GOLANGCI_LINT_VER := $(shell cat .github/workflows/pr-golangci-lint.yaml | grep GOLANGCI_LINT := $(abspath $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)-$(GOLANGCI_LINT_VER)) GOLANGCI_LINT_PKG := github.com/golangci/golangci-lint/cmd/golangci-lint +GOLANGCI_LINT_KAL_BIN := golangci-lint-kal +GOLANGCI_LINT_KAL_VER := $(shell cat ./hack/tools/.custom-gcl.yaml | grep name: | sed 's/name: golangci-lint-kal-//') +GOLANGCI_LINT_KAL := $(abspath $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_KAL_BIN)-$(GOLANGCI_LINT_KAL_VER)) + GOVULNCHECK_BIN := govulncheck -GOVULNCHECK_VER := v1.0.4 +GOVULNCHECK_VER := v1.1.4 GOVULNCHECK := $(abspath $(TOOLS_BIN_DIR)/$(GOVULNCHECK_BIN)-$(GOVULNCHECK_VER)) GOVULNCHECK_PKG := golang.org/x/vuln/cmd/govulncheck @@ -225,10 +226,6 @@ KUBEADM_CONTROL_PLANE_CONTROLLER_IMG ?= $(REGISTRY)/$(KUBEADM_CONTROL_PLANE_IMAG CAPD_IMAGE_NAME ?= capd-manager CAPD_CONTROLLER_IMG ?= $(REGISTRY)/$(CAPD_IMAGE_NAME) -# capim -CAPIM_IMAGE_NAME ?= capim-manager -CAPIM_CONTROLLER_IMG ?= $(REGISTRY)/$(CAPIM_IMAGE_NAME) - # clusterctl CLUSTERCTL_MANIFEST_DIR := cmd/clusterctl/config CLUSTERCTL_IMAGE_NAME ?= clusterctl @@ -271,7 +268,7 @@ help: # Display this help ##@ generate: -ALL_GENERATE_MODULES = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure test-extension +ALL_GENERATE_MODULES = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure test-extension .PHONY: generate generate: ## Run all generate-manifests-*, generate-go-deepcopy-*, generate-go-conversions-* and generate-go-openapi targets @@ -363,21 +360,6 @@ generate-manifests-docker-infrastructure: $(CONTROLLER_GEN) ## Generate manifest output:webhook:dir=./config/webhook \ webhook - -.PHONY: generate-manifests-in-memory-infrastructure -generate-manifests-in-memory-infrastructure: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc. for in-memory infrastructure provider - $(MAKE) clean-generated-yaml SRC_DIRS="$(CAPIM_DIR)/config/crd/bases,$(CAPIM_DIR)/config/webhook/manifests.yaml" - cd $(CAPIM_DIR); $(CONTROLLER_GEN) \ - paths=./ \ - paths=./api/... \ - paths=./internal/controllers/... \ - paths=./internal/webhooks/... \ - crd:crdVersions=v1 \ - rbac:roleName=manager-role \ - output:crd:dir=./config/crd/bases \ - output:webhook:dir=./config/webhook \ - webhook - .PHONY: generate-manifests-test-extension generate-manifests-test-extension: $(CONTROLLER_GEN) ## Generate manifests e.g. RBAC for test-extension provider cd ./test/extension; $(CONTROLLER_GEN) \ @@ -420,7 +402,7 @@ generate-go-deepcopy-kubeadm-control-plane: $(CONTROLLER_GEN) ## Generate deepco paths=./controlplane/kubeadm/api/... .PHONY: generate-go-deepcopy-docker-infrastructure -generate-go-deepcopy-docker-infrastructure: $(CONTROLLER_GEN) ## Generate deepcopy go code for docker infrastructure provider +generate-go-deepcopy-docker-infrastructure: $(CONTROLLER_GEN) generate-go-deepcopy-in-memory-infrastructure ## Generate deepcopy go code for docker infrastructure provider $(MAKE) clean-generated-deepcopy SRC_DIRS="$(CAPD_DIR)/api,$(CAPD_DIR)/$(EXP_DIR)/api" cd $(CAPD_DIR); $(CONTROLLER_GEN) \ object:headerFile=../../../hack/boilerplate/boilerplate.generatego.txt \ @@ -428,12 +410,11 @@ generate-go-deepcopy-docker-infrastructure: $(CONTROLLER_GEN) ## Generate deepco paths=./$(EXP_DIR)/api/... .PHONY: generate-go-deepcopy-in-memory-infrastructure -generate-go-deepcopy-in-memory-infrastructure: $(CONTROLLER_GEN) ## Generate deepcopy go code for in-memory infrastructure provider - $(MAKE) clean-generated-deepcopy SRC_DIRS="$(CAPIM_DIR)/api,$(CAPIM_DIR)/internal/cloud/api" +generate-go-deepcopy-in-memory-infrastructure: $(CONTROLLER_GEN) ## Generate deepcopy go code for in-memory cloud resources + $(MAKE) clean-generated-deepcopy SRC_DIRS="$(CAPIM_DIR)/pkg/cloud/api" cd $(CAPIM_DIR); $(CONTROLLER_GEN) \ object:headerFile=../../../hack/boilerplate/boilerplate.generatego.txt \ - paths=./api/... \ - paths=./internal/cloud/api/... + paths=./pkg/cloud/api/... .PHONY: generate-go-deepcopy-test-extension generate-go-deepcopy-test-extension: $(CONTROLLER_GEN) ## Generate deepcopy go code for test-extension @@ -522,12 +503,8 @@ generate-go-conversions-docker-infrastructure: $(CONVERSION_GEN) ## Generate con ./$(EXP_DIR)/api/v1alpha3 \ ./$(EXP_DIR)/api/v1alpha4 -.PHONY: generate-go-conversions-in-memory-infrastructure -generate-go-conversions-in-memory-infrastructure: $(CONVERSION_GEN) ## Generate conversions go code for in-memory infrastructure provider - cd $(CAPIM_DIR) - .PHONY: generate-go-conversions-test-extension -generate-go-conversions-test-extension: $(CONVERSION_GEN) ## Generate conversions go code for in-memory infrastructure provider +generate-go-conversions-test-extension: $(CONVERSION_GEN) ## Generate conversions go code for test runtime extension provider # The tmp/sigs.k8s.io/cluster-api symlink is a workaround to make this target run outside of GOPATH .PHONY: generate-go-openapi @@ -556,10 +533,9 @@ generate-doctoc: TRACE=$(TRACE) ./hack/generate-doctoc.sh .PHONY: generate-e2e-templates -generate-e2e-templates: $(KUSTOMIZE) $(addprefix generate-e2e-templates-, v0.3 v0.4 v1.0 v1.5 v1.6 v1.8 v1.9 main) ## Generate cluster templates for all versions +generate-e2e-templates: $(KUSTOMIZE) $(addprefix generate-e2e-templates-, v0.3 v0.4 v1.5 v1.6 v1.7 v1.8 v1.9 main) ## Generate cluster templates for all versions DOCKER_TEMPLATES := test/e2e/data/infrastructure-docker -INMEMORY_TEMPLATES := test/e2e/data/infrastructure-inmemory .PHONY: generate-e2e-templates-v0.3 generate-e2e-templates-v0.3: $(KUSTOMIZE) @@ -569,10 +545,6 @@ generate-e2e-templates-v0.3: $(KUSTOMIZE) generate-e2e-templates-v0.4: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v0.4/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v0.4/cluster-template.yaml -.PHONY: generate-e2e-templates-v1.0 -generate-e2e-templates-v1.0: $(KUSTOMIZE) - $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.0/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.0/cluster-template.yaml - .PHONY: generate-e2e-templates-v1.5 generate-e2e-templates-v1.5: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.5/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.5/cluster-template.yaml @@ -583,6 +555,11 @@ generate-e2e-templates-v1.6: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.6/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.6/cluster-template.yaml $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.6/cluster-template-topology --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.6/cluster-template-topology.yaml +.PHONY: generate-e2e-templates-v1.7 +generate-e2e-templates-v1.7: $(KUSTOMIZE) + $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.7/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.7/cluster-template.yaml + $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.7/cluster-template-topology --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.7/cluster-template-topology.yaml + .PHONY: generate-e2e-templates-v1.8 generate-e2e-templates-v1.8: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/v1.8/cluster-template --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/v1.8/cluster-template.yaml @@ -616,17 +593,15 @@ generate-e2e-templates-main: $(KUSTOMIZE) $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/main/cluster-template-ignition --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/main/cluster-template-ignition.yaml $(KUSTOMIZE) build $(DOCKER_TEMPLATES)/main/clusterclass-quick-start-kcp-only --load-restrictor LoadRestrictionsNone > $(DOCKER_TEMPLATES)/main/clusterclass-quick-start-kcp-only.yaml - $(KUSTOMIZE) build $(INMEMORY_TEMPLATES)/main/cluster-template --load-restrictor LoadRestrictionsNone > $(INMEMORY_TEMPLATES)/main/cluster-template.yaml - .PHONY: generate-metrics-config -generate-metrics-config: $(ENVSUBST_BIN) ## Generate ./config/metrics/crd-metrics-config.yaml +generate-metrics-config: ## Generate ./config/metrics/crd-metrics-config.yaml OUTPUT_FILE="./config/metrics/crd-metrics-config.yaml"; \ METRIC_TEMPLATES_DIR="./config/metrics/templates"; \ echo "# This file was auto-generated via: make generate-metrics-config" > "$${OUTPUT_FILE}"; \ cat "$${METRIC_TEMPLATES_DIR}/header.yaml" >> "$${OUTPUT_FILE}"; \ for resource in clusterclass cluster kubeadmcontrolplane kubeadmconfig machine machinedeployment machinehealthcheck machineset machinepool; do \ cat "$${METRIC_TEMPLATES_DIR}/$${resource}.yaml"; \ - RESOURCE="$${resource}" ${ENVSUBST_BIN} < "$${METRIC_TEMPLATES_DIR}/common_metrics.yaml"; \ + sed 's/$${RESOURCE}/'$${resource}'/g' "$${METRIC_TEMPLATES_DIR}/common_metrics.yaml"; \ if [[ "$${resource}" != "cluster" ]]; then \ cat "$${METRIC_TEMPLATES_DIR}/owner_metric.yaml"; \ fi \ @@ -660,11 +635,12 @@ generate-test-infra-prowjobs: $(PROWJOB_GEN) ## Generates the prowjob configurat ##@ lint and verify: .PHONY: lint -lint: $(GOLANGCI_LINT) ## Lint the codebase +lint: $(GOLANGCI_LINT) $(GOLANGCI_LINT_KAL) ## Lint the codebase $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) cd $(TEST_DIR); $(GOLANGCI_LINT) run --path-prefix $(TEST_DIR) --config $(ROOT_DIR)/.golangci.yml -v $(GOLANGCI_LINT_EXTRA_ARGS) cd $(TOOLS_DIR); $(GOLANGCI_LINT) run --path-prefix $(TOOLS_DIR) --config $(ROOT_DIR)/.golangci.yml -v $(GOLANGCI_LINT_EXTRA_ARGS) ./scripts/lint-dockerfiles.sh $(HADOLINT_VER) $(HADOLINT_FAILURE_THRESHOLD) + $(GOLANGCI_LINT_KAL) run -v --config $(ROOT_DIR)/.golangci-kal.yml $(GOLANGCI_LINT_EXTRA_ARGS) .PHONY: lint-dockerfiles lint-dockerfiles: @@ -674,6 +650,14 @@ lint-dockerfiles: lint-fix: $(GOLANGCI_LINT) ## Lint the codebase and run auto-fixers if supported by the linter GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint +.PHONY: lint-api +lint-api: $(GOLANGCI_LINT_KAL) + $(GOLANGCI_LINT_KAL) run -v --config $(ROOT_DIR)/.golangci-kal.yml $(GOLANGCI_LINT_EXTRA_ARGS) + +.PHONY: lint-api-fix +lint-api-fix: $(GOLANGCI_LINT_KAL) + GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint-api + .PHONY: tiltfile-fix tiltfile-fix: ## Format the Tiltfile TRACE=$(TRACE) ./hack/verify-starlark.sh fix @@ -785,7 +769,7 @@ verify-import-restrictions: $(IMPORT_BOSS) ## Verify import restrictions with im clusterctl: ## Build the clusterctl binary go build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/clusterctl sigs.k8s.io/cluster-api/cmd/clusterctl -ALL_MANAGERS = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure +ALL_MANAGERS = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure .PHONY: managers managers: $(addprefix manager-,$(ALL_MANAGERS)) ## Run all manager-* targets @@ -806,10 +790,6 @@ manager-kubeadm-control-plane: ## Build the kubeadm control plane manager binary manager-docker-infrastructure: ## Build the docker infrastructure manager binary into the ./bin folder cd $(CAPD_DIR); go build -trimpath -ldflags "$(LDFLAGS)" -o ../../../$(BIN_DIR)/capd-manager sigs.k8s.io/cluster-api/test/infrastructure/docker -.PHONY: manager-in-memory-infrastructure -manager-in-memory-infrastructure: ## Build the in-memory-infrastructure infrastructure manager binary into the ./bin folder - cd $(CAPIM_DIR); go build -trimpath -ldflags "$(LDFLAGS)" -o ../../../$(BIN_DIR)/capim-manager sigs.k8s.io/cluster-api/test/infrastructure/inmemory - .PHONY: docker-pull-prerequisites docker-pull-prerequisites: docker pull docker.io/docker/dockerfile:1.4 @@ -823,13 +803,13 @@ docker-build-%: $(MAKE) ARCH=$* docker-build # Choice of images to build/push -ALL_DOCKER_BUILD ?= core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure test-extension clusterctl +ALL_DOCKER_BUILD ?= core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure test-extension clusterctl .PHONY: docker-build docker-build: docker-pull-prerequisites ## Run docker-build-* targets for all the images $(MAKE) ARCH=$(ARCH) $(addprefix docker-build-,$(ALL_DOCKER_BUILD)) -ALL_DOCKER_BUILD_E2E = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure in-memory-infrastructure test-extension +ALL_DOCKER_BUILD_E2E = core kubeadm-bootstrap kubeadm-control-plane docker-infrastructure test-extension .PHONY: docker-build-e2e docker-build-e2e: ## Run docker-build-* targets for all the images with settings to be used for the e2e tests @@ -865,13 +845,6 @@ docker-build-docker-infrastructure: ## Build the docker image for docker infrast $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPD_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_pull_policy.yaml" -.PHONY: docker-build-in-memory-infrastructure -docker-build-in-memory-infrastructure: ## Build the docker image for in-memory infrastructure controller manager -## reads Dockerfile from stdin to avoid an incorrectly cached Dockerfile (https://github.com/moby/buildkit/issues/1368) - cat $(CAPIM_DIR)/Dockerfile | DOCKER_BUILDKIT=1 docker build --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg ldflags="$(LDFLAGS)" . -t $(CAPIM_CONTROLLER_IMG)-$(ARCH):$(TAG) --file - - $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPIM_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_image_patch.yaml" - $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_pull_policy.yaml" - .PHONY: docker-build-clusterctl docker-build-clusterctl: ## Build the docker image for clusterctl ## reads Dockerfile from stdin to avoid an incorrectly cached Dockerfile (https://github.com/moby/buildkit/issues/1368) @@ -951,20 +924,6 @@ test-docker-infrastructure-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and $(GOTESTSUM) --junitfile $(ARTIFACTS)/junit.infra_docker.xml --raw-command cat $(ARTIFACTS)/junit.infra_docker.stdout exit $$(cat $(ARTIFACTS)/junit.infra_docker.exitcode) -.PHONY: test-in-memory-infrastructure -test-in-memory-infrastructure: $(SETUP_ENVTEST) ## Run unit and integration tests for in-memory infrastructure provider - cd $(CAPIM_DIR); KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race ./... $(TEST_ARGS) - -.PHONY: test-in-memory-infrastructure-verbose -test-in-memory-infrastructure-verbose: ## Run unit and integration tests for in-memory infrastructure provider with verbose flag - $(MAKE) test-in-memory-infrastructure TEST_ARGS="$(TEST_ARGS) -v" - -.PHONY: test-in-memory-infrastructure-junit -test-in-memory-infrastructure-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integration tests and generate a junit report for in-memory infrastructure provider - cd $(CAPIM_DIR); set +o errexit; (KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race -json ./... $(TEST_ARGS); echo $$? > $(ARTIFACTS)/junit.infra_inmemory.exitcode) | tee $(ARTIFACTS)/junit.infra_inmemory.stdout - $(GOTESTSUM) --junitfile $(ARTIFACTS)/junit.infra_inmemory.xml --raw-command cat $(ARTIFACTS)/junit.infra_inmemory.stdout - exit $$(cat $(ARTIFACTS)/junit.infra_inmemory.exitcode) - .PHONY: test-test-extension test-test-extension: $(SETUP_ENVTEST) ## Run unit and integration tests for the test extension cd $(TEST_EXTENSION_DIR); KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race ./... $(TEST_ARGS) @@ -981,13 +940,17 @@ test-test-extension-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integra .PHONY: test-e2e test-e2e: $(GINKGO) generate-e2e-templates ## Run the end-to-end tests - $(GINKGO) -v --trace -poll-progress-after=$(GINKGO_POLL_PROGRESS_AFTER) \ - -poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) --tags=e2e --focus="$(GINKGO_FOCUS)" \ - $(_SKIP_ARGS) --nodes=$(GINKGO_NODES) --timeout=$(GINKGO_TIMEOUT) --no-color=$(GINKGO_NOCOLOR) \ - --output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" $(GINKGO_ARGS) $(ROOT_DIR)/$(TEST_DIR)/e2e -- \ - -e2e.artifacts-folder="$(ARTIFACTS)" \ - -e2e.config="$(E2E_CONF_FILE)" \ - -e2e.skip-resource-cleanup=$(SKIP_RESOURCE_CLEANUP) -e2e.use-existing-cluster=$(USE_EXISTING_CLUSTER) + $(GINKGO) -v --trace --tags=e2e \ + --nodes=$(GINKGO_NODES) --timeout=$(GINKGO_TIMEOUT) \ + --label-filter="$(GINKGO_LABEL_FILTER)" --focus="$(GINKGO_FOCUS)" $(_SKIP_ARGS) \ + --poll-progress-after=$(GINKGO_POLL_PROGRESS_AFTER) --poll-progress-interval=$(GINKGO_POLL_PROGRESS_INTERVAL) \ + --fail-on-pending --fail-on-empty \ + --no-color=$(GINKGO_NOCOLOR) --output-dir="$(ARTIFACTS)" --junit-report="junit.e2e_suite.1.xml" \ + $(GINKGO_ARGS) ./test/e2e -- \ + --e2e.artifacts-folder="$(ARTIFACTS)" \ + --e2e.config="$(E2E_CONF_FILE)" \ + --e2e.skip-resource-cleanup=$(SKIP_RESOURCE_CLEANUP) \ + --e2e.use-existing-cluster=$(USE_EXISTING_CLUSTER) .PHONY: kind-cluster @@ -1077,10 +1040,6 @@ manifest-modification-dev: # Set the manifest images to the staging bucket. MANIFEST_IMG=$(REGISTRY)/$(CAPD_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy PULL_POLICY=IfNotPresent TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_pull_policy.yaml" - $(MAKE) set-manifest-image \ - MANIFEST_IMG=$(REGISTRY)/$(CAPIM_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ - TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_image_patch.yaml" - $(MAKE) set-manifest-pull-policy PULL_POLICY=IfNotPresent TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_pull_policy.yaml" $(MAKE) set-manifest-image \ MANIFEST_IMG=$(REGISTRY)/$(TEST_EXTENSION_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ TARGET_RESOURCE="$(TEST_EXTENSION_DIR)/config/default/manager_image_patch.yaml" @@ -1112,8 +1071,6 @@ release-manifests: $(RELEASE_DIR) $(KUSTOMIZE) $(RUNTIME_OPENAPI_GEN) ## Build t release-manifests-dev: $(RELEASE_DIR) $(KUSTOMIZE) ## Build the development manifests and copies them in the release folder cd $(CAPD_DIR); $(KUSTOMIZE) build config/default > ../../../$(RELEASE_DIR)/infrastructure-components-development.yaml cp $(CAPD_DIR)/templates/* $(RELEASE_DIR)/ - cd $(CAPIM_DIR); $(KUSTOMIZE) build config/default > ../../../$(RELEASE_DIR)/infrastructure-components-in-memory-development.yaml - cp $(CAPIM_DIR)/templates/* $(RELEASE_DIR)/ cd $(TEST_EXTENSION_DIR); $(KUSTOMIZE) build config/default > ../../$(RELEASE_DIR)/runtime-extension-components-development.yaml .PHONY: release-binaries @@ -1182,7 +1139,6 @@ release-alias-tag: ## Add the release alias tag to the last build tag gcloud container images add-tag $(KUBEADM_CONTROL_PLANE_CONTROLLER_IMG):$(TAG) $(KUBEADM_CONTROL_PLANE_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG) gcloud container images add-tag $(CLUSTERCTL_IMG):$(TAG) $(CLUSTERCTL_IMG):$(RELEASE_ALIAS_TAG) gcloud container images add-tag $(CAPD_CONTROLLER_IMG):$(TAG) $(CAPD_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG) - gcloud container images add-tag $(CAPIM_CONTROLLER_IMG):$(TAG) $(CAPIM_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG) gcloud container images add-tag $(TEST_EXTENSION_IMG):$(TAG) $(TEST_EXTENSION_IMG):$(RELEASE_ALIAS_TAG) .PHONY: release-notes-tool @@ -1195,11 +1151,7 @@ release-notes: release-notes-tool .PHONY: test-release-notes-tool test-release-notes-tool: - go test -C hack/tools -race -v -tags tools,integration sigs.k8s.io/cluster-api/hack/tools/release/notes -coverprofile=$(ROOT_DIR)/bin/coverage.out - -.PHONY: test-release-notes-coverage -test-release-notes-coverage: - go tool cover -html=$(ROOT_DIR)/bin/coverage.out -o $(ROOT_DIR)/bin/coverage.html + go test -race -C hack/tools -v -tags tools,integration sigs.k8s.io/cluster-api/hack/tools/release/notes .PHONY: release-provider-issues-tool release-provider-issues-tool: # Creates GitHub issues in a pre-defined list of CAPI provider repositories @@ -1279,18 +1231,6 @@ docker-push-manifest-docker-infrastructure: ## Push the multiarch manifest for t $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPD_CONTROLLER_IMG) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPD_DIR)/config/default/manager_pull_policy.yaml" -.PHONY: docker-push-in-memory-infrastructure -docker-push-in-memory-infrastructure: ## Push the in-memory infrastructure provider image - docker push $(CAPIM_CONTROLLER_IMG)-$(ARCH):$(TAG) - -.PHONY: docker-push-manifest-in-memory-infrastructure -docker-push-manifest-in-memory-infrastructure: ## Push the multiarch manifest for the in-memory infrastructure provider images - docker manifest create --amend $(CAPIM_CONTROLLER_IMG):$(TAG) $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~$(CAPIM_CONTROLLER_IMG)\-&:$(TAG)~g") - @for arch in $(ALL_ARCH); do docker manifest annotate --arch $${arch} ${CAPIM_CONTROLLER_IMG}:${TAG} ${CAPIM_CONTROLLER_IMG}-$${arch}:${TAG}; done - docker manifest push --purge $(CAPIM_CONTROLLER_IMG):$(TAG) - $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPIM_CONTROLLER_IMG) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_image_patch.yaml" - $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="$(CAPIM_DIR)/config/default/manager_pull_policy.yaml" - .PHONY: docker-push-test-extension docker-push-test-extension: ## Push the test extension provider image docker push $(TEST_EXTENSION_IMG)-$(ARCH):$(TAG) @@ -1351,7 +1291,6 @@ clean-tilt: clean-charts clean-kind ## Remove all files generated by Tilt rm -rf ./controlplane/kubeadm/.tiltbuild rm -rf ./bootstrap/kubeadm/.tiltbuild rm -rf ./test/infrastructure/docker/.tiltbuild - rm -rf ./test/infrastructure/inmemory/.tiltbuild .PHONY: clean-charts clean-charts: ## Remove all local copies of Helm charts in ./hack/observability @@ -1420,9 +1359,6 @@ $(GOTESTSUM_BIN): $(GOTESTSUM) ## Build a local copy of gotestsum. .PHONY: $(GO_APIDIFF_BIN) $(GO_APIDIFF_BIN): $(GO_APIDIFF) ## Build a local copy of go-apidiff -.PHONY: $(ENVSUBST_BIN) -$(ENVSUBST_BIN): $(ENVSUBST) ## Build a local copy of envsubst. - .PHONY: $(KUSTOMIZE_BIN) $(KUSTOMIZE_BIN): $(KUSTOMIZE) ## Build a local copy of kustomize. @@ -1481,9 +1417,6 @@ $(GOTESTSUM): # Build gotestsum from tools folder. $(GO_APIDIFF): # Build go-apidiff from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GO_APIDIFF_PKG) $(GO_APIDIFF_BIN) $(GO_APIDIFF_VER) -$(ENVSUBST): # Build gotestsum from tools folder. - GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(ENVSUBST_PKG) $(ENVSUBST_BIN) $(ENVSUBST_VER) - $(KUSTOMIZE): # Build kustomize from tools folder. CGO_ENABLED=0 GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(KUSTOMIZE_PKG) $(KUSTOMIZE_BIN) $(KUSTOMIZE_VER) @@ -1505,6 +1438,9 @@ $(GINKGO): # Build ginkgo from tools folder. $(GOLANGCI_LINT): # Build golangci-lint from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GOLANGCI_LINT_PKG) $(GOLANGCI_LINT_BIN) $(GOLANGCI_LINT_VER) +$(GOLANGCI_LINT_KAL): $(GOLANGCI_LINT) # Build golangci-lint-kal from custom configuration. + cd $(TOOLS_DIR); $(GOLANGCI_LINT) custom + $(GOVULNCHECK): # Build govulncheck. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GOVULNCHECK_PKG) $(GOVULNCHECK_BIN) $(GOVULNCHECK_VER) diff --git a/hack/tools/release/notes/list_test.go b/hack/tools/release/notes/list_test.go index c45722215edb..c5848e236d9f 100644 --- a/hack/tools/release/notes/list_test.go +++ b/hack/tools/release/notes/list_test.go @@ -69,45 +69,45 @@ func Test_buildSetOfPRNumbers(t *testing.T) { func Test_githubFromToPRLister_listPRs(t *testing.T) { tests := []struct { name string - lister *githubFromToPRLister + fields *githubFromToPRLister args ref wantErr bool }{ { name: "Successful PR Listing", - lister: &githubFromToPRLister{ + fields: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/cluster-api", + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v1.4.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "v1.5.0", + value: "v0.27.0", }, branch: "main", }, args: ref{ reType: "tags", - value: "v1.4.0", + value: "v0.26.0", }, wantErr: false, }, { name: "Setting previousReleaseRef.value blank - should use toRef and fromRef from fields", - lister: &githubFromToPRLister{ + fields: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/cluster-api", + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v1.4.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "v1.5.0", + value: "v0.27.0", }, branch: "main", }, @@ -119,35 +119,35 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { }, { name: "Create PR List when fromRef is not set", - lister: &githubFromToPRLister{ + fields: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/cluster-api", + repo: "kubernetes-sigs/kind", }, toRef: ref{ reType: "tags", - value: "v1.5.0", + value: "v0.27.0", }, branch: "main", }, args: ref{ reType: "tags", - value: "v1.4.0", + value: "v0.26.0", }, wantErr: false, }, { name: "Fail when previousReleaseRef.value is set to invalid", - lister: &githubFromToPRLister{ + fields: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/cluster-api", + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v1.4.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", - value: "v1.5.0", + value: "v0.27.0", }, branch: "main", }, @@ -159,13 +159,13 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { }, { name: "Fail when toRef and previousReleaseRef set blank", - lister: &githubFromToPRLister{ + fields: &githubFromToPRLister{ client: &githubClient{ - repo: "kubernetes-sigs/cluster-api", + repo: "kubernetes-sigs/kind", }, fromRef: ref{ reType: "tags", - value: "v1.4.0", + value: "v0.26.0", }, toRef: ref{ reType: "tags", @@ -182,7 +182,13 @@ func Test_githubFromToPRLister_listPRs(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, err := tt.lister.listPRs(tt.args) + l := &githubFromToPRLister{ + client: tt.fields.client, + fromRef: tt.fields.fromRef, + toRef: tt.fields.toRef, + branch: tt.fields.branch, + } + _, err := l.listPRs(tt.args) if (err != nil) != tt.wantErr { t.Errorf("githubFromToPRLister.listPRs() error = %v, wantErr %v", err, tt.wantErr) return