Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
00db91d
remove asciinema upload from update-demos target (#2786)
perdasilva Jun 26, 2026
0227f92
:bug: OCPBUGS-92037: increase catalog HTTP client timeout from 10s to…
joelanford Jun 26, 2026
5e85615
:seedling: Bump golang.org/x/tools from 0.45.0 to 0.46.0 (#2788)
dependabot[bot] Jun 26, 2026
8d49904
:seedling: Bump helm.sh/helm/v3 from 3.21.0 to 3.21.1 (#2789)
dependabot[bot] Jun 26, 2026
cf0266c
:seedling: Upgrade boxcutter to v0.14.0 and adapt sibling owners API …
perdasilva Jun 26, 2026
c884082
:seedling: Bump actions/setup-go from 6 to 6.4.0 (#2781)
dependabot[bot] Jun 29, 2026
c3caa22
feat: enable parallel e2e test execution for faster local dev feedbac…
pedjak Jun 29, 2026
31ea633
Merge branch 'main' into synchronize
Jun 30, 2026
f9823bc
UPSTREAM: <carry>: Add OpenShift specific files
dtfranz Oct 26, 2023
e50d7ba
UPSTREAM: <carry>: Add new tests for single/own namespaces install modes
camilamacedo86 Oct 6, 2025
c69ca58
UPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
camilamacedo86 Oct 13, 2025
e6210ec
UPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp …
camilamacedo86 Oct 13, 2025
ef869f4
UPSTREAM: <carry>: Update OCP catalogs to v4.21
tmshort Oct 13, 2025
a34a7d5
UPSTREAM: <carry>: support singleown cases in disconnected
kuiwang02 Oct 16, 2025
0fc706f
UPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
kuiwang02 Oct 17, 2025
5af3e03
UPSTREAM: <carry>: Define Default timeouts and apply their usage accr…
camilamacedo86 Oct 22, 2025
d43163e
UPSTREAM: <carry>: Update to new feature-gate options in helm
tmshort Oct 22, 2025
7a89ca0
UPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniq…
camilamacedo86 Oct 22, 2025
d52d5a8
UPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comme…
camilamacedo86 Oct 24, 2025
83c90b6
UPSTREAM: <carry>: Update OwnSingle template to use spec.config.inlin…
kuiwang02 Nov 3, 2025
a8038e7
UPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension…
camilamacedo86 Nov 4, 2025
6f0e514
UPSTREAM: <carry>: Add [OTP] to migrated cases
kuiwang02 Nov 7, 2025
54878da
UPSTREAM: <carry>: [OTE]: Upgrade dependencies used
camilamacedo86 Nov 5, 2025
9762b7b
UPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version…
camilamacedo86 Nov 10, 2025
6d0d8c6
UPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and depe…
camilamacedo86 Nov 11, 2025
6344a36
UPSTREAM: <carry>: add disconnected environment support with custom p…
kuiwang02 Nov 12, 2025
aa3607d
UPSTREAM: <carry>: migrate jiazha test cases to OTE
jianzhangbjz Nov 14, 2025
4bea22b
UPSTREAM: <carry>: migrate clustercatalog case to ote
Xia-Zhao-rh Oct 17, 2025
1afceb2
UPSTREAM: <carry>: migrate olmv1 QE stress cases
kuiwang02 Nov 20, 2025
df7baac
UPSTREAM: <carry>: Use busybox/httpd to simulate probes
tmshort Nov 25, 2025
1222c5d
UPSTREAM: <carry>: migrate olmv1 QE cases
Xia-Zhao-rh Nov 25, 2025
5b6b7b0
UPSTREAM: <carry>: add agent for olmv1 qe cases
kuiwang02 Oct 21, 2025
79168db
UPSTREAM: <carry>: Disable upstream PodDisruptionBudget
tmshort Dec 3, 2025
5a14799
UPSTREAM: <carry>: Add AGENTS.md for AI code contributions
rashmigottipati Dec 11, 2025
d144495
UPSTREAM: <carry>: address review comments through addl prompts
rashmigottipati Dec 11, 2025
9c745e1
UPSTREAM: <carry>: addressing some more review comments
rashmigottipati Dec 11, 2025
23d5284
UPSTREAM: <carry>: remove DCO line
rashmigottipati Dec 11, 2025
19865f8
UPSTREAM: <carry>: migrate bandrade test cases to OTE
bandrade Nov 18, 2025
12b65fe
UPSTREAM: <carry>: update metadata
bandrade Dec 3, 2025
b634288
UPSTREAM: <carry>: remove originalName
bandrade Dec 3, 2025
115e5f3
UPSTREAM: <carry>: update 80458's timeout to 180s
jianzhangbjz Dec 8, 2025
ec57816
UPSTREAM: <carry>: update 83026 to specify the clustercatalog
jianzhangbjz Dec 15, 2025
f65fddb
UPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
oceanc80 Dec 18, 2025
2e0e817
UPSTREAM: <carry>: Use oc client for running e2e tests
pedjak Jan 13, 2026
903d460
UPSTREAM: <carry>: Run upstream e2e tests tagged with `@catalogd-update`
pedjak Jan 14, 2026
c5c6b70
UPSTREAM: <carry>: enhance case to make it more stable
kuiwang02 Jan 6, 2026
05fa45c
UPSTREAM: <carry>: add service account to curl job
ehearne-redhat Jan 7, 2026
9385e63
UPSTREAM: <carry>: move sa creation out of buildCurlJob()
ehearne-redhat Jan 8, 2026
8a41556
UPSTREAM: <carry>: comment out delete service account
ehearne-redhat Jan 9, 2026
86098bf
UPSTREAM: <carry>: move defercleanup for sa for LIFO
ehearne-redhat Jan 9, 2026
1993a45
UPSTREAM: <carry>: add polling so job fully deleted before proceed
ehearne-redhat Jan 12, 2026
4cc9aae
UPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redha…
sosiouxme Jan 20, 2026
f92296c
UPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
camilamacedo86 Jan 8, 2026
770809f
UPSTREAM: <carry>: config watchnamespace cases
kuiwang02 Jan 6, 2026
59fde5c
UPSTREAM: <carry>: enhance ocp-79770
Xia-Zhao-rh Jan 26, 2026
6186695
UPSTREAM: <carry>: upgrade version support case
kuiwang02 Jan 28, 2026
fbc694e
UPSTREAM: <carry>: Remove installed condition check from auth preflig…
Jan 30, 2026
ac9cbd4
UPSTREAM: <carry>: Add openshift/api dependency
Jan 30, 2026
6e40335
UPSTREAM: <carry>: Add boxcutter specific preflight auth test
Jan 30, 2026
0f83bc2
UPSTREAM: <carry>: adjust watchnamespace case based on change
kuiwang02 Feb 2, 2026
22f68b3
UPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root…
camilamacedo86 Feb 3, 2026
9cf28d8
UPSTREAM: <carry>: add 83979 automation
bandrade Feb 2, 2026
fed5201
UPSTREAM: <carry>: add 85889 automation
bandrade Feb 2, 2026
46985ab
UPSTREAM: <carry>: Update test-operator startup script to fix pod pro…
Feb 4, 2026
cdeb2b3
UPSTREAM: <carry>: Fix up own-namespace invalid configuration test
Feb 7, 2026
30e5a49
UPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles…
camilamacedo86 Feb 24, 2026
1365de0
UPSTREAM: <carry>: adjust sa and permission test cases per new change…
kuiwang02 Feb 2, 2026
26fed48
UPSTREAM: <carry>: Update OCP catalogs to v4.22
camilamacedo86 Feb 3, 2026
dd47cb3
UPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and…
camilamacedo86 Feb 26, 2026
45a1222
UPSTREAM: <carry>: fix 83026 for TP cluster
jianzhangbjz Feb 28, 2026
55c9b35
UPSTREAM: <carry>: serviceAccount validation unified across all runtimes
kuiwang02 Mar 6, 2026
cc65efa
UPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
stbenjam Mar 6, 2026
1150652
UPSTREAM: <carry>: Increase install timeout and add diagnostic loggin…
camilamacedo86 Mar 11, 2026
999fa07
UPSTREAM: <carry>: add service account to curl job
ehearne-redhat Mar 2, 2026
53bca28
UPSTREAM: <carry>: update OCP-75441 to support multi-arch
jianzhangbjz Mar 19, 2026
ba6d77c
UPSTREAM: <carry>: deployment config cases
kuiwang02 Feb 6, 2026
012ff03
UPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
tmshort Mar 11, 2026
c51e2bf
UPSTREAM: <carry>: Update openshift/api and client-go
tmshort Mar 19, 2026
6724815
UPSTREAM: <carry>: Add boxcutter tests
camilamacedo86 Mar 23, 2026
3480636
UPSTREAM: <carry>: enhance QE cases
Xia-Zhao-rh Mar 17, 2026
31de296
UPSTREAM: <carry>: Update quay-operator version to one containing arm…
dtfranz Mar 24, 2026
fd2f91e
UPSTREAM: <carry>: verify volume/volumeMount override
kuiwang02 Mar 25, 2026
c72b697
UPSTREAM: <carry>: Add long-duration test script and documents
jianzhangbjz Mar 11, 2026
fececcd
UPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
tmshort Mar 27, 2026
55a1eb5
UPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSe…
camilamacedo86 Mar 31, 2026
b28b9b3
UPSTREAM: <carry>: Skip incompatible operator test when Boxcutter use…
camilamacedo86 Mar 31, 2026
8359eb6
UPSTREAM: <carry>: add ocp-87557
bandrade Feb 8, 2026
c5da2b5
UPSTREAM: <carry>: Add fgiudici as reviewer
fgiudici Mar 31, 2026
e929442
UPSTREAM: <carry>: Remove skip for incompatible operator check after …
camilamacedo86 Apr 1, 2026
9b57f6e
UPSTREAM: <carry>: Test empty affinity erasure and cleanup
kuiwang02 Apr 1, 2026
e16d782
UPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in prefligh…
camilamacedo86 Apr 9, 2026
a7a6df7
UPSTREAM: <carry>: Expand OTE docs with more comprehensive details
camilamacedo86 Apr 15, 2026
d193977
UPSTREAM: <carry>: Disable upstream TLSProfile tests
tmshort Apr 18, 2026
7126819
UPSTREAM: <carry>: OTE: Simplify by remove option to configure tests …
camilamacedo86 Apr 20, 2026
89afd08
UPSTREAM: <carry>: OTE - Make OTE local output easier to read
camilamacedo86 Apr 21, 2026
be3bac7
UPSTREAM: <carry>: remove dead e2e registry push job and related vari…
joelanford Apr 29, 2026
88aae28
UPSTREAM: <carry>: OCPBUGS-62517: Set replicas=1, PDB, and pod anti-a…
tmshort Apr 23, 2026
d082173
UPSTREAM: <carry>: fix(test): drop blocking namespace-deletion wait b…
tmshort May 4, 2026
58fd657
UPSTREAM: <carry>: Fix downstream e2e test invocation
tmshort May 18, 2026
e88b245
UPSTREAM: <carry>: Delete openshift/registry.Dockerfile
joelanford May 19, 2026
0182c0f
UPSTREAM: <carry>: Remove test-experimenal-e2e
tmshort May 20, 2026
0d89c60
UPSTREAM: <carry>: Update readme Default Catalog Tests
camilamacedo86 May 27, 2026
20e4b4d
UPSTREAM: <carry>: add OLMv1 topology-based deployment scaling e2e test
tmshort May 26, 2026
8547a8e
UPSTREAM: <carry>: Update dockerfiles to use golang-1.26-release-4.23…
tmshort Jun 4, 2026
21e5c2c
UPSTREAM: <carry>: Updating ose-olm-operator-controller-container ima…
Jun 6, 2026
fe20a15
UPSTREAM: <carry>: Updating ose-olm-catalogd-container image to be co…
Jun 6, 2026
a2284b0
UPSTREAM: <carry>: Update catalogs for 4.23/5.0
tmshort May 21, 2026
efa3de8
UPSTREAM: <drop>: go mod vendor
Jun 30, 2026
35028e9
UPSTREAM: <drop>: remove upstream GitHub configuration
Jun 30, 2026
ff57789
UPSTREAM: <drop>: configure the commit-checker
Jun 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,6 @@ site

# Test profiling artifacts
test-profiles/

# Per-cluster kubeconfig files for e2e tests
.kubeconfig/
5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@ make test-e2e # Standard features
make test-experimental-e2e # Experimental features
make test-extension-developer-e2e # Extension developer workflow

# E2E tests in parallel (runs standard and experimental on separate KIND clusters)
# Recommended when machine has enough resources (4+ CPU cores, 8+ GB RAM) for faster feedback
make -j2 test-e2e test-experimental-e2e
# Linux prerequisite: sudo sysctl fs.inotify.max_user_instances=512

# Regression tests
make test-regression

Expand Down
177 changes: 126 additions & 51 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ ifeq ($(origin KIND_CONFIG), undefined)
KIND_CONFIG := ./kind-config/kind-config.yaml
endif

KUBECONFIG_DIR := $(ROOT_DIR)/.kubeconfig

ifneq (, $(shell command -v docker 2>/dev/null))
CONTAINER_RUNTIME := docker
else ifneq (, $(shell command -v podman 2>/dev/null))
Expand All @@ -96,9 +98,6 @@ EXPERIMENTAL_MANIFEST := $(MANIFEST_HOME)/experimental.yaml
EXPERIMENTAL_E2E_MANIFEST := $(MANIFEST_HOME)/experimental-e2e.yaml
CATALOGS_MANIFEST := $(MANIFEST_HOME)/default-catalogs.yaml

# Disable -j flag for make
.NOTPARALLEL:

.DEFAULT_GOAL := build

#SECTION General
Expand Down Expand Up @@ -275,25 +274,6 @@ $(eval $(call install-sh,standard,operator-controller-standard.yaml))
.PHONY: test
test: manifests generate fmt lint test-unit test-e2e test-regression #HELP Run all tests.

.PHONY: e2e
e2e: E2E_TIMEOUT ?= 20m
e2e: GODOG_ARGS ?=
e2e: #EXHELP Run the e2e tests.
ifeq ($(strip $(GODOG_ARGS)),)
trap 'exit 130' INT; \
set +e; \
go test -count=1 -v ./test/e2e/features_test.go -timeout $(E2E_TIMEOUT) -args --godog.tags="~@Serial" --godog.concurrency=100; \
parallelExit=$$?; \
go test -count=1 -v ./test/e2e/features_test.go -timeout $(E2E_TIMEOUT) -args --godog.tags="@Serial" --godog.concurrency=1; \
serialExit=$$?; \
if [[ $$parallelExit -ne 0 ]] || [[ $$serialExit -ne 0 ]]; then \
echo "e2e tests failed: parallel=$$parallelExit serial=$$serialExit"; \
exit 1; \
fi
else
go test -count=1 -v ./test/e2e/features_test.go -timeout=$(E2E_TIMEOUT) -args $(GODOG_ARGS)
endif

export CLUSTER_REGISTRY_HOST := docker-registry.operator-controller-e2e.svc:5000
.PHONY: extension-developer-e2e
extension-developer-e2e: export OPERATOR_SDK := $(OPERATOR_SDK)
Expand Down Expand Up @@ -333,47 +313,143 @@ test-regression: #HELP Run regression test
# may be helpful for debugging purposes after a test run.
#
# for example: ARTIFACT_PATH=/tmp/artifacts make test-e2e
.PHONY: test-e2e
test-e2e: SOURCE_MANIFEST := $(STANDARD_E2E_MANIFEST)
test-e2e: KIND_CLUSTER_NAME := operator-controller-e2e
#
# E2E targets use pattern rules (kind-cluster-%, kind-load-%, etc.) with the stem
# identifying the variant (e2e, experimental-e2e). Each variant runs on its own KIND
# cluster, enabling parallel execution via make -j2 test-e2e test-experimental-e2e.
#
# Parallel runs require sufficient inotify instances for multiple KIND clusters:
# sudo sysctl fs.inotify.max_user_instances=512
# To persist: echo "fs.inotify.max_user_instances=512" | sudo tee /etc/sysctl.d/99-kind.conf
#
ifneq (,$(and $(findstring -j,$(MAKEFLAGS)),$(findstring test-e2e,$(MAKECMDGOALS)),$(findstring test-experimental-e2e,$(MAKECMDGOALS)),$(findstring Linux,$(shell uname))))
$(info NOTE: Running both standard and experimental e2e tests in parallel requires fs.inotify.max_user_instances>=512 (current: $(shell sysctl -n fs.inotify.max_user_instances)))
endif

# Variant-specific overrides on top-level targets propagate down through the entire chain
.PHONY: test-e2e test-experimental-e2e
test-e2e: GO_BUILD_EXTRA_FLAGS := -cover
test-e2e: COVERAGE_NAME := e2e
test-e2e: export MANIFEST := $(STANDARD_RELEASE_MANIFEST)
test-e2e: export INSTALL_DEFAULT_CATALOGS := false
test-e2e: run-internal prometheus e2e e2e-coverage kind-clean #HELP Run e2e test suite on local kind cluster

.PHONY: test-experimental-e2e
test-experimental-e2e: SOURCE_MANIFEST := $(EXPERIMENTAL_E2E_MANIFEST)
test-experimental-e2e: KIND_CLUSTER_NAME := operator-controller-e2e
test-experimental-e2e: KIND_CONFIG := ./kind-config/kind-config-2node.yaml
test-e2e: E2E_SOURCE_MANIFEST := $(STANDARD_E2E_MANIFEST)
test-e2e: E2E_RELEASE_MANIFEST := $(STANDARD_RELEASE_MANIFEST)
test-experimental-e2e: GO_BUILD_EXTRA_FLAGS := -cover
test-experimental-e2e: COVERAGE_NAME := experimental-e2e
test-experimental-e2e: export MANIFEST := $(EXPERIMENTAL_RELEASE_MANIFEST)
test-experimental-e2e: export INSTALL_DEFAULT_CATALOGS := false
test-experimental-e2e: PROMETHEUS_VALUES := testdata/prometheus/values-experimental.yaml
test-experimental-e2e: KIND_CONFIG := ./kind-config/kind-config-2node.yaml
test-experimental-e2e: E2E_SOURCE_MANIFEST := $(EXPERIMENTAL_E2E_MANIFEST)
test-experimental-e2e: E2E_RELEASE_MANIFEST := $(EXPERIMENTAL_RELEASE_MANIFEST)
test-experimental-e2e: E2E_PROMETHEUS_VALUES := testdata/prometheus/values-experimental.yaml
test-experimental-e2e: E2E_TIMEOUT ?= 25m

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
make -n test-experimental-e2e 2>/dev/null | rg -n -- '-timeout[ =][^ ]+'

Repository: openshift/operator-framework-operator-controller

Length of output: 186


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Find every E2E_TIMEOUT reference and show the surrounding Makefile context.
rg -n -C 3 'E2E_TIMEOUT|test-experimental-e2e|e2e-run-%' Makefile

# Show the relevant Makefile section with line numbers.
sed -n '320,450p' Makefile

Repository: openshift/operator-framework-operator-controller

Length of output: 10696


🏁 Script executed:

#!/bin/bash
set -euo pipefail

tmpdir="$(mktemp -d)"
cat >"$tmpdir/Makefile" <<'EOF'
.PHONY: parent child
parent: VAR ?= 25m
parent: child

child: VAR ?= 20m
child:
	`@echo` VAR=$(VAR)
EOF

echo "=== make parent ==="
make -C "$tmpdir" parent

echo "=== make child VAR from parent chain via intermediate target ==="
cat >"$tmpdir/Makefile" <<'EOF'
.PHONY: parent mid child
parent: VAR ?= 25m
parent: mid

mid: child

child: VAR ?= 20m
child:
	`@echo` VAR=$(VAR)
EOF
make -C "$tmpdir" parent

echo "=== make -n with debug output ==="
make -C "$tmpdir" -n parent --debug=v 2>&1 | sed -n '1,120p'

Repository: openshift/operator-framework-operator-controller

Length of output: 249


🌐 Web query:

GNU make target-specific variable assignment ?= inherited prerequisite precedence

💡 Result:

In GNU make, target-specific variable assignments—including the conditional assignment operator?=—function within the context of a specific target and are inherited by its prerequisites [1][2]. Key behaviors regarding target-specific variables and their inheritance include: 1. Inheritance Mechanism: When you define a target-specific variable, its value remains in effect for the recipe of that target and for the recipes of all its prerequisites (and their descendants), unless a prerequisite explicitly overrides it with its own target-specific variable value [2][3]. 2. Conditional Assignment (?=): The?= operator sets a variable only if it is not already defined [4]. When used as a target-specific assignment, it checks if the variable is defined within the context of the target. Because target-specific variables are effectively distinct from global variables, a target-specific?= assignment will use the global value if no target-specific value has been set yet, or it will do nothing if a target-specific value already exists for that target [1]. 3. Prerequisite Precedence and Scope: Target-specific variables are only available within the context of a target’s recipe and in other target-specific assignments [1][2]. They are generally not available during the initial parsing phase or in the prerequisite list of a rule [5][6]. If a file is a prerequisite for multiple targets, it inherits the target-specific variable values from the first target that triggers its build [1]. Prerequisites do not inherit target-specific variables from each other, only from the parent target that is currently being built [6]. 4. Precedence: Target-specific variables have the same priority as other makefile variables but are overridden by variables defined on the command line or via the override directive [1][2]. If a prerequisite has its own target-specific variable defined for the same variable name, that definition takes precedence over the inherited value [2][6].

Citations:


Preserve the experimental timeout override. The ?= on e2e-run-% won’t override the inherited E2E_TIMEOUT=25m from test-experimental-e2e, so the experimental suite can still run with the 25m value. Move the fallback into the recipe or set E2E_TIMEOUT unconditionally on e2e-run-%.

🧰 Tools
🪛 checkmake (0.3.2)

[warning] 339-339: Target "test-experimental-e2e" defined multiple times (lines 334 and 339).

(uniquetargets)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Makefile` at line 339, The experimental E2E timeout override is still being
inherited, so `e2e-run-%` does not reliably get the longer timeout when invoked
through `test-experimental-e2e`. Update the `test-experimental-e2e` and
`e2e-run-%` Makefile targets so the fallback timeout is applied inside the
`e2e-run-%` recipe or `E2E_TIMEOUT` is assigned unconditionally there, ensuring
the experimental suite always uses the intended timeout rather than the
inherited 25m value.

test-experimental-e2e: run-internal prometheus e2e e2e-coverage kind-clean #HELP Run experimental e2e test suite on local kind cluster

# Conventions: cluster name = operator-controller-$*, kubeconfig = $(KUBECONFIG_DIR)/operator-controller-$*.kubeconfig
E2E_KUBECONFIG = $(KUBECONFIG_DIR)/operator-controller-$*.kubeconfig

CATALOGD_CERT_SECRET = catalogd-service-cert-$(VERSION)

.PHONY: prometheus
prometheus: PROMETHEUS_NAMESPACE := olmv1-system
prometheus: PROMETHEUS_CHART_VERSION := 86.2.2
prometheus: $(HELM) #EXHELP Deploy Prometheus into specified namespace
.PHONY: kind-cluster-%
kind-cluster-%: $(KIND) docker-build
@KIND_NODE_IMAGE=$$(K8S_VERSION=$(K8S_VERSION) $(VALIDATE_KINDEST_NODE_SCRIPT)) || exit 1; \
$(KIND) delete cluster --name operator-controller-$* 2>/dev/null || true; \
$(KIND) create cluster --name operator-controller-$* --config $(KIND_CONFIG) --image "$$KIND_NODE_IMAGE"; \
mkdir -p $(KUBECONFIG_DIR); \
KUBECONFIG=$(E2E_KUBECONFIG) $(KIND) export kubeconfig --name operator-controller-$*; \
KUBECONFIG=$(E2E_KUBECONFIG) kubectl wait --for=condition=Ready nodes --all --timeout=2m

.PHONY: kind-load-%
kind-load-%: kind-cluster-%
$(KIND) load docker-image $(OPCON_IMG) --name operator-controller-$*
$(KIND) load docker-image $(CATD_IMG) --name operator-controller-$*

.PHONY: kind-deploy-%
kind-deploy-%: kind-load-% manifests
@echo "Using $(E2E_SOURCE_MANIFEST) as source manifest"
sed "s/cert-git-version/cert-$(VERSION)/g" $(E2E_SOURCE_MANIFEST) > $(E2E_RELEASE_MANIFEST)
export KUBECONFIG=$(E2E_KUBECONFIG) \
DEFAULT_CATALOG=$(CATALOGS_MANIFEST) \
CERT_MGR_VERSION=$(CERT_MGR_VERSION) \
INSTALL_DEFAULT_CATALOGS=false \
MANIFEST=$(E2E_RELEASE_MANIFEST); \
envsubst '$$DEFAULT_CATALOG,$$CERT_MGR_VERSION,$$INSTALL_DEFAULT_CATALOGS,$$MANIFEST' < scripts/install.tpl.sh | bash -s

.PHONY: lint-deployed-%
lint-deployed-%: kind-deploy-% $(KUBE_SCORE)
(export KUBECONFIG=$(E2E_KUBECONFIG); \
for ns in $$(printf "olmv1-system\n%s\n" "$(CATD_NAMESPACE)" | uniq); do \
for resource in $$(kubectl api-resources --verbs=list --namespaced -o name); do \
kubectl get $$resource -n $$ns -o yaml ; \
echo "---" ; \
done \
done) | $(KUBE_SCORE) score - \
--ignore-test container-resources \
--ignore-test container-image-pull-policy \
--ignore-test container-ephemeral-storage-request-and-limit \
--ignore-test container-security-context-user-group-id

.PHONY: wait-%
wait-%: lint-deployed-%
KUBECONFIG=$(E2E_KUBECONFIG) kubectl wait --for=condition=Available --namespace=$(CATD_NAMESPACE) deployment/catalogd-controller-manager --timeout=60s
KUBECONFIG=$(E2E_KUBECONFIG) kubectl wait --for=condition=Ready --namespace=$(CATD_NAMESPACE) certificate/catalogd-service-cert

.PHONY: prometheus-%
prometheus-%: wait-% $(HELM)
ifeq ($(strip $(E2E_SUMMARY_OUTPUT)),)
@echo "E2E_SUMMARY_OUTPUT unset; skipping prometheus deployment"
else
$(HELM) upgrade --install prometheus oci://ghcr.io/prometheus-community/charts/kube-prometheus-stack \
KUBECONFIG=$(E2E_KUBECONFIG) $(HELM) upgrade --install prometheus oci://ghcr.io/prometheus-community/charts/kube-prometheus-stack \
--namespace $(PROMETHEUS_NAMESPACE) --create-namespace \
--version $(PROMETHEUS_CHART_VERSION) \
-f testdata/prometheus/values.yaml \
$(if $(PROMETHEUS_VALUES),-f $(PROMETHEUS_VALUES)) \
$(if $(E2E_PROMETHEUS_VALUES),-f $(E2E_PROMETHEUS_VALUES)) \
--set-string 'prometheus.additionalServiceMonitors[1].endpoints[0].tlsConfig.ca.secret.name=$(CATALOGD_CERT_SECRET)' \
--set-string 'prometheus.additionalServiceMonitors[1].endpoints[0].tlsConfig.cert.secret.name=$(CATALOGD_CERT_SECRET)' \
--set-string 'prometheus.additionalServiceMonitors[1].endpoints[0].tlsConfig.keySecret.name=$(CATALOGD_CERT_SECRET)' \
--wait --timeout 5m
endif

.PHONY: e2e-run-%
e2e-run-%: E2E_TIMEOUT ?= 20m
e2e-run-%: GODOG_ARGS ?=
e2e-run-%: prometheus-%
ifeq ($(strip $(GODOG_ARGS)),)
E2E_PROMETHEUS_PORT=$$(grep -A1 'containerPort: 30900' $(KIND_CONFIG) | grep hostPort | awk '{print $$2}'); \
if [[ -z "$$E2E_PROMETHEUS_PORT" ]]; then echo "error: failed to extract prometheus hostPort from $(KIND_CONFIG)" >&2; exit 1; fi; \
trap 'exit 130' INT; \
set +e; \
KUBECONFIG=$(E2E_KUBECONFIG) \
MANIFEST=$(E2E_RELEASE_MANIFEST) \
INSTALL_DEFAULT_CATALOGS=false \
PROMETHEUS_URL=http://localhost:$$E2E_PROMETHEUS_PORT \
go test -count=1 -v ./test/e2e/features_test.go -timeout $(E2E_TIMEOUT) -args --godog.tags="~@Serial" --godog.concurrency=100; \
parallelExit=$$?; \
KUBECONFIG=$(E2E_KUBECONFIG) \
MANIFEST=$(E2E_RELEASE_MANIFEST) \
INSTALL_DEFAULT_CATALOGS=false \
PROMETHEUS_URL=http://localhost:$$E2E_PROMETHEUS_PORT \
go test -count=1 -v ./test/e2e/features_test.go -timeout $(E2E_TIMEOUT) -args --godog.tags="@Serial" --godog.concurrency=1; \
serialExit=$$?; \
if [[ $$parallelExit -ne 0 ]] || [[ $$serialExit -ne 0 ]]; then \
echo "e2e tests failed: parallel=$$parallelExit serial=$$serialExit"; \
exit 1; \
fi
else
E2E_PROMETHEUS_PORT=$$(grep -A1 'containerPort: 30900' $(KIND_CONFIG) | grep hostPort | awk '{print $$2}'); \
if [[ -z "$$E2E_PROMETHEUS_PORT" ]]; then echo "error: failed to extract prometheus hostPort from $(KIND_CONFIG)" >&2; exit 1; fi; \
KUBECONFIG=$(E2E_KUBECONFIG) \
MANIFEST=$(E2E_RELEASE_MANIFEST) \
INSTALL_DEFAULT_CATALOGS=false \
PROMETHEUS_URL=http://localhost:$$E2E_PROMETHEUS_PORT \
go test -count=1 -v ./test/e2e/features_test.go -timeout=$(E2E_TIMEOUT) -args $(GODOG_ARGS)
endif

.PHONY: e2e-coverage-%
e2e-coverage-%: e2e-run-%
KUBECONFIG=$(E2E_KUBECONFIG) COVERAGE_NAME=$* ./hack/test/e2e-coverage.sh

.PHONY: kind-clean-%
kind-clean-%: e2e-coverage-%
$(KIND) delete cluster --name operator-controller-$*

test-e2e: kind-clean-e2e #HELP Run e2e test suite on local kind cluster
test-experimental-e2e: kind-clean-experimental-e2e #HELP Run experimental e2e test suite on local kind cluster


.PHONY: test-extension-developer-e2e
test-extension-developer-e2e: SOURCE_MANIFEST := $(STANDARD_E2E_MANIFEST)
test-extension-developer-e2e: KIND_CLUSTER_NAME := operator-controller-ext-dev-e2e
Expand Down Expand Up @@ -424,10 +500,6 @@ test-st2ex-e2e: export TEST_CLUSTER_CATALOG_NAME := test-catalog
test-st2ex-e2e: export TEST_CLUSTER_EXTENSION_NAME := test-package
test-st2ex-e2e: experimental/install.sh standard/install.sh $(TEST_UPGRADE_E2E_TASKS) #HELP Run swichover (standard -> experimental) e2e tests on a local kind cluster

.PHONY: e2e-coverage
e2e-coverage:
COVERAGE_NAME=$(COVERAGE_NAME) ./hack/test/e2e-coverage.sh

TEST_PROFILE_BIN := bin/test-profile
.PHONY: build-test-profiler
build-test-profiler: #EXHELP Build the test profiling tool
Expand Down Expand Up @@ -563,6 +635,9 @@ run-experimental: export MANIFEST := $(EXPERIMENTAL_RELEASE_MANIFEST)
run-experimental: run-internal #HELP Build the operator-controller then deploy it with the experimental manifest into a new kind cluster.

CATD_NAMESPACE := olmv1-system
PROMETHEUS_NAMESPACE := olmv1-system
PROMETHEUS_CHART_VERSION := 86.2.2

.PHONY: wait
wait:
kubectl wait --for=condition=Available --namespace=$(CATD_NAMESPACE) deployment/catalogd-controller-manager --timeout=60s
Expand Down Expand Up @@ -630,11 +705,11 @@ deploy-docs: venv

# The demo script requires to install asciinema with: brew install asciinema to run on mac os envs.
# Please ensure that all demos are named with the demo name and the suffix -demo-script.sh
.PHONY: update-demos #EXHELP Update and upload the demos.
.PHONY: update-demos #EXHELP Validate demo recordings.
update-demos:
@for script in hack/demo/*-demo-script.sh; do \
nm=$$(basename $$script -script.sh); \
./hack/demo/generate-asciidemo.sh -u -n $$nm $$(basename $$script); \
./hack/demo/generate-asciidemo.sh -n $$nm $$(basename $$script); \
Comment thread
coderabbitai[bot] marked this conversation as resolved.
done

include Makefile.venv
30 changes: 15 additions & 15 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ require (
golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f
golang.org/x/mod v0.37.0
golang.org/x/sync v0.21.0
golang.org/x/tools v0.45.0
helm.sh/helm/v3 v3.21.0
golang.org/x/tools v0.46.0
helm.sh/helm/v3 v3.21.1
k8s.io/api v0.36.1
k8s.io/apiextensions-apiserver v0.36.1
k8s.io/apimachinery v0.36.1
Expand All @@ -47,7 +47,7 @@ require (
k8s.io/klog/v2 v2.140.0
k8s.io/kubernetes v1.36.1
k8s.io/utils v0.0.0-20260319190234-28399d86e0b5
pkg.package-operator.run/boxcutter v0.13.1
pkg.package-operator.run/boxcutter v0.14.0
sigs.k8s.io/controller-runtime v0.24.1
sigs.k8s.io/controller-tools v0.21.0
sigs.k8s.io/crdify v0.6.1-0.20260602124154-bb9957dbf465
Expand All @@ -57,11 +57,11 @@ require (

require (
k8s.io/component-helpers v0.36.1 // indirect
k8s.io/kube-openapi v0.0.0-20260427204847-8949caaa1199 // indirect
k8s.io/kube-openapi v0.0.0-20260520065146-aa012df4f4af // indirect
)

require (
cel.dev/expr v0.25.1 // indirect
cel.dev/expr v0.25.2 // indirect
dario.cat/mergo v1.0.2 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
Expand Down Expand Up @@ -107,7 +107,7 @@ require (
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/fatih/color v1.19.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fxamacker/cbor/v2 v2.9.1 // indirect
github.com/fxamacker/cbor/v2 v2.9.2 // indirect
github.com/go-errors/errors v1.5.1 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.9.0 // indirect
Expand All @@ -116,7 +116,7 @@ require (
github.com/go-jose/go-jose/v4 v4.1.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.23.1 // indirect
github.com/go-openapi/jsonreference v0.21.5 // indirect
github.com/go-openapi/jsonreference v0.21.6 // indirect
github.com/go-openapi/swag v0.26.0 // indirect
github.com/go-openapi/swag/cmdutils v0.26.0 // indirect
github.com/go-openapi/swag/conv v0.26.0 // indirect
Expand Down Expand Up @@ -160,10 +160,10 @@ require (
github.com/klauspost/pgzip v1.2.6 // indirect
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/lib/pq v1.11.2 // indirect
github.com/lib/pq v1.12.3 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-isatty v0.0.22 // indirect
github.com/mattn/go-runewidth v0.0.23 // indirect
github.com/mattn/go-sqlite3 v1.14.45 // indirect
github.com/miekg/pkcs11 v1.1.2 // indirect
Expand Down Expand Up @@ -215,22 +215,22 @@ require (
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect
go.opentelemetry.io/otel v1.43.0 // indirect
go.opentelemetry.io/otel v1.44.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect
go.opentelemetry.io/otel/metric v1.43.0 // indirect
go.opentelemetry.io/otel/metric v1.44.0 // indirect
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
go.opentelemetry.io/otel/trace v1.43.0 // indirect
go.opentelemetry.io/otel/trace v1.44.0 // indirect
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
go.podman.io/common v0.68.0 // indirect
go.podman.io/storage v1.63.0 // indirect
go.yaml.in/yaml/v2 v2.4.4 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.51.0 // indirect
golang.org/x/net v0.55.0 // indirect
golang.org/x/crypto v0.53.0 // indirect
golang.org/x/net v0.56.0 // indirect
golang.org/x/oauth2 v0.36.0 // indirect
golang.org/x/sys v0.46.0 // indirect
golang.org/x/term v0.43.0 // indirect
golang.org/x/term v0.44.0 // indirect
Comment on lines +218 to +233

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n 'go\.opentelemetry\.io/otel(/| )|go\.opentelemetry\.io/otel/exporters/otlp|go\.opentelemetry\.io/otel/sdk|go\.opentelemetry\.io/otel/trace|go\.opentelemetry\.io/otel/metric' go.mod openshift/tests-extension/go.mod

Repository: openshift/operator-framework-operator-controller

Length of output: 1182


🌐 Web query:

OpenTelemetry Go module version compatibility mixed minor versions otel sdk exporters otlp trace metric v1.43.0 v1.44.0

💡 Result:

In the OpenTelemetry Go ecosystem, modules are not guaranteed to be compatible simply by matching major versions; true compatibility is typically only assured for releases originating from the same commit [1]. While OpenTelemetry generally follows semantic versioning and aims for backward compatibility within a major version, relying on different minor versions across SDK components (e.g., mixing v1.43.0 and v1.44.0) can lead to unexpected runtime issues or dependency conflicts [1][2][3]. Key considerations for managing OpenTelemetry Go versions include: Dependency Consistency: OpenTelemetry maintainers typically release stable modules in unison, meaning they are tested and validated together [4]. Mixing minor versions (such as using v1.43.0 for the SDK and v1.44.0 for an OTLP exporter) is discouraged because it can result in conflicting internal dependencies, particularly when packages share underlying code or schema requirements [2][4]. Versioning Policy: OpenTelemetry Go follows standard Go module versioning [5][6]. Although the API guarantees backward compatibility for its stable components [7][3], mixing minor versions in your go.mod file may cause your build to pull in conflicting versions of transitive dependencies, which can lead to runtime errors, such as merging conflicts in Resource objects [2]. Best Practices: - Keep all OpenTelemetry modules at the same minor version (e.g., all at v1.44.0) to ensure the components are functionally aligned [3][4]. - If you encounter build or runtime issues after a partial upgrade, the recommended solution is to align all OpenTelemetry dependencies to the same version [3]. - When upgrading, it is generally safe and recommended to upgrade the entire suite of OpenTelemetry packages to the latest minor version to receive security patches and optimizations [3]. If you find that mixing versions is necessary for a specific reason, you should rigorously test the application, as the project does not explicitly guarantee compatibility across different minor versions of the SDK and exporters [1][3].

Citations:


Align the OpenTelemetry module versions

go.opentelemetry.io/otel, otel/metric, and otel/trace are on v1.44.0, while otel/exporters/otlp/* and otel/sdk are still on v1.43.0 in both go.mod and openshift/tests-extension/go.mod. Keep the OpenTelemetry packages on the same minor version to avoid pulling in an unsupported mix.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@go.mod` around lines 218 - 233, The OpenTelemetry dependencies are split
across minor versions, so update the remaining v1.43.0 entries to match the
v1.44.0 line already used by go.opentelemetry.io/otel, including
go.opentelemetry.io/otel/exporters/otlp/otlptrace,
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc, and
go.opentelemetry.io/otel/sdk in both go.mod files to keep the otel module set
aligned.

golang.org/x/text v0.38.0 // indirect
golang.org/x/time v0.15.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
Expand Down
Loading