Skip to content

NO-ISSUE: Synchronize From Upstream Repositories#707

Open
openshift-bot wants to merge 96 commits intoopenshift:mainfrom
openshift-bot:synchronize-upstream
Open

NO-ISSUE: Synchronize From Upstream Repositories#707
openshift-bot wants to merge 96 commits intoopenshift:mainfrom
openshift-bot:synchronize-upstream

Conversation

@openshift-bot
Copy link
Copy Markdown

@openshift-bot openshift-bot commented Apr 23, 2026

The downstream repository has been updated with the following following upstream commits:

Date Commit Author Message
2026-04-24 15:34:17 operator-framework/operator-controller@7277a46 dependabot[bot] 🌱 Bump golang.org/x/tools from 0.43.0 to 0.44.0 (#2673)
2026-04-24 15:31:22 operator-framework/operator-controller@967be14 Todd Short tests: add unit and e2e tests for HTTPS_PROXY support (#2654)
2026-04-23 17:37:46 operator-framework/operator-controller@c8585e9 dependabot[bot] 🌱 Bump platformdirs from 4.9.4 to 4.9.6 (#2671)
2026-04-23 17:35:03 operator-framework/operator-controller@6415a1c dependabot[bot] 🌱 Bump golang.org/x/mod from 0.34.0 to 0.35.0 (#2670)
2026-04-23 10:46:42 operator-framework/operator-controller@a47a0b4 dependabot[bot] 🌱 Bump github.com/moby/spdystream from 0.5.0 to 0.5.1 (#2669)
2026-04-23 08:53:23 operator-framework/operator-controller@c0dc83f Joe Lanford ✨ e2e: isolate tests with per-scenario dynamic catalogs (#2651)

The vendor/ directory has been updated and the following commits were carried:

Date Commit Author Message
2026-04-22 13:53:04 openshift/operator-framework-operator-controller@73ac3fd dtfranz UPSTREAM: <carry>: Add OpenShift specific files
2026-04-22 13:53:05 openshift/operator-framework-operator-controller@7952255 Camila Macedo UPSTREAM: <carry>: Add new tests for single/own namespaces install modes
2026-04-22 13:53:06 openshift/operator-framework-operator-controller@be123ce Camila Macedo UPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
2026-04-22 13:53:07 openshift/operator-framework-operator-controller@dcafc41 Camila Macedo UPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp images from openshift/catalogd/manifests.yaml
2026-04-22 13:53:07 openshift/operator-framework-operator-controller@2a52f67 Todd Short UPSTREAM: <carry>: Update OCP catalogs to v4.21
2026-04-22 13:53:08 openshift/operator-framework-operator-controller@7446900 Kui Wang UPSTREAM: <carry>: support singleown cases in disconnected
2026-04-22 13:53:08 openshift/operator-framework-operator-controller@4bc8b8a Kui Wang UPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
2026-04-22 13:53:09 openshift/operator-framework-operator-controller@e6074c3 Camila Macedo UPSTREAM: <carry>: Define Default timeouts and apply their usage accross to avoid flakes
2026-04-22 13:53:09 openshift/operator-framework-operator-controller@66c65fc Todd Short UPSTREAM: <carry>: Update to new feature-gate options in helm
2026-04-22 13:53:10 openshift/operator-framework-operator-controller@c21263e Camila Macedo UPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniquess and waiting for k8s cleanups
2026-04-22 13:53:10 openshift/operator-framework-operator-controller@1f7b390 Camila Macedo UPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comments ( Follow-Up of: 714977c )
2026-04-22 13:53:11 openshift/operator-framework-operator-controller@d1798fb Kui Wang UPSTREAM: <carry>: Update OwnSingle template to use spec.config.inline.watchNamespace
2026-04-22 13:53:11 openshift/operator-framework-operator-controller@a5e2177 Camila Macedo UPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension uninstall
2026-04-22 13:53:12 openshift/operator-framework-operator-controller@1b437a5 Kui Wang UPSTREAM: <carry>: Add [OTP] to migrated cases
2026-04-22 13:53:13 openshift/operator-framework-operator-controller@7d59cca Camila Macedo UPSTREAM: <carry>: [OTE]: Upgrade dependencies used
2026-04-22 13:53:13 openshift/operator-framework-operator-controller@e6afa52 Camila Macedo UPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version format
2026-04-22 13:53:14 openshift/operator-framework-operator-controller@ca59600 Camila Macedo UPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and dependencies
2026-04-22 13:53:15 openshift/operator-framework-operator-controller@6295ce6 Kui Wang UPSTREAM: <carry>: add disconnected environment support with custom prow job for migrated qe cases
2026-04-22 13:53:16 openshift/operator-framework-operator-controller@39917f1 Jian Zhang UPSTREAM: <carry>: migrate jiazha test cases to OTE
2026-04-22 13:53:16 openshift/operator-framework-operator-controller@8c058eb Xia Zhao UPSTREAM: <carry>: migrate clustercatalog case to ote
2026-04-22 13:53:17 openshift/operator-framework-operator-controller@f151b4e Kui Wang UPSTREAM: <carry>: migrate olmv1 QE stress cases
2026-04-22 13:53:17 openshift/operator-framework-operator-controller@1dc3eda Todd Short UPSTREAM: <carry>: Use busybox/httpd to simulate probes
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@ac73f68 Xia Zhao UPSTREAM: <carry>: migrate olmv1 QE cases
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@b3ca065 Kui Wang UPSTREAM: <carry>: add agent for olmv1 qe cases
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@5ee9f5d Todd Short UPSTREAM: <carry>: Disable upstream PodDisruptionBudget
2026-04-22 13:53:19 openshift/operator-framework-operator-controller@746f5fe Rashmi Gottipati UPSTREAM: <carry>: Add AGENTS.md for AI code contributions
2026-04-22 13:53:19 openshift/operator-framework-operator-controller@77c6b38 Rashmi Gottipati UPSTREAM: <carry>: address review comments through addl prompts
2026-04-22 13:53:20 openshift/operator-framework-operator-controller@153e40c Rashmi Gottipati UPSTREAM: <carry>: addressing some more review comments
2026-04-22 13:53:20 openshift/operator-framework-operator-controller@6daa8bc Rashmi Gottipati UPSTREAM: <carry>: remove DCO line
2026-04-22 13:53:21 openshift/operator-framework-operator-controller@111e025 Bruno Andrade UPSTREAM: <carry>: migrate bandrade test cases to OTE
2026-04-22 13:53:21 openshift/operator-framework-operator-controller@f41805f Bruno Andrade UPSTREAM: <carry>: update metadata
2026-04-22 13:53:22 openshift/operator-framework-operator-controller@22d8b59 Bruno Andrade UPSTREAM: <carry>: remove originalName
2026-04-22 13:53:22 openshift/operator-framework-operator-controller@d522a24 Jian Zhang UPSTREAM: <carry>: update 80458's timeout to 180s
2026-04-22 13:53:23 openshift/operator-framework-operator-controller@0b3440e Jian Zhang UPSTREAM: <carry>: update 83026 to specify the clustercatalog
2026-04-22 13:53:23 openshift/operator-framework-operator-controller@34d14a4 Catherine Chan-Tse UPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
2026-04-22 13:53:24 openshift/operator-framework-operator-controller@9efec63 Predrag Knezevic UPSTREAM: <carry>: Use oc client for running e2e tests
2026-04-22 13:53:24 openshift/operator-framework-operator-controller@14e1a61 Predrag Knezevic UPSTREAM: <carry>: Run upstream e2e tests tagged with @catalogd-update
2026-04-22 13:53:25 openshift/operator-framework-operator-controller@7b9d84a Kui Wang UPSTREAM: <carry>: enhance case to make it more stable
2026-04-22 13:53:25 openshift/operator-framework-operator-controller@8101ae9 Evan Hearne UPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@fe22048 Evan Hearne UPSTREAM: <carry>: move sa creation out of buildCurlJob()
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@ba5a14c Evan Hearne UPSTREAM: <carry>: comment out delete service account
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@ee804bf Evan Hearne UPSTREAM: <carry>: move defercleanup for sa for LIFO
2026-04-22 13:53:27 openshift/operator-framework-operator-controller@41868ae Evan Hearne UPSTREAM: <carry>: add polling so job fully deleted before proceed
2026-04-22 13:53:27 openshift/operator-framework-operator-controller@5a6c36a Luke Meyer UPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redhat/add-service-account-curl-job"
2026-04-22 13:53:28 openshift/operator-framework-operator-controller@7b4c9f0 Camila Macedo UPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
2026-04-22 13:53:28 openshift/operator-framework-operator-controller@edea496 Kui Wang UPSTREAM: <carry>: config watchnamespace cases
2026-04-22 13:53:29 openshift/operator-framework-operator-controller@d262a58 Xia Zhao UPSTREAM: <carry>: enhance ocp-79770
2026-04-22 13:53:29 openshift/operator-framework-operator-controller@ef56866 Kui Wang UPSTREAM: <carry>: upgrade version support case
2026-04-22 13:53:30 openshift/operator-framework-operator-controller@3db44c7 Per Goncalves da Silva UPSTREAM: <carry>: Remove installed condition check from auth preflight test
2026-04-22 13:53:30 openshift/operator-framework-operator-controller@f67b8df Per Goncalves da Silva UPSTREAM: <carry>: Add openshift/api dependency
2026-04-22 13:53:31 openshift/operator-framework-operator-controller@b319bb1 Per Goncalves da Silva UPSTREAM: <carry>: Add boxcutter specific preflight auth test
2026-04-22 13:53:31 openshift/operator-framework-operator-controller@522cb2b Kui Wang UPSTREAM: <carry>: adjust watchnamespace case based on change
2026-04-22 13:53:32 openshift/operator-framework-operator-controller@29ef9da Camila Macedo UPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root dir
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@0fed203 Bruno Andrade UPSTREAM: <carry>: add 83979 automation
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@de588bd Bruno Andrade UPSTREAM: <carry>: add 85889 automation
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@0677d3c Per Goncalves da Silva UPSTREAM: <carry>: Update test-operator startup script to fix pod probe endpoints
2026-04-22 13:53:34 openshift/operator-framework-operator-controller@cffd47f Per Goncalves da Silva UPSTREAM: <carry>: Fix up own-namespace invalid configuration test
2026-04-22 13:53:34 openshift/operator-framework-operator-controller@780b3f5 Camila Macedo UPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles instead of openshift-pipelines-operator-rh
2026-04-22 13:53:35 openshift/operator-framework-operator-controller@1c96b44 Kui Wang UPSTREAM: <carry>: adjust sa and permission test cases per new change from boxcutterruntime
2026-04-22 13:53:35 openshift/operator-framework-operator-controller@e867918 Camila Macedo UPSTREAM: <carry>: Update OCP catalogs to v4.22
2026-04-22 13:53:36 openshift/operator-framework-operator-controller@0b80cf9 Camila Macedo UPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and dependencies
2026-04-22 13:53:37 openshift/operator-framework-operator-controller@b88351b Jian Zhang UPSTREAM: <carry>: fix 83026 for TP cluster
2026-04-22 13:53:38 openshift/operator-framework-operator-controller@d31e67c Kui Wang UPSTREAM: <carry>: serviceAccount validation unified across all runtimes
2026-04-22 13:53:38 openshift/operator-framework-operator-controller@9f3943f Stephen Benjamin UPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
2026-04-22 13:53:39 openshift/operator-framework-operator-controller@ac0012c Camila Macedo UPSTREAM: <carry>: Increase install timeout and add diagnostic logging for CE install tests
2026-04-22 13:53:39 openshift/operator-framework-operator-controller@2ae413f Evan Hearne UPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:40 openshift/operator-framework-operator-controller@8bf116d Jian Zhang UPSTREAM: <carry>: update OCP-75441 to support multi-arch
2026-04-22 13:53:40 openshift/operator-framework-operator-controller@478a5b0 Kui Wang UPSTREAM: <carry>: deployment config cases
2026-04-22 13:53:41 openshift/operator-framework-operator-controller@0eb1038 Todd Short UPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
2026-04-22 13:53:41 openshift/operator-framework-operator-controller@d591bed Todd Short UPSTREAM: <carry>: Update openshift/api and client-go
2026-04-22 13:53:42 openshift/operator-framework-operator-controller@5169a85 Camila Macedo UPSTREAM: <carry>: Add boxcutter tests
2026-04-22 13:53:42 openshift/operator-framework-operator-controller@af8e61d Xia Zhao UPSTREAM: <carry>: enhance QE cases
2026-04-22 13:53:43 openshift/operator-framework-operator-controller@8381ec3 Daniel Franz UPSTREAM: <carry>: Update quay-operator version to one containing arm64 support
2026-04-22 13:53:43 openshift/operator-framework-operator-controller@f1e8159 Kui Wang UPSTREAM: <carry>: verify volume/volumeMount override
2026-04-22 13:53:44 openshift/operator-framework-operator-controller@e7d74f6 Jian Zhang UPSTREAM: <carry>: Add long-duration test script and documents
2026-04-22 13:53:44 openshift/operator-framework-operator-controller@7d2cac3 Todd Short UPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
2026-04-22 13:53:45 openshift/operator-framework-operator-controller@6474a8c Camila Macedo UPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSet in OTE tests
2026-04-22 13:53:45 openshift/operator-framework-operator-controller@5f7a011 Camila Macedo UPSTREAM: <carry>: Skip incompatible operator test when Boxcutter uses ClusterObjectSet
2026-04-22 13:53:46 openshift/operator-framework-operator-controller@c5923fd Bruno Andrade UPSTREAM: <carry>: add ocp-87557
2026-04-22 13:53:46 openshift/operator-framework-operator-controller@ecaf2f9 Francesco Giudici UPSTREAM: <carry>: Add fgiudici as reviewer
2026-04-22 13:53:47 openshift/operator-framework-operator-controller@c07855d Camila Macedo UPSTREAM: <carry>: Remove skip for incompatible operator check after rename of CER
2026-04-22 13:53:47 openshift/operator-framework-operator-controller@11baf82 Kui Wang UPSTREAM: <carry>: Test empty affinity erasure and cleanup
2026-04-22 13:53:48 openshift/operator-framework-operator-controller@43598ec Camila Macedo UPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in preflight test
2026-04-22 13:53:48 openshift/operator-framework-operator-controller@19eca43 Camila Macedo UPSTREAM: <carry>: Expand OTE docs with more comprehensive details
2026-04-22 13:53:49 openshift/operator-framework-operator-controller@6a000e1 Todd Short UPSTREAM: <carry>: Disable upstream TLSProfile tests
2026-04-22 13:53:49 openshift/operator-framework-operator-controller@7f79c27 Camila Macedo UPSTREAM: <carry>: OTE: Simplify by remove option to configure tests to run outside of OCP

This pull request is expected to merge without any human intervention. If tests are failing here, changes must land upstream to fix any issues so that future downstreaming efforts succeed.

/assign @openshift/openshift-team-operator-runtime

joelanford and others added 2 commits April 23, 2026 08:53
* e2e: add design spec for test isolation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* e2e: move bundle test builders to internal/testing/bundle/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* e2e: add catalog builder library and registry deployment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* e2e: convert all tests to per-scenario dynamic catalogs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* e2e: update extension-developer-e2e to use registry library

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* e2e: remove old static test infrastructure and clean up

* e2e: use port-forward instead of hostPort for registry access

Replace the localhost:30000 hostPort-based registry access with
Kubernetes port-forwarding. This makes the test runner work regardless
of the cluster network topology (not just kind with extraPortMappings).

- Remove port 30000 extraPortMappings from kind configs
- Add PortForward() to the registry package using SPDY
- Use port-forward in e2e steps and extension-developer-e2e
- Remove LOCAL_REGISTRY_HOST env var (no longer needed)
- Keep NodePort service for containerd on kind nodes (hosts.toml)

* e2e: bump experimental e2e timeout to 20m

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps [github.com/moby/spdystream](https://github.com/moby/spdystream) from 0.5.0 to 0.5.1.
- [Release notes](https://github.com/moby/spdystream/releases)
- [Commits](moby/spdystream@v0.5.0...v0.5.1)

---
updated-dependencies:
- dependency-name: github.com/moby/spdystream
  dependency-version: 0.5.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Apr 23, 2026
@openshift-ci-robot
Copy link
Copy Markdown

@openshift-bot: This pull request explicitly references no jira issue.

Details

In response to this:

The downstream repository has been updated with the following following upstream commits:

Date Commit Author Message
2026-04-23 10:46:42 operator-framework/operator-controller@a47a0b4 dependabot[bot] 🌱 Bump github.com/moby/spdystream from 0.5.0 to 0.5.1 (#2669)
2026-04-23 08:53:23 operator-framework/operator-controller@c0dc83f Joe Lanford ✨ e2e: isolate tests with per-scenario dynamic catalogs (#2651)

The vendor/ directory has been updated and the following commits were carried:

Date Commit Author Message
2026-04-22 13:53:04 openshift/operator-framework-operator-controller@73ac3fd dtfranz UPSTREAM: <carry>: Add OpenShift specific files
2026-04-22 13:53:05 openshift/operator-framework-operator-controller@7952255 Camila Macedo UPSTREAM: <carry>: Add new tests for single/own namespaces install modes
2026-04-22 13:53:06 openshift/operator-framework-operator-controller@be123ce Camila Macedo UPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
2026-04-22 13:53:07 openshift/operator-framework-operator-controller@dcafc41 Camila Macedo UPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp images from openshift/catalogd/manifests.yaml
2026-04-22 13:53:07 openshift/operator-framework-operator-controller@2a52f67 Todd Short UPSTREAM: <carry>: Update OCP catalogs to v4.21
2026-04-22 13:53:08 openshift/operator-framework-operator-controller@7446900 Kui Wang UPSTREAM: <carry>: support singleown cases in disconnected
2026-04-22 13:53:08 openshift/operator-framework-operator-controller@4bc8b8a Kui Wang UPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
2026-04-22 13:53:09 openshift/operator-framework-operator-controller@e6074c3 Camila Macedo UPSTREAM: <carry>: Define Default timeouts and apply their usage accross to avoid flakes
2026-04-22 13:53:09 openshift/operator-framework-operator-controller@66c65fc Todd Short UPSTREAM: <carry>: Update to new feature-gate options in helm
2026-04-22 13:53:10 openshift/operator-framework-operator-controller@c21263e Camila Macedo UPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniquess and waiting for k8s cleanups
2026-04-22 13:53:10 openshift/operator-framework-operator-controller@1f7b390 Camila Macedo UPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comments ( Follow-Up of: 714977c )
2026-04-22 13:53:11 openshift/operator-framework-operator-controller@d1798fb Kui Wang UPSTREAM: <carry>: Update OwnSingle template to use spec.config.inline.watchNamespace
2026-04-22 13:53:11 openshift/operator-framework-operator-controller@a5e2177 Camila Macedo UPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension uninstall
2026-04-22 13:53:12 openshift/operator-framework-operator-controller@1b437a5 Kui Wang UPSTREAM: <carry>: Add [OTP] to migrated cases
2026-04-22 13:53:13 openshift/operator-framework-operator-controller@7d59cca Camila Macedo UPSTREAM: <carry>: [OTE]: Upgrade dependencies used
2026-04-22 13:53:13 openshift/operator-framework-operator-controller@e6afa52 Camila Macedo UPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version format
2026-04-22 13:53:14 openshift/operator-framework-operator-controller@ca59600 Camila Macedo UPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and dependencies
2026-04-22 13:53:15 openshift/operator-framework-operator-controller@6295ce6 Kui Wang UPSTREAM: <carry>: add disconnected environment support with custom prow job for migrated qe cases
2026-04-22 13:53:16 openshift/operator-framework-operator-controller@39917f1 Jian Zhang UPSTREAM: <carry>: migrate jiazha test cases to OTE
2026-04-22 13:53:16 openshift/operator-framework-operator-controller@8c058eb Xia Zhao UPSTREAM: <carry>: migrate clustercatalog case to ote
2026-04-22 13:53:17 openshift/operator-framework-operator-controller@f151b4e Kui Wang UPSTREAM: <carry>: migrate olmv1 QE stress cases
2026-04-22 13:53:17 openshift/operator-framework-operator-controller@1dc3eda Todd Short UPSTREAM: <carry>: Use busybox/httpd to simulate probes
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@ac73f68 Xia Zhao UPSTREAM: <carry>: migrate olmv1 QE cases
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@b3ca065 Kui Wang UPSTREAM: <carry>: add agent for olmv1 qe cases
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@5ee9f5d Todd Short UPSTREAM: <carry>: Disable upstream PodDisruptionBudget
2026-04-22 13:53:19 openshift/operator-framework-operator-controller@746f5fe Rashmi Gottipati UPSTREAM: <carry>: Add AGENTS.md for AI code contributions
2026-04-22 13:53:19 openshift/operator-framework-operator-controller@77c6b38 Rashmi Gottipati UPSTREAM: <carry>: address review comments through addl prompts
2026-04-22 13:53:20 openshift/operator-framework-operator-controller@153e40c Rashmi Gottipati UPSTREAM: <carry>: addressing some more review comments
2026-04-22 13:53:20 openshift/operator-framework-operator-controller@6daa8bc Rashmi Gottipati UPSTREAM: <carry>: remove DCO line
2026-04-22 13:53:21 openshift/operator-framework-operator-controller@111e025 Bruno Andrade UPSTREAM: <carry>: migrate bandrade test cases to OTE
2026-04-22 13:53:21 openshift/operator-framework-operator-controller@f41805f Bruno Andrade UPSTREAM: <carry>: update metadata
2026-04-22 13:53:22 openshift/operator-framework-operator-controller@22d8b59 Bruno Andrade UPSTREAM: <carry>: remove originalName
2026-04-22 13:53:22 openshift/operator-framework-operator-controller@d522a24 Jian Zhang UPSTREAM: <carry>: update 80458's timeout to 180s
2026-04-22 13:53:23 openshift/operator-framework-operator-controller@0b3440e Jian Zhang UPSTREAM: <carry>: update 83026 to specify the clustercatalog
2026-04-22 13:53:23 openshift/operator-framework-operator-controller@34d14a4 Catherine Chan-Tse UPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
2026-04-22 13:53:24 openshift/operator-framework-operator-controller@9efec63 Predrag Knezevic UPSTREAM: <carry>: Use oc client for running e2e tests
2026-04-22 13:53:24 openshift/operator-framework-operator-controller@14e1a61 Predrag Knezevic UPSTREAM: <carry>: Run upstream e2e tests tagged with @catalogd-update
2026-04-22 13:53:25 openshift/operator-framework-operator-controller@7b9d84a Kui Wang UPSTREAM: <carry>: enhance case to make it more stable
2026-04-22 13:53:25 openshift/operator-framework-operator-controller@8101ae9 Evan Hearne UPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@fe22048 Evan Hearne UPSTREAM: <carry>: move sa creation out of buildCurlJob()
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@ba5a14c Evan Hearne UPSTREAM: <carry>: comment out delete service account
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@ee804bf Evan Hearne UPSTREAM: <carry>: move defercleanup for sa for LIFO
2026-04-22 13:53:27 openshift/operator-framework-operator-controller@41868ae Evan Hearne UPSTREAM: <carry>: add polling so job fully deleted before proceed
2026-04-22 13:53:27 openshift/operator-framework-operator-controller@5a6c36a Luke Meyer UPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redhat/add-service-account-curl-job"
2026-04-22 13:53:28 openshift/operator-framework-operator-controller@7b4c9f0 Camila Macedo UPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
2026-04-22 13:53:28 openshift/operator-framework-operator-controller@edea496 Kui Wang UPSTREAM: <carry>: config watchnamespace cases
2026-04-22 13:53:29 openshift/operator-framework-operator-controller@d262a58 Xia Zhao UPSTREAM: <carry>: enhance ocp-79770
2026-04-22 13:53:29 openshift/operator-framework-operator-controller@ef56866 Kui Wang UPSTREAM: <carry>: upgrade version support case
2026-04-22 13:53:30 openshift/operator-framework-operator-controller@3db44c7 Per Goncalves da Silva UPSTREAM: <carry>: Remove installed condition check from auth preflight test
2026-04-22 13:53:30 openshift/operator-framework-operator-controller@f67b8df Per Goncalves da Silva UPSTREAM: <carry>: Add openshift/api dependency
2026-04-22 13:53:31 openshift/operator-framework-operator-controller@b319bb1 Per Goncalves da Silva UPSTREAM: <carry>: Add boxcutter specific preflight auth test
2026-04-22 13:53:31 openshift/operator-framework-operator-controller@522cb2b Kui Wang UPSTREAM: <carry>: adjust watchnamespace case based on change
2026-04-22 13:53:32 openshift/operator-framework-operator-controller@29ef9da Camila Macedo UPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root dir
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@0fed203 Bruno Andrade UPSTREAM: <carry>: add 83979 automation
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@de588bd Bruno Andrade UPSTREAM: <carry>: add 85889 automation
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@0677d3c Per Goncalves da Silva UPSTREAM: <carry>: Update test-operator startup script to fix pod probe endpoints
2026-04-22 13:53:34 openshift/operator-framework-operator-controller@cffd47f Per Goncalves da Silva UPSTREAM: <carry>: Fix up own-namespace invalid configuration test
2026-04-22 13:53:34 openshift/operator-framework-operator-controller@780b3f5 Camila Macedo UPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles instead of openshift-pipelines-operator-rh
2026-04-22 13:53:35 openshift/operator-framework-operator-controller@1c96b44 Kui Wang UPSTREAM: <carry>: adjust sa and permission test cases per new change from boxcutterruntime
2026-04-22 13:53:35 openshift/operator-framework-operator-controller@e867918 Camila Macedo UPSTREAM: <carry>: Update OCP catalogs to v4.22
2026-04-22 13:53:36 openshift/operator-framework-operator-controller@0b80cf9 Camila Macedo UPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and dependencies
2026-04-22 13:53:37 openshift/operator-framework-operator-controller@b88351b Jian Zhang UPSTREAM: <carry>: fix 83026 for TP cluster
2026-04-22 13:53:38 openshift/operator-framework-operator-controller@d31e67c Kui Wang UPSTREAM: <carry>: serviceAccount validation unified across all runtimes
2026-04-22 13:53:38 openshift/operator-framework-operator-controller@9f3943f Stephen Benjamin UPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
2026-04-22 13:53:39 openshift/operator-framework-operator-controller@ac0012c Camila Macedo UPSTREAM: <carry>: Increase install timeout and add diagnostic logging for CE install tests
2026-04-22 13:53:39 openshift/operator-framework-operator-controller@2ae413f Evan Hearne UPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:40 openshift/operator-framework-operator-controller@8bf116d Jian Zhang UPSTREAM: <carry>: update OCP-75441 to support multi-arch
2026-04-22 13:53:40 openshift/operator-framework-operator-controller@478a5b0 Kui Wang UPSTREAM: <carry>: deployment config cases
2026-04-22 13:53:41 openshift/operator-framework-operator-controller@0eb1038 Todd Short UPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
2026-04-22 13:53:41 openshift/operator-framework-operator-controller@d591bed Todd Short UPSTREAM: <carry>: Update openshift/api and client-go
2026-04-22 13:53:42 openshift/operator-framework-operator-controller@5169a85 Camila Macedo UPSTREAM: <carry>: Add boxcutter tests
2026-04-22 13:53:42 openshift/operator-framework-operator-controller@af8e61d Xia Zhao UPSTREAM: <carry>: enhance QE cases
2026-04-22 13:53:43 openshift/operator-framework-operator-controller@8381ec3 Daniel Franz UPSTREAM: <carry>: Update quay-operator version to one containing arm64 support
2026-04-22 13:53:43 openshift/operator-framework-operator-controller@f1e8159 Kui Wang UPSTREAM: <carry>: verify volume/volumeMount override
2026-04-22 13:53:44 openshift/operator-framework-operator-controller@e7d74f6 Jian Zhang UPSTREAM: <carry>: Add long-duration test script and documents
2026-04-22 13:53:44 openshift/operator-framework-operator-controller@7d2cac3 Todd Short UPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
2026-04-22 13:53:45 openshift/operator-framework-operator-controller@6474a8c Camila Macedo UPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSet in OTE tests
2026-04-22 13:53:45 openshift/operator-framework-operator-controller@5f7a011 Camila Macedo UPSTREAM: <carry>: Skip incompatible operator test when Boxcutter uses ClusterObjectSet
2026-04-22 13:53:46 openshift/operator-framework-operator-controller@c5923fd Bruno Andrade UPSTREAM: <carry>: add ocp-87557
2026-04-22 13:53:46 openshift/operator-framework-operator-controller@ecaf2f9 Francesco Giudici UPSTREAM: <carry>: Add fgiudici as reviewer
2026-04-22 13:53:47 openshift/operator-framework-operator-controller@c07855d Camila Macedo UPSTREAM: <carry>: Remove skip for incompatible operator check after rename of CER
2026-04-22 13:53:47 openshift/operator-framework-operator-controller@11baf82 Kui Wang UPSTREAM: <carry>: Test empty affinity erasure and cleanup
2026-04-22 13:53:48 openshift/operator-framework-operator-controller@43598ec Camila Macedo UPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in preflight test
2026-04-22 13:53:48 openshift/operator-framework-operator-controller@19eca43 Camila Macedo UPSTREAM: <carry>: Expand OTE docs with more comprehensive details
2026-04-22 13:53:49 openshift/operator-framework-operator-controller@6a000e1 Todd Short UPSTREAM: <carry>: Disable upstream TLSProfile tests
2026-04-22 13:53:49 openshift/operator-framework-operator-controller@7f79c27 Camila Macedo UPSTREAM: <carry>: OTE: Simplify by remove option to configure tests to run outside of OCP

This pull request is expected to merge without any human intervention. If tests are failing here, changes must land upstream to fix any issues so that future downstreaming efforts succeed.

/cc @openshift/openshift-team-operator-framework

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 23, 2026

@openshift-bot: GitHub didn't allow me to request PR reviews from the following users: openshift/openshift-team-operator-framework.

Note that only openshift members and repo collaborators can review this PR, and authors cannot review their own PRs.

Details

In response to this:

The downstream repository has been updated with the following following upstream commits:

Date Commit Author Message
2026-04-23 10:46:42 operator-framework/operator-controller@a47a0b4 dependabot[bot] 🌱 Bump github.com/moby/spdystream from 0.5.0 to 0.5.1 (#2669)
2026-04-23 08:53:23 operator-framework/operator-controller@c0dc83f Joe Lanford ✨ e2e: isolate tests with per-scenario dynamic catalogs (#2651)

The vendor/ directory has been updated and the following commits were carried:

Date Commit Author Message
2026-04-22 13:53:04 openshift/operator-framework-operator-controller@73ac3fd dtfranz UPSTREAM: <carry>: Add OpenShift specific files
2026-04-22 13:53:05 openshift/operator-framework-operator-controller@7952255 Camila Macedo UPSTREAM: <carry>: Add new tests for single/own namespaces install modes
2026-04-22 13:53:06 openshift/operator-framework-operator-controller@be123ce Camila Macedo UPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
2026-04-22 13:53:07 openshift/operator-framework-operator-controller@dcafc41 Camila Macedo UPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp images from openshift/catalogd/manifests.yaml
2026-04-22 13:53:07 openshift/operator-framework-operator-controller@2a52f67 Todd Short UPSTREAM: <carry>: Update OCP catalogs to v4.21
2026-04-22 13:53:08 openshift/operator-framework-operator-controller@7446900 Kui Wang UPSTREAM: <carry>: support singleown cases in disconnected
2026-04-22 13:53:08 openshift/operator-framework-operator-controller@4bc8b8a Kui Wang UPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
2026-04-22 13:53:09 openshift/operator-framework-operator-controller@e6074c3 Camila Macedo UPSTREAM: <carry>: Define Default timeouts and apply their usage accross to avoid flakes
2026-04-22 13:53:09 openshift/operator-framework-operator-controller@66c65fc Todd Short UPSTREAM: <carry>: Update to new feature-gate options in helm
2026-04-22 13:53:10 openshift/operator-framework-operator-controller@c21263e Camila Macedo UPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniquess and waiting for k8s cleanups
2026-04-22 13:53:10 openshift/operator-framework-operator-controller@1f7b390 Camila Macedo UPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comments ( Follow-Up of: 714977c )
2026-04-22 13:53:11 openshift/operator-framework-operator-controller@d1798fb Kui Wang UPSTREAM: <carry>: Update OwnSingle template to use spec.config.inline.watchNamespace
2026-04-22 13:53:11 openshift/operator-framework-operator-controller@a5e2177 Camila Macedo UPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension uninstall
2026-04-22 13:53:12 openshift/operator-framework-operator-controller@1b437a5 Kui Wang UPSTREAM: <carry>: Add [OTP] to migrated cases
2026-04-22 13:53:13 openshift/operator-framework-operator-controller@7d59cca Camila Macedo UPSTREAM: <carry>: [OTE]: Upgrade dependencies used
2026-04-22 13:53:13 openshift/operator-framework-operator-controller@e6afa52 Camila Macedo UPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version format
2026-04-22 13:53:14 openshift/operator-framework-operator-controller@ca59600 Camila Macedo UPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and dependencies
2026-04-22 13:53:15 openshift/operator-framework-operator-controller@6295ce6 Kui Wang UPSTREAM: <carry>: add disconnected environment support with custom prow job for migrated qe cases
2026-04-22 13:53:16 openshift/operator-framework-operator-controller@39917f1 Jian Zhang UPSTREAM: <carry>: migrate jiazha test cases to OTE
2026-04-22 13:53:16 openshift/operator-framework-operator-controller@8c058eb Xia Zhao UPSTREAM: <carry>: migrate clustercatalog case to ote
2026-04-22 13:53:17 openshift/operator-framework-operator-controller@f151b4e Kui Wang UPSTREAM: <carry>: migrate olmv1 QE stress cases
2026-04-22 13:53:17 openshift/operator-framework-operator-controller@1dc3eda Todd Short UPSTREAM: <carry>: Use busybox/httpd to simulate probes
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@ac73f68 Xia Zhao UPSTREAM: <carry>: migrate olmv1 QE cases
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@b3ca065 Kui Wang UPSTREAM: <carry>: add agent for olmv1 qe cases
2026-04-22 13:53:18 openshift/operator-framework-operator-controller@5ee9f5d Todd Short UPSTREAM: <carry>: Disable upstream PodDisruptionBudget
2026-04-22 13:53:19 openshift/operator-framework-operator-controller@746f5fe Rashmi Gottipati UPSTREAM: <carry>: Add AGENTS.md for AI code contributions
2026-04-22 13:53:19 openshift/operator-framework-operator-controller@77c6b38 Rashmi Gottipati UPSTREAM: <carry>: address review comments through addl prompts
2026-04-22 13:53:20 openshift/operator-framework-operator-controller@153e40c Rashmi Gottipati UPSTREAM: <carry>: addressing some more review comments
2026-04-22 13:53:20 openshift/operator-framework-operator-controller@6daa8bc Rashmi Gottipati UPSTREAM: <carry>: remove DCO line
2026-04-22 13:53:21 openshift/operator-framework-operator-controller@111e025 Bruno Andrade UPSTREAM: <carry>: migrate bandrade test cases to OTE
2026-04-22 13:53:21 openshift/operator-framework-operator-controller@f41805f Bruno Andrade UPSTREAM: <carry>: update metadata
2026-04-22 13:53:22 openshift/operator-framework-operator-controller@22d8b59 Bruno Andrade UPSTREAM: <carry>: remove originalName
2026-04-22 13:53:22 openshift/operator-framework-operator-controller@d522a24 Jian Zhang UPSTREAM: <carry>: update 80458's timeout to 180s
2026-04-22 13:53:23 openshift/operator-framework-operator-controller@0b3440e Jian Zhang UPSTREAM: <carry>: update 83026 to specify the clustercatalog
2026-04-22 13:53:23 openshift/operator-framework-operator-controller@34d14a4 Catherine Chan-Tse UPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
2026-04-22 13:53:24 openshift/operator-framework-operator-controller@9efec63 Predrag Knezevic UPSTREAM: <carry>: Use oc client for running e2e tests
2026-04-22 13:53:24 openshift/operator-framework-operator-controller@14e1a61 Predrag Knezevic UPSTREAM: <carry>: Run upstream e2e tests tagged with @catalogd-update
2026-04-22 13:53:25 openshift/operator-framework-operator-controller@7b9d84a Kui Wang UPSTREAM: <carry>: enhance case to make it more stable
2026-04-22 13:53:25 openshift/operator-framework-operator-controller@8101ae9 Evan Hearne UPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@fe22048 Evan Hearne UPSTREAM: <carry>: move sa creation out of buildCurlJob()
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@ba5a14c Evan Hearne UPSTREAM: <carry>: comment out delete service account
2026-04-22 13:53:26 openshift/operator-framework-operator-controller@ee804bf Evan Hearne UPSTREAM: <carry>: move defercleanup for sa for LIFO
2026-04-22 13:53:27 openshift/operator-framework-operator-controller@41868ae Evan Hearne UPSTREAM: <carry>: add polling so job fully deleted before proceed
2026-04-22 13:53:27 openshift/operator-framework-operator-controller@5a6c36a Luke Meyer UPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redhat/add-service-account-curl-job"
2026-04-22 13:53:28 openshift/operator-framework-operator-controller@7b4c9f0 Camila Macedo UPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
2026-04-22 13:53:28 openshift/operator-framework-operator-controller@edea496 Kui Wang UPSTREAM: <carry>: config watchnamespace cases
2026-04-22 13:53:29 openshift/operator-framework-operator-controller@d262a58 Xia Zhao UPSTREAM: <carry>: enhance ocp-79770
2026-04-22 13:53:29 openshift/operator-framework-operator-controller@ef56866 Kui Wang UPSTREAM: <carry>: upgrade version support case
2026-04-22 13:53:30 openshift/operator-framework-operator-controller@3db44c7 Per Goncalves da Silva UPSTREAM: <carry>: Remove installed condition check from auth preflight test
2026-04-22 13:53:30 openshift/operator-framework-operator-controller@f67b8df Per Goncalves da Silva UPSTREAM: <carry>: Add openshift/api dependency
2026-04-22 13:53:31 openshift/operator-framework-operator-controller@b319bb1 Per Goncalves da Silva UPSTREAM: <carry>: Add boxcutter specific preflight auth test
2026-04-22 13:53:31 openshift/operator-framework-operator-controller@522cb2b Kui Wang UPSTREAM: <carry>: adjust watchnamespace case based on change
2026-04-22 13:53:32 openshift/operator-framework-operator-controller@29ef9da Camila Macedo UPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root dir
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@0fed203 Bruno Andrade UPSTREAM: <carry>: add 83979 automation
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@de588bd Bruno Andrade UPSTREAM: <carry>: add 85889 automation
2026-04-22 13:53:33 openshift/operator-framework-operator-controller@0677d3c Per Goncalves da Silva UPSTREAM: <carry>: Update test-operator startup script to fix pod probe endpoints
2026-04-22 13:53:34 openshift/operator-framework-operator-controller@cffd47f Per Goncalves da Silva UPSTREAM: <carry>: Fix up own-namespace invalid configuration test
2026-04-22 13:53:34 openshift/operator-framework-operator-controller@780b3f5 Camila Macedo UPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles instead of openshift-pipelines-operator-rh
2026-04-22 13:53:35 openshift/operator-framework-operator-controller@1c96b44 Kui Wang UPSTREAM: <carry>: adjust sa and permission test cases per new change from boxcutterruntime
2026-04-22 13:53:35 openshift/operator-framework-operator-controller@e867918 Camila Macedo UPSTREAM: <carry>: Update OCP catalogs to v4.22
2026-04-22 13:53:36 openshift/operator-framework-operator-controller@0b80cf9 Camila Macedo UPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and dependencies
2026-04-22 13:53:37 openshift/operator-framework-operator-controller@b88351b Jian Zhang UPSTREAM: <carry>: fix 83026 for TP cluster
2026-04-22 13:53:38 openshift/operator-framework-operator-controller@d31e67c Kui Wang UPSTREAM: <carry>: serviceAccount validation unified across all runtimes
2026-04-22 13:53:38 openshift/operator-framework-operator-controller@9f3943f Stephen Benjamin UPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
2026-04-22 13:53:39 openshift/operator-framework-operator-controller@ac0012c Camila Macedo UPSTREAM: <carry>: Increase install timeout and add diagnostic logging for CE install tests
2026-04-22 13:53:39 openshift/operator-framework-operator-controller@2ae413f Evan Hearne UPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:40 openshift/operator-framework-operator-controller@8bf116d Jian Zhang UPSTREAM: <carry>: update OCP-75441 to support multi-arch
2026-04-22 13:53:40 openshift/operator-framework-operator-controller@478a5b0 Kui Wang UPSTREAM: <carry>: deployment config cases
2026-04-22 13:53:41 openshift/operator-framework-operator-controller@0eb1038 Todd Short UPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
2026-04-22 13:53:41 openshift/operator-framework-operator-controller@d591bed Todd Short UPSTREAM: <carry>: Update openshift/api and client-go
2026-04-22 13:53:42 openshift/operator-framework-operator-controller@5169a85 Camila Macedo UPSTREAM: <carry>: Add boxcutter tests
2026-04-22 13:53:42 openshift/operator-framework-operator-controller@af8e61d Xia Zhao UPSTREAM: <carry>: enhance QE cases
2026-04-22 13:53:43 openshift/operator-framework-operator-controller@8381ec3 Daniel Franz UPSTREAM: <carry>: Update quay-operator version to one containing arm64 support
2026-04-22 13:53:43 openshift/operator-framework-operator-controller@f1e8159 Kui Wang UPSTREAM: <carry>: verify volume/volumeMount override
2026-04-22 13:53:44 openshift/operator-framework-operator-controller@e7d74f6 Jian Zhang UPSTREAM: <carry>: Add long-duration test script and documents
2026-04-22 13:53:44 openshift/operator-framework-operator-controller@7d2cac3 Todd Short UPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
2026-04-22 13:53:45 openshift/operator-framework-operator-controller@6474a8c Camila Macedo UPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSet in OTE tests
2026-04-22 13:53:45 openshift/operator-framework-operator-controller@5f7a011 Camila Macedo UPSTREAM: <carry>: Skip incompatible operator test when Boxcutter uses ClusterObjectSet
2026-04-22 13:53:46 openshift/operator-framework-operator-controller@c5923fd Bruno Andrade UPSTREAM: <carry>: add ocp-87557
2026-04-22 13:53:46 openshift/operator-framework-operator-controller@ecaf2f9 Francesco Giudici UPSTREAM: <carry>: Add fgiudici as reviewer
2026-04-22 13:53:47 openshift/operator-framework-operator-controller@c07855d Camila Macedo UPSTREAM: <carry>: Remove skip for incompatible operator check after rename of CER
2026-04-22 13:53:47 openshift/operator-framework-operator-controller@11baf82 Kui Wang UPSTREAM: <carry>: Test empty affinity erasure and cleanup
2026-04-22 13:53:48 openshift/operator-framework-operator-controller@43598ec Camila Macedo UPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in preflight test
2026-04-22 13:53:48 openshift/operator-framework-operator-controller@19eca43 Camila Macedo UPSTREAM: <carry>: Expand OTE docs with more comprehensive details
2026-04-22 13:53:49 openshift/operator-framework-operator-controller@6a000e1 Todd Short UPSTREAM: <carry>: Disable upstream TLSProfile tests
2026-04-22 13:53:49 openshift/operator-framework-operator-controller@7f79c27 Camila Macedo UPSTREAM: <carry>: OTE: Simplify by remove option to configure tests to run outside of OCP

This pull request is expected to merge without any human intervention. If tests are failing here, changes must land upstream to fix any issues so that future downstreaming efforts succeed.

/cc @openshift/openshift-team-operator-framework

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@openshift-bot openshift-bot added tide/merge-method-merge Denotes a PR that should use a standard merge by tide when it merges. kind/sync approved Indicates a PR has been approved by an approver from all required OWNERS files. lgtm Indicates that a PR is ready to be merged. labels Apr 23, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 23, 2026

Walkthrough

This PR replaces static test catalogs/bundles with runtime, per-scenario bundle and FBC catalog builders, adds in-cluster registry deployment and port-forward helpers, parameterizes scenario resources (SCENARIO_ID, PACKAGE:*, CATALOG:*), rewrites e2e step logic for scenario isolation, and migrates/renames internal test builders and helpers.

Changes

Cohort / File(s) Summary
Makefile & extension e2e
Makefile, test/extension-developer-e2e/setup.sh, test/extension-developer-e2e/extension_developer_test.go
Add GODOG_ARGS, set CLUSTER_REGISTRY_HOST, remove exported E2E registry/catalog vars, delete image-registry target, simplify extension flow (export OPERATOR_SDK/CONTAINER_RUNTIME), extend unit test dirs, move push logic into Go harness.
Kind / containerd config
kind-config/*.yaml, hack/kind-config/containerd/certs.d/*
Remove NodePort registry exposure, host cert mounts, containerd CRI registry patches, and related hosts.toml entry; delete nested go.mod stub.
Registry runtime helpers
test/internal/registry/registry.go
Add in-cluster registry Deploy and SPDY PortForward helpers (deploy TLS-backed registry, create Service, port-forward returning localhost:port and stop func).
Catalog & bundle builders
test/internal/catalog/catalog.go, test/internal/catalog/catalog_test.go, test/internal/catalog/bundle.go
Add per-scenario Catalog builder API (NewCatalog/Build, Package/Channel/Entry DSL) and bundle generator (BundleOption set, static/parameterized bundle construction, image push integration) plus tests.
E2E step/core plumbing
test/e2e/steps/steps.go, test/e2e/steps/hooks.go, test/e2e/steps/upgrade_steps.go
Refactor steps to be scenario-aware: registry deploy/port-forward orchestration, catalog table parsing, per-scenario build/tag/push flows, expanded variable substitution (SCENARIO_ID, PACKAGE:*, CATALOG:*), concurrent cleanup, and scenario-scoped reconciliation helpers.
Proxy support & tests
internal/shared/util/http/httputil.go, internal/shared/util/http/httputil_test.go, test/e2e/features/proxy.feature, test/e2e/steps/proxy_steps.go
Ensure HTTP transport uses ProxyFromEnvironment; add proxy-aware unit tests; add e2e proxy feature and step helpers to start/record CONNECT proxy and patch deployments to use HTTPS_PROXY/NO_PROXY.
Test builder rename/migration
internal/testing/bundle/csv/*, internal/testing/bundle/fs/*, many internal/.../*_test.go files
Rename/relocate builders (clusterserviceversioncsv, bundlefsfs) and update imports/usage across multiple internal tests.
Feature files & templates
test/e2e/features/*, test/upgrade-e2e/features/*, test/e2e/README.md, test/e2e/steps/testdata/*
Replace ClusterCatalog shorthand with explicit catalog "name" backed by registry, parameterize package/catalog selectors, adopt ${SCENARIO_ID}-scoped resource names, update README variable docs, remove static ClusterCatalog templates.
Testdata and push tooling removal
testdata/images/..., testdata/push/*, testdata/Dockerfile, testdata/build-test-registry.sh, testdata/push/push.go
Remove pre-built bundle/catalog artifacts and push tool implementation; replace push script/CLI with no-op stubs; runtime builders replace static assets.
Helpers removed / responsibilities migrated
test/helpers/helpers.go, test/helpers/feature_gates.go
Delete legacy test helpers (shared client, TestInit/TestCleanup, feature-gate detection); responsibilities migrated into scenario steps and new internal libs.
Tests added/updated
test/internal/catalog/*, many updated unit/integration tests
Add comprehensive bundle/catalog generation tests and update many tests to use the new builders and fs packages.
Dependencies
go.mod, openshift/tests-extension/go.mod, requirements.txt
Bump golang.org/x/* modules, add indirect deps (creack/pty, gorilla/websocket, moby/spdystream, mxk/go-flowrate), bump moby/spdystream in openshift module, update Python platformdirs pin.
Miscellaneous small edits
test/e2e/steps/tls_steps.go, numerous test files
Small API/struct field updates for deployment restore tracking and various import/usage adjustments across tests.

Sequence Diagram(s)

sequenceDiagram
    participant Test as E2E Test
    participant Registry as In-Cluster Registry
    participant Catalog as Catalog Builder
    participant Cluster as Kubernetes Cluster

    Test->>Registry: Deploy registry + certs (Deploy)
    Registry-->>Test: Ready
    Test->>Registry: Port-forward (PortForward) -> localhost:port
    Test->>Catalog: Build bundle (parameterized by scenario)
    Catalog->>Registry: Push bundle (crane -> localhost:port)
    Test->>Catalog: Build catalog image (FBC)
    Catalog->>Registry: Push catalog image
    Test->>Cluster: Create ClusterCatalog referencing catalog image
    Cluster->>Registry: Pull catalog image (Service DNS)
    Test->>Cluster: Create ClusterExtension selecting package
    Cluster->>Registry: Pull bundle image
    Test->>Cluster: Run assertions
    Test->>Cluster: Delete ClusterCatalog/ClusterExtension (cleanup)
Loading
sequenceDiagram
    participant Test as E2E Test (Previous)
    participant Testdata as Pre-built Testdata
    participant Cluster as Kubernetes Cluster

    Test->>Testdata: Use static bundles/catalogs
    Test->>Cluster: Apply static ClusterCatalog (hardcoded refs)
    Cluster->>Cluster: Serve bundles from static catalog
    Test->>Cluster: Create ClusterExtension (packageName: test)
    Test->>Cluster: Run assertions (shared names)
    Test->>Cluster: Cleanup (fixed names)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 3 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Ote Binary Stdout Contract ❌ Error Pull request violates OTE Binary Stdout Contract by directing test output to stdout in two locations instead of stderr. Redirect GoDoG output and setup.sh output to stderr or buffer; verify all logging writes to stderr not stdout.
Docstring Coverage ⚠️ Warning Docstring coverage is 52.31% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Microshift Test Compatibility ⚠️ Warning The PR introduces a Gherkin e2e test file using OLM v1 resources (ClusterExtension, ClusterCatalog) that are not available on MicroShift, with no compatibility protections or skip labels. Add [Skipped:MicroShift] label, [apigroup:olm.operatorframework.io] tag, or refactor tests to not require OLM v1 resources.
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning New proxy tests contain hardcoded IPv4 assumptions that will fail in IPv6-only disconnected CI environments. Modify kindGatewayIP() to support IPv6 fallback, use dynamic proxy URL generation in proxy.feature, and add [Skipped:Disconnected] tags.
Test Structure And Quality ❓ Inconclusive Pull request summary describes new test files but actual implementation files are not accessible in sandbox for quality assessment. Provide access to httputil_test.go, catalog_test.go, proxy_steps.go and proxy.feature files to verify Ginkgo test quality requirements including single responsibility, proper setup/cleanup, timeouts, and assertions.
✅ Passed checks (7 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'NO-ISSUE: Synchronize From Upstream Repositories' accurately describes the primary change: a synchronization pull request that merges upstream commits into the downstream repository.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed All test names in this PR are stable and deterministic. Gherkin Scenario titles use static descriptive strings, Go test function names are static, and dynamic values appear only within test implementations, not test titles.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The new e2e tests for HTTPS proxy support and unit tests do not make assumptions about multi-node or HA cluster configurations and have no SNO-incompatible scheduling or failover requirements.
Topology-Aware Scheduling Compatibility ✅ Passed PR creates only a single-replica test registry deployment with no scheduling constraints like affinity rules, nodeSelectors, topology spread constraints, or PodDisruptionBudgets. No operator-level scheduling assumes standard HA topology.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (6)
test/e2e/steps/hooks.go (1)

225-239: Consider bounding cleanup concurrency.

Spawning one goroutine per resource can burst kubectl process/API concurrency in larger scenarios. A small semaphore keeps cleanup parallel but more predictable.

Suggested refactor
+ const maxConcurrentDeletes = 8
+ sem := make(chan struct{}, maxConcurrentDeletes)
  var wg sync.WaitGroup
  for _, r := range forDeletion {
    wg.Add(1)
    go func(res resource) {
      defer wg.Done()
+     sem <- struct{}{}
+     defer func() { <-sem }()
      args := []string{"delete", res.kind, res.name, "--ignore-not-found=true"}
      if res.namespace != "" {
        args = append(args, "-n", res.namespace)
      }
      if _, err := k8sClient(args...); err != nil {
        logger.Info("Error deleting resource", "name", res.name, "namespace", res.namespace, "stderr", stderrOutput(err))
      }
    }(r)
  }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/steps/hooks.go` around lines 225 - 239, The cleanup spawns an
unbounded goroutine per resource (loop over forDeletion) which can flood
kubectl; add a small concurrency limit (e.g., a buffered semaphore channel size
5) and acquire it before starting each goroutine and release it when the
goroutine finishes so k8sClient calls are bounded; keep using the existing wg
sync.WaitGroup to wait for completion and continue to log errors via logger.Info
and stderrOutput(err) inside the goroutine (reference symbols: forDeletion,
k8sClient, stderrOutput, logger, wg, resource).
test/e2e/README.md (1)

295-297: Clarify ClusterObjectSet cleanup as conditional.

ScenarioCleanup only enqueues ClusterObjectSet deletion when the BoxcutterRuntime gate is enabled, so documenting this condition would be more precise.

Suggested wording tweak
-- Deletes ClusterExtensions and ClusterObjectSets
+- Deletes ClusterExtensions and (when present) ClusterObjectSets
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/README.md` around lines 295 - 297, Update the README list item about
ClusterObjectSet cleanup to clarify it is conditional: mention that
ScenarioCleanup enqueues ClusterObjectSet deletion only when the
BoxcutterRuntime gate is enabled (reference ScenarioCleanup and
BoxcutterRuntime), so change the wording from the current unconditional "Deletes
ClusterObjectSets" to something like "Deletes ClusterObjectSets (only when
BoxcutterRuntime gate is enabled)" or equivalent.
test/internal/catalog/catalog_test.go (1)

137-144: Channel ordering relies on insertion order.

The test assumes alpha is at index 0 and beta at index 1. This works because channels are defined in that order in WithPackage(...), but the test would break if channel ordering changes.

Consider making the test more robust by searching for channels by name rather than relying on index position:

// Find channel by name instead of assuming order
var alpha, beta *channel
for i := range pkg.channels {
    switch pkg.channels[i].name {
    case "alpha":
        alpha = &pkg.channels[i]
    case "beta":
        beta = &pkg.channels[i]
    }
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/catalog/catalog_test.go` around lines 137 - 144, The test
relies on slice order when accessing pkg.channels[0]/[1]; instead iterate
pkg.channels to locate channels by their name ("alpha" and "beta") and assign
them to local variables (e.g., alpha, beta) before asserting their properties;
update the assertions in the test to check that the found channel pointers are
non-nil and that len(alpha.entries) and len(beta.entries) match expected counts,
using the existing pkg.channels, alpha, and beta identifiers to locate and
validate channels rather than fixed indices.
test/extension-developer-e2e/setup.sh (1)

91-95: Minor: Excessive blank lines.

There are multiple consecutive blank lines between the push comment and the FBC section header.

Suggested cleanup
-# Push is handled by the Go test via crane + port-forward,
-# because docker push goes through the Docker daemon which
-# may be in a different network context (e.g. colima VM).
-
-
+# Push is handled by the Go test via crane + port-forward,
+# because docker push goes through the Docker daemon which
+# may be in a different network context (e.g. colima VM).
+
 ###############################
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/extension-developer-e2e/setup.sh` around lines 91 - 95, There are
multiple consecutive blank lines after the push comment block; remove the extra
blank lines so there is only a single blank line separating that comment ("Push
is handled by the Go test via crane + port-forward...") and the following FBC
section header to keep the script tidy and readable.
test/e2e/steps/steps.go (1)

230-244: projectRootDir panics if go.mod is not found.

While this is acceptable for test code since it indicates a fundamental setup problem, consider whether a more graceful error return would be appropriate for debugging CI issues.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/steps/steps.go` around lines 230 - 244, projectRootDir currently
panics when no go.mod is found; change it to return (string, error) so callers
can handle failures gracefully: update function signature projectRootDir() to
projectRootDir() (string, error), replace the panic("could not find project root
(no go.mod found)") with returning "", fmt.Errorf("could not find project root:
no go.mod found"), and update all callers in this file (and tests) to handle the
error (log/fail the test or t.Fatal in test contexts) instead of relying on a
panic.
docs/designs/testing/2026-04-13-e2e-isolation/design.md (1)

15-24: Add language specifier to fenced code block.

The ASCII flow diagram code block is missing a language identifier. While this doesn't affect functionality, adding text or leaving it explicit improves markdown linting compliance.

📝 Suggested fix
-```
+```text
 Scenario starts
   -> Generate parameterized bundle manifests (CRD names, deployments, etc. include scenario ID)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/designs/testing/2026-04-13-e2e-isolation/design.md` around lines 15 -
24, Add a language specifier to the fenced code block containing the ASCII flow
diagram that begins with "Scenario starts" so markdown linters recognize it as
plain text; edit the triple-backtick fence that wraps the flow (the block
listing steps like "Generate parameterized bundle manifests..." and "Create
ClusterCatalog...") to use ```text (or another explicit identifier) instead of
an untyped ``` fence.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/e2e/steps/steps.go`:
- Around line 1682-1688: The parsing branch that handles strings.HasPrefix(part,
"LargeCRD(") currently calls strconv.Atoi on countStr and ignores errors; change
this to surface parse failures instead of silently skipping: after extracting
countStr, check err from strconv.Atoi and on error return or propagate a
descriptive error (including the offending part and countStr) from the parsing
function, or at minimum log the failure before continuing; ensure the code still
calls catalog.WithLargeCRD(count) only when Atoi succeeds so that opts is not
silently incomplete.

In `@test/internal/catalog/catalog.go`:
- Around line 157-160: The inner variable `tag` inside the loop shadows the
`tag` parameter of the Build function; rename the inner variable (for example to
`bundleTag` or `pushTag`) in the fmt.Sprintf assignment and in the subsequent
error message/usage so the code uses a distinct identifier (e.g., replace `tag
:= fmt.Sprintf(...)` with `bundleTag := fmt.Sprintf(...)` and update the
`crane.Push` call and the fmt.Errorf to reference `bundleTag`) to avoid
shadowing and potential confusion in Build.

---

Nitpick comments:
In `@docs/designs/testing/2026-04-13-e2e-isolation/design.md`:
- Around line 15-24: Add a language specifier to the fenced code block
containing the ASCII flow diagram that begins with "Scenario starts" so markdown
linters recognize it as plain text; edit the triple-backtick fence that wraps
the flow (the block listing steps like "Generate parameterized bundle
manifests..." and "Create ClusterCatalog...") to use ```text (or another
explicit identifier) instead of an untyped ``` fence.

In `@test/e2e/README.md`:
- Around line 295-297: Update the README list item about ClusterObjectSet
cleanup to clarify it is conditional: mention that ScenarioCleanup enqueues
ClusterObjectSet deletion only when the BoxcutterRuntime gate is enabled
(reference ScenarioCleanup and BoxcutterRuntime), so change the wording from the
current unconditional "Deletes ClusterObjectSets" to something like "Deletes
ClusterObjectSets (only when BoxcutterRuntime gate is enabled)" or equivalent.

In `@test/e2e/steps/hooks.go`:
- Around line 225-239: The cleanup spawns an unbounded goroutine per resource
(loop over forDeletion) which can flood kubectl; add a small concurrency limit
(e.g., a buffered semaphore channel size 5) and acquire it before starting each
goroutine and release it when the goroutine finishes so k8sClient calls are
bounded; keep using the existing wg sync.WaitGroup to wait for completion and
continue to log errors via logger.Info and stderrOutput(err) inside the
goroutine (reference symbols: forDeletion, k8sClient, stderrOutput, logger, wg,
resource).

In `@test/e2e/steps/steps.go`:
- Around line 230-244: projectRootDir currently panics when no go.mod is found;
change it to return (string, error) so callers can handle failures gracefully:
update function signature projectRootDir() to projectRootDir() (string, error),
replace the panic("could not find project root (no go.mod found)") with
returning "", fmt.Errorf("could not find project root: no go.mod found"), and
update all callers in this file (and tests) to handle the error (log/fail the
test or t.Fatal in test contexts) instead of relying on a panic.

In `@test/extension-developer-e2e/setup.sh`:
- Around line 91-95: There are multiple consecutive blank lines after the push
comment block; remove the extra blank lines so there is only a single blank line
separating that comment ("Push is handled by the Go test via crane +
port-forward...") and the following FBC section header to keep the script tidy
and readable.

In `@test/internal/catalog/catalog_test.go`:
- Around line 137-144: The test relies on slice order when accessing
pkg.channels[0]/[1]; instead iterate pkg.channels to locate channels by their
name ("alpha" and "beta") and assign them to local variables (e.g., alpha, beta)
before asserting their properties; update the assertions in the test to check
that the found channel pointers are non-nil and that len(alpha.entries) and
len(beta.entries) match expected counts, using the existing pkg.channels, alpha,
and beta identifiers to locate and validate channels rather than fixed indices.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 826ca925-b967-41ea-9da3-e970d83aa992

📥 Commits

Reviewing files that changed from the base of the PR and between 9b9eb03 and c53874e.

⛔ Files ignored due to path filters (217)
  • go.sum is excluded by !**/*.sum
  • openshift/tests-extension/go.sum is excluded by !**/*.sum
  • openshift/tests-extension/vendor/github.com/moby/spdystream/NOTICE is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/connection.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/LICENSE is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/PATENTS is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/dictionary.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/options.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/read.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/types.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/write.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/modules.txt is excluded by !**/vendor/**
  • testdata/push/go.sum is excluded by !**/*.sum
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/build.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/estargz.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/gzip.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/testutil.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/types.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/AUTHORS is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/NOTICE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/credentials.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/file_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/native_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/types/authconfig.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/distribution/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/distribution/registry/client/auth/challenge/authchallenge.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/client/client.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/client/command.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/error.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/version.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/and/and_closer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/compression/compression.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/estargz/estargz.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/gzip/zip.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/redact/redact.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/retry/retry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/retry/wait/kubernetes_apimachinery_wait.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/verify/verify.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/windows/windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/zstd/zstd.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/anon.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/auth.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/basic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/bearer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/compression/compression.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/append.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/catalog.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/copy.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/delete.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/digest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/export.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/filemap.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/get.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/list.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/manifest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/pull.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/push.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/tag.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/logs/logs.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/check.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/digest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/errors.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/ref.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/registry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/repository.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/tag.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/hash.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/blob.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/gc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/layoutpath.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/read.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/manifest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/match/match.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/rebase.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/compressed.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/uncompressed.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/with.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/platform.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/progress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/catalog.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/check.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/delete.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/descriptor.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/list.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/mount.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/multi_write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/progress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/puller.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/schema1.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/error.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/logger.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/ping.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/retry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/schemer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/scope.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/transport.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/useragent.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/stream/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/stream/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/types/types.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/zz_deepcopy_generated.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.gitattributes is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.gitignore is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.goreleaser.yml is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/SECURITY.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/compressible.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bytereader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/compress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/decompress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/fse.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/gen.sh is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/.gitignore is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/compress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_generic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/huff0.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/decode.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/decode_other.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/encode.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/snappy.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/s2sx.mod is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/s2sx.sum is excluded by !**/*.sum, !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/blockdec.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/blockenc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/blocktype_string.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bytebuf.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bytereader.go is excluded by !**/vendor/**
📒 Files selected for processing (83)
  • Makefile
  • docs/designs/testing/2026-04-13-e2e-isolation/design.md
  • go.mod
  • hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml
  • hack/kind-config/containerd/certs.d/go.mod
  • internal/operator-controller/applier/boxcutter_test.go
  • internal/operator-controller/applier/provider_test.go
  • internal/operator-controller/config/config_test.go
  • internal/operator-controller/config/error_formatting_test.go
  • internal/operator-controller/rukpak/bundle/source/source_test.go
  • internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go
  • internal/operator-controller/rukpak/render/registryv1/registryv1_test.go
  • internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go
  • internal/operator-controller/rukpak/render/render_test.go
  • internal/testing/bundle/csv/builder.go
  • internal/testing/bundle/csv/builder_test.go
  • internal/testing/bundle/fs/bundlefs.go
  • internal/testing/bundle/fs/bundlefs_test.go
  • kind-config/kind-config-2node.yaml
  • kind-config/kind-config.yaml
  • openshift/tests-extension/go.mod
  • test/e2e/README.md
  • test/e2e/features/install.feature
  • test/e2e/features/recover.feature
  • test/e2e/features/status.feature
  • test/e2e/features/uninstall.feature
  • test/e2e/features/update.feature
  • test/e2e/features/user-managed-fields.feature
  • test/e2e/steps/hooks.go
  • test/e2e/steps/steps.go
  • test/e2e/steps/testdata/extra-catalog-template.yaml
  • test/e2e/steps/testdata/test-catalog-template.yaml
  • test/e2e/steps/upgrade_steps.go
  • test/extension-developer-e2e/extension_developer_test.go
  • test/extension-developer-e2e/setup.sh
  • test/helpers/feature_gates.go
  • test/helpers/helpers.go
  • test/internal/catalog/bundle.go
  • test/internal/catalog/catalog.go
  • test/internal/catalog/catalog_test.go
  • test/internal/registry/registry.go
  • test/upgrade-e2e/features/operator-upgrade.feature
  • testdata/Dockerfile
  • testdata/build-test-registry.sh
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrd.operatorframework.io_largecrdtests.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml
  • testdata/images/catalogs/test-catalog/v1/configs/.indexignore
  • testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/.indexignore
  • testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml
  • testdata/push/README.md
  • testdata/push/go.mod
  • testdata/push/push.go
💤 Files with no reviewable changes (46)
  • testdata/images/catalogs/test-catalog/v1/configs/.indexignore
  • testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/.indexignore
  • testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml
  • hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml
  • hack/kind-config/containerd/certs.d/go.mod
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml
  • test/e2e/steps/testdata/test-catalog-template.yaml
  • test/e2e/steps/testdata/extra-catalog-template.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml
  • testdata/push/go.mod
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml
  • testdata/push/README.md
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml
  • kind-config/kind-config-2node.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml
  • kind-config/kind-config.yaml
  • test/helpers/feature_gates.go
  • test/helpers/helpers.go
  • testdata/Dockerfile
  • testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml

Comment thread test/e2e/steps/steps.go
Comment on lines +1682 to +1688
case strings.HasPrefix(part, "LargeCRD(") && strings.HasSuffix(part, ")"):
// LargeCRD(250)
countStr := part[len("LargeCRD(") : len(part)-1]
count, err := strconv.Atoi(countStr)
if err == nil {
opts = append(opts, catalog.WithLargeCRD(count))
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Silent error handling for LargeCRD field count parsing.

When parsing LargeCRD(...) content, the strconv.Atoi error is silently ignored. If a user provides invalid input like LargeCRD(abc), the option will be silently skipped without any indication of the problem.

🔧 Suggested fix: log or return error for invalid input
 		case strings.HasPrefix(part, "LargeCRD(") && strings.HasSuffix(part, ")"):
 			// LargeCRD(250)
 			countStr := part[len("LargeCRD(") : len(part)-1]
 			count, err := strconv.Atoi(countStr)
-			if err == nil {
-				opts = append(opts, catalog.WithLargeCRD(count))
+			if err != nil {
+				logger.V(1).Info("ignoring invalid LargeCRD field count", "value", countStr, "error", err)
+				continue
 			}
+			opts = append(opts, catalog.WithLargeCRD(count))
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
case strings.HasPrefix(part, "LargeCRD(") && strings.HasSuffix(part, ")"):
// LargeCRD(250)
countStr := part[len("LargeCRD(") : len(part)-1]
count, err := strconv.Atoi(countStr)
if err == nil {
opts = append(opts, catalog.WithLargeCRD(count))
}
case strings.HasPrefix(part, "LargeCRD(") && strings.HasSuffix(part, ")"):
// LargeCRD(250)
countStr := part[len("LargeCRD(") : len(part)-1]
count, err := strconv.Atoi(countStr)
if err != nil {
logger.V(1).Info("ignoring invalid LargeCRD field count", "value", countStr, "error", err)
continue
}
opts = append(opts, catalog.WithLargeCRD(count))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/steps/steps.go` around lines 1682 - 1688, The parsing branch that
handles strings.HasPrefix(part, "LargeCRD(") currently calls strconv.Atoi on
countStr and ignores errors; change this to surface parse failures instead of
silently skipping: after extracting countStr, check err from strconv.Atoi and on
error return or propagate a descriptive error (including the offending part and
countStr) from the parsing function, or at minimum log the failure before
continuing; ensure the code still calls catalog.WithLargeCRD(count) only when
Atoi succeeds so that opts is not silently incomplete.

Comment on lines +157 to +160
tag := fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version)
if err := crane.Push(img, tag, crane.Insecure, crane.WithContext(ctx)); err != nil {
return nil, fmt.Errorf("failed to push bundle image %s: %w", tag, err)
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Variable tag shadows the function parameter.

The tag variable declared on line 157 shadows the tag parameter of the Build method (line 123). This could cause confusion and bugs if the outer tag is needed elsewhere in the loop.

🔧 Suggested fix: rename the inner variable
-			tag := fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version)
-			if err := crane.Push(img, tag, crane.Insecure, crane.WithContext(ctx)); err != nil {
-				return nil, fmt.Errorf("failed to push bundle image %s: %w", tag, err)
+			bundleImageTag := fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version)
+			if err := crane.Push(img, bundleImageTag, crane.Insecure, crane.WithContext(ctx)); err != nil {
+				return nil, fmt.Errorf("failed to push bundle image %s: %w", bundleImageTag, err)
 			}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
tag := fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version)
if err := crane.Push(img, tag, crane.Insecure, crane.WithContext(ctx)); err != nil {
return nil, fmt.Errorf("failed to push bundle image %s: %w", tag, err)
}
bundleImageTag := fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version)
if err := crane.Push(img, bundleImageTag, crane.Insecure, crane.WithContext(ctx)); err != nil {
return nil, fmt.Errorf("failed to push bundle image %s: %w", bundleImageTag, err)
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/catalog/catalog.go` around lines 157 - 160, The inner variable
`tag` inside the loop shadows the `tag` parameter of the Build function; rename
the inner variable (for example to `bundleTag` or `pushTag`) in the fmt.Sprintf
assignment and in the subsequent error message/usage so the code uses a distinct
identifier (e.g., replace `tag := fmt.Sprintf(...)` with `bundleTag :=
fmt.Sprintf(...)` and update the `crane.Push` call and the fmt.Errorf to
reference `bundleTag`) to avoid shadowing and potential confusion in Build.

@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 23, 2026

/retest

@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 23, 2026

/test e2e-gcp-ovn-upgrade

1 similar comment
@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 23, 2026

/test e2e-gcp-ovn-upgrade

dependabot Bot added 2 commits April 23, 2026 17:35
Bumps [golang.org/x/mod](https://github.com/golang/mod) from 0.34.0 to 0.35.0.
- [Commits](golang/mod@v0.34.0...v0.35.0)

---
updated-dependencies:
- dependency-name: golang.org/x/mod
  dependency-version: 0.35.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [platformdirs](https://github.com/tox-dev/platformdirs) from 4.9.4 to 4.9.6.
- [Release notes](https://github.com/tox-dev/platformdirs/releases)
- [Changelog](https://github.com/tox-dev/platformdirs/blob/main/docs/changelog.rst)
- [Commits](tox-dev/platformdirs@4.9.4...4.9.6)

---
updated-dependencies:
- dependency-name: platformdirs
  dependency-version: 4.9.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 23, 2026

/retest

@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Apr 24, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (4)
docs/designs/testing/2026-04-13-e2e-isolation/design.md (1)

15-24: Add language specifier to fenced code block.

The code block should have a language specifier for proper syntax highlighting and to satisfy markdownlint MD040.

📝 Suggested fix
-```
+```text
 Scenario starts
   -> Generate parameterized bundle manifests (CRD names, deployments, etc. include scenario ID)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/designs/testing/2026-04-13-e2e-isolation/design.md` around lines 15 -
24, The fenced code block in design.md lacks a language specifier which triggers
markdownlint MD040; update the opening fence in the block that begins with
"Scenario starts" to include a language tag (e.g., use ```text or ```bash) so it
becomes a fenced code block with a language specifier, ensuring proper syntax
highlighting and lint compliance.
test/internal/catalog/catalog_test.go (1)

137-154: Channel ordering assumption may be fragile.

The test assumes pkg.channels[0] is "alpha" and pkg.channels[1] is "beta". This depends on the order channels are added via Channel() calls. Consider verifying by name lookup instead:

♻️ More robust channel lookup
// Find channels by name instead of assuming order
var alpha, beta *channelDef
for i := range pkg.channels {
    switch pkg.channels[i].name {
    case "alpha":
        alpha = &pkg.channels[i]
    case "beta":
        beta = &pkg.channels[i]
    }
}
if alpha == nil {
    t.Fatal("expected 'alpha' channel")
}
// ... assertions on alpha/beta
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/catalog/catalog_test.go` around lines 137 - 154, The test
assumes channel order by indexing pkg.channels[0] and pkg.channels[1], which is
fragile; instead locate channels by name (e.g., loop over pkg.channels and set
pointers/variables for the entries whose .name == "alpha" and .name == "beta"),
assert those pointers are non-nil, and then run the existing assertions against
alpha.entries and beta.entries (references: pkg.channels, channelDef/.name,
.entries).
test/internal/registry/registry.go (1)

79-83: Hardcoded ClusterIssuer reference.

The olmv1-ca ClusterIssuer is referenced without validation that it exists. If the ClusterIssuer is missing, the Certificate will fail to issue but the error won't surface until the Deployment times out waiting for the TLS secret.

Consider adding a pre-check for the ClusterIssuer existence or documenting this prerequisite.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/registry/registry.go` around lines 79 - 83, The Certificate
creation references a hardcoded ClusterIssuer "olmv1-ca" via
IssuerReference().WithName("olmv1-ca").WithKind("ClusterIssuer") without
validating existence; add a pre-check using the cluster API client (e.g.,
controller-runtime client.Get or dynamic client) to ensure a ClusterIssuer
resource named "olmv1-ca" exists before calling WithIssuerRef/creating the
Certificate, and if missing either return a clear error (failing fast) or skip
the test with a descriptive message; update the test/registry setup code where
WithIssuerRef and Certificate are constructed to perform this lookup and branch
accordingly.
test/internal/catalog/bundle.go (1)

124-141: Static bundle directory error handling could be more defensive.

The readBundleDir function will return an error if the directory doesn't exist, but a clearer early check could provide a better error message.

♻️ Optional improvement
 // Static bundle: read files from disk without parameterization
 if cfg.staticBundleDir != "" {
+	if _, err := os.Stat(cfg.staticBundleDir); os.IsNotExist(err) {
+		return bundleSpec{}, fmt.Errorf("static bundle directory does not exist: %s", cfg.staticBundleDir)
+	}
 	files, err := readBundleDir(cfg.staticBundleDir)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/catalog/bundle.go` around lines 124 - 141, The static-bundle
branch in buildBundle currently calls readBundleDir(cfg.staticBundleDir)
directly and surfaces its error; make the handling more defensive by first
checking the path exists and is a directory (use os.Stat on
cfg.staticBundleDir), return a clear error when the directory does not exist
(use fmt.Errorf("static bundle dir %s does not exist", cfg.staticBundleDir)) and
return a distinct error if Stat fails for other reasons (e.g.,
fmt.Errorf("failed to access static bundle dir %s: %w", cfg.staticBundleDir,
err)); only then call readBundleDir and keep the existing bundleSpec return.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Makefile`:
- Line 262: The Makefile unconditionally assigns CLUSTER_REGISTRY_HOST which
prevents shell overrides like CLUSTER_REGISTRY_HOST=... make test-e2e; change
the assignment for the CLUSTER_REGISTRY_HOST variable to a default-only
assignment (e.g., use the Makefile conditional assignment operator so it only
sets a value if none is provided) so test/e2e/steps/steps.go can continue to
read an environment-provided value.

In `@test/e2e/steps/steps.go`:
- Line 137: The step registration sc.Step(...) advertises arbitrary deployments
but MarkDeploymentReadiness only handles the old test-operator pattern for a
single pod and manipulating /var/www/ready; update the implementation or the
step text: either (A) narrow the step regex to explicitly target the
test-operator (e.g. "test-operator deployment ...") so behavior matches
MarkDeploymentReadiness, or (B) enhance MarkDeploymentReadiness to handle
multi-replica deployments by resolving the Deployment name to a pod label
selector, listing all pods for that deployment, and performing the readiness
toggle (exec'ing rm/touch or the equivalent) on each pod container; additionally
detect and bail with a clear error if pods use a different readinessProbe
(inspect pod.spec.containers[].readinessProbe) instead of assuming
/var/www/ready. Apply the same change where the step is duplicated (lines
~1742-1772).
- Around line 62-90: deployImageRegistry currently returns nil on non-kind
clusters which lets startRegistryPortForward and registryHosts proceed to
port-forward and produce false positives; change deployImageRegistry to return a
clear sentinel error (e.g., errNoRegistry) when the providerID check finds a
non-kind cluster, then update startRegistryPortForward (and the registryHosts
logic mentioned around the other block at lines 246-265) to detect that sentinel
error and stop without attempting PortForward, propagating a clear setup error
instead of pretending a registry is available.
- Around line 1528-1606: The parseCatalogTable helper (function
parseCatalogTable) currently indexes row.Cells[0..4] without validating row
width and will panic on malformed tables; update parseCatalogTable to validate
len(row.Cells) >= 5 for each data row (after skipping header) and return a
descriptive error (instead of panicking) when the row is too short, referencing
the package|version|channel|replaces|contents columns; ensure this validation
happens before using bundleKey, bundleDefs, packageChannels or calling
parseContents so subsequent logic (bundleOrder, packageOrder, packageChannels
map population and creation of catalog.Bundle / catalog.Channel entries) only
runs for well-formed rows.

---

Nitpick comments:
In `@docs/designs/testing/2026-04-13-e2e-isolation/design.md`:
- Around line 15-24: The fenced code block in design.md lacks a language
specifier which triggers markdownlint MD040; update the opening fence in the
block that begins with "Scenario starts" to include a language tag (e.g., use
```text or ```bash) so it becomes a fenced code block with a language specifier,
ensuring proper syntax highlighting and lint compliance.

In `@test/internal/catalog/bundle.go`:
- Around line 124-141: The static-bundle branch in buildBundle currently calls
readBundleDir(cfg.staticBundleDir) directly and surfaces its error; make the
handling more defensive by first checking the path exists and is a directory
(use os.Stat on cfg.staticBundleDir), return a clear error when the directory
does not exist (use fmt.Errorf("static bundle dir %s does not exist",
cfg.staticBundleDir)) and return a distinct error if Stat fails for other
reasons (e.g., fmt.Errorf("failed to access static bundle dir %s: %w",
cfg.staticBundleDir, err)); only then call readBundleDir and keep the existing
bundleSpec return.

In `@test/internal/catalog/catalog_test.go`:
- Around line 137-154: The test assumes channel order by indexing
pkg.channels[0] and pkg.channels[1], which is fragile; instead locate channels
by name (e.g., loop over pkg.channels and set pointers/variables for the entries
whose .name == "alpha" and .name == "beta"), assert those pointers are non-nil,
and then run the existing assertions against alpha.entries and beta.entries
(references: pkg.channels, channelDef/.name, .entries).

In `@test/internal/registry/registry.go`:
- Around line 79-83: The Certificate creation references a hardcoded
ClusterIssuer "olmv1-ca" via
IssuerReference().WithName("olmv1-ca").WithKind("ClusterIssuer") without
validating existence; add a pre-check using the cluster API client (e.g.,
controller-runtime client.Get or dynamic client) to ensure a ClusterIssuer
resource named "olmv1-ca" exists before calling WithIssuerRef/creating the
Certificate, and if missing either return a clear error (failing fast) or skip
the test with a descriptive message; update the test/registry setup code where
WithIssuerRef and Certificate are constructed to perform this lookup and branch
accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: f49897d0-f660-47c8-a813-cb6d6075774a

📥 Commits

Reviewing files that changed from the base of the PR and between c53874e and 57c87ba.

⛔ Files ignored due to path filters (216)
  • go.sum is excluded by !**/*.sum
  • openshift/tests-extension/go.sum is excluded by !**/*.sum
  • openshift/tests-extension/vendor/github.com/moby/spdystream/NOTICE is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/connection.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/LICENSE is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/PATENTS is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/dictionary.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/options.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/read.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/types.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/write.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/modules.txt is excluded by !**/vendor/**
  • testdata/push/go.sum is excluded by !**/*.sum
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/build.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/estargz.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/gzip.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/testutil.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/types.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/AUTHORS is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/NOTICE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/credentials.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/file_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/native_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/types/authconfig.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/distribution/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/distribution/registry/client/auth/challenge/authchallenge.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/client/client.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/client/command.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/error.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/version.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/and/and_closer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/compression/compression.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/estargz/estargz.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/gzip/zip.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/redact/redact.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/retry/retry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/retry/wait/kubernetes_apimachinery_wait.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/verify/verify.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/windows/windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/zstd/zstd.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/anon.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/auth.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/basic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/bearer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/compression/compression.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/append.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/catalog.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/copy.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/delete.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/digest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/export.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/filemap.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/get.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/list.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/manifest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/pull.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/push.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/tag.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/logs/logs.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/check.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/digest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/errors.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/ref.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/registry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/repository.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/tag.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/hash.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/blob.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/gc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/layoutpath.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/read.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/manifest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/match/match.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/rebase.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/compressed.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/uncompressed.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/with.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/platform.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/progress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/catalog.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/check.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/delete.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/descriptor.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/list.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/mount.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/multi_write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/progress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/puller.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/schema1.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/error.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/logger.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/ping.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/retry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/schemer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/scope.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/transport.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/useragent.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/stream/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/stream/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/types/types.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/zz_deepcopy_generated.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.gitattributes is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.gitignore is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.goreleaser.yml is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/SECURITY.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/compressible.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bytereader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/compress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/decompress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/fse.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/gen.sh is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/.gitignore is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/compress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_generic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/huff0.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/decode.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/decode_other.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/encode.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/encode_other.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/snapref/snappy.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/s2sx.mod is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/s2sx.sum is excluded by !**/*.sum, !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/blockdec.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/blockenc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/blocktype_string.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/zstd/bytebuf.go is excluded by !**/vendor/**
📒 Files selected for processing (84)
  • Makefile
  • docs/designs/testing/2026-04-13-e2e-isolation/design.md
  • go.mod
  • hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml
  • hack/kind-config/containerd/certs.d/go.mod
  • internal/operator-controller/applier/boxcutter_test.go
  • internal/operator-controller/applier/provider_test.go
  • internal/operator-controller/config/config_test.go
  • internal/operator-controller/config/error_formatting_test.go
  • internal/operator-controller/rukpak/bundle/source/source_test.go
  • internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go
  • internal/operator-controller/rukpak/render/registryv1/registryv1_test.go
  • internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go
  • internal/operator-controller/rukpak/render/render_test.go
  • internal/testing/bundle/csv/builder.go
  • internal/testing/bundle/csv/builder_test.go
  • internal/testing/bundle/fs/bundlefs.go
  • internal/testing/bundle/fs/bundlefs_test.go
  • kind-config/kind-config-2node.yaml
  • kind-config/kind-config.yaml
  • openshift/tests-extension/go.mod
  • requirements.txt
  • test/e2e/README.md
  • test/e2e/features/install.feature
  • test/e2e/features/recover.feature
  • test/e2e/features/status.feature
  • test/e2e/features/uninstall.feature
  • test/e2e/features/update.feature
  • test/e2e/features/user-managed-fields.feature
  • test/e2e/steps/hooks.go
  • test/e2e/steps/steps.go
  • test/e2e/steps/testdata/extra-catalog-template.yaml
  • test/e2e/steps/testdata/test-catalog-template.yaml
  • test/e2e/steps/upgrade_steps.go
  • test/extension-developer-e2e/extension_developer_test.go
  • test/extension-developer-e2e/setup.sh
  • test/helpers/feature_gates.go
  • test/helpers/helpers.go
  • test/internal/catalog/bundle.go
  • test/internal/catalog/catalog.go
  • test/internal/catalog/catalog_test.go
  • test/internal/registry/registry.go
  • test/upgrade-e2e/features/operator-upgrade.feature
  • testdata/Dockerfile
  • testdata/build-test-registry.sh
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrd.operatorframework.io_largecrdtests.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml
  • testdata/images/catalogs/test-catalog/v1/configs/.indexignore
  • testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/.indexignore
  • testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml
  • testdata/push/README.md
  • testdata/push/go.mod
  • testdata/push/push.go
💤 Files with no reviewable changes (46)
  • testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/.indexignore
  • testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml
  • hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/push/go.mod
  • hack/kind-config/containerd/certs.d/go.mod
  • testdata/images/catalogs/test-catalog/v1/configs/.indexignore
  • test/e2e/steps/testdata/test-catalog-template.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml
  • testdata/Dockerfile
  • testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml
  • test/e2e/steps/testdata/extra-catalog-template.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml
  • testdata/push/README.md
  • testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml
  • kind-config/kind-config.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml
  • kind-config/kind-config-2node.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml
  • test/helpers/feature_gates.go
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • test/helpers/helpers.go
✅ Files skipped from review due to trivial changes (11)
  • requirements.txt
  • openshift/tests-extension/go.mod
  • internal/testing/bundle/fs/bundlefs.go
  • internal/operator-controller/config/error_formatting_test.go
  • internal/operator-controller/config/config_test.go
  • internal/operator-controller/rukpak/render/registryv1/registryv1_test.go
  • internal/operator-controller/rukpak/bundle/source/source_test.go
  • test/e2e/README.md
  • test/upgrade-e2e/features/operator-upgrade.feature
  • internal/operator-controller/rukpak/render/render_test.go
  • internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go
🚧 Files skipped from review as they are similar to previous changes (14)
  • internal/testing/bundle/csv/builder.go
  • go.mod
  • testdata/build-test-registry.sh
  • internal/testing/bundle/fs/bundlefs_test.go
  • test/e2e/features/uninstall.feature
  • internal/testing/bundle/csv/builder_test.go
  • test/extension-developer-e2e/extension_developer_test.go
  • test/e2e/features/status.feature
  • internal/operator-controller/applier/boxcutter_test.go
  • test/e2e/steps/upgrade_steps.go
  • test/internal/catalog/catalog.go
  • test/e2e/features/user-managed-fields.feature
  • test/e2e/features/recover.feature
  • test/e2e/features/update.feature

Comment thread Makefile
Comment thread test/e2e/steps/steps.go
Comment on lines 62 to +90
deployImageRegistry = sync.OnceValue(func() error {
if os.Getenv("KIND_CLUSTER_NAME") == "" {
// Only deploy the registry on kind clusters
providerID, err := k8sClient("get", "nodes", "-o", "jsonpath={.items[0].spec.providerID}")
if err != nil || !strings.HasPrefix(providerID, "kind://") {
return nil
}
cmd := exec.Command("bash", "-c", "make image-registry")
dir, _ := os.LookupEnv("ROOT_DIR")
if dir == "" {
return fmt.Errorf("ROOT_DIR environment variable not set")

cfg, err := ctrl.GetConfig()
if err != nil {
return fmt.Errorf("failed to get kubeconfig: %w", err)
}
cmd.Dir = dir
cmd.Env = append(os.Environ(), fmt.Sprintf("KUBECONFIG=%s", kubeconfigPath))
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
return testregistry.Deploy(context.Background(), cfg, testregistry.DefaultNamespace, testregistry.DefaultName)
})
startRegistryPortForward = sync.OnceValues(func() (string, error) {
if err := deployImageRegistry(); err != nil {
return "", err
}
cfg, err := ctrl.GetConfig()
if err != nil {
return "", fmt.Errorf("failed to get kubeconfig: %w", err)
}
// Port-forward lives for the duration of the test process;
// the stop function is not needed because the goroutine is
// cleaned up on process exit.
localAddr, _, err := testregistry.PortForward(context.Background(), cfg, testregistry.DefaultNamespace, testregistry.DefaultName)
if err != nil {
return "", fmt.Errorf("failed to start port-forward to registry: %w", err)
}
return localAddr, nil
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Don’t report registry availability on non-kind clusters without verifying it.

Outside kind, deployImageRegistry() returns nil immediately, but registryHosts() still unconditionally tries to port-forward testregistry.DefaultNamespace/testregistry.DefaultName. That makes an image registry is available a false positive and shifts the failure to the first catalog build instead of failing at the setup step with a clear error.

Also applies to: 246-265

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/steps/steps.go` around lines 62 - 90, deployImageRegistry currently
returns nil on non-kind clusters which lets startRegistryPortForward and
registryHosts proceed to port-forward and produce false positives; change
deployImageRegistry to return a clear sentinel error (e.g., errNoRegistry) when
the providerID check finds a non-kind cluster, then update
startRegistryPortForward (and the registryHosts logic mentioned around the other
block at lines 246-265) to detect that sentinel error and stop without
attempting PortForward, propagating a clear setup error instead of pretending a
registry is available.

Comment thread test/e2e/steps/steps.go
Comment thread test/e2e/steps/steps.go
Comment on lines +1528 to 1606
// parseCatalogTable parses a Gherkin data table into catalog.PackageOption slices.
// Table columns: package | version | channel | replaces | contents
func parseCatalogTable(table *godog.Table) ([]catalog.PackageOption, error) {
type bundleKey struct {
pkg string
version string
}
type bundleEntry struct {
opts []catalog.BundleOption
}
type channelEntry struct {
version string
replaces string
}

_, err = k8scliWithInput(substituteScenarioVars(string(yamlContent), sc), "apply", "-f", "-")
if err != nil {
return fmt.Errorf("failed to apply catalog: %v", err)
bundleDefs := make(map[bundleKey]*bundleEntry)
var bundleOrder []bundleKey
packageChannels := make(map[string]map[string][]channelEntry)
var packageOrder []string
packageSeen := make(map[string]bool)

for _, row := range table.Rows[1:] { // skip header
pkg := row.Cells[0].Value
version := row.Cells[1].Value
channel := row.Cells[2].Value
replaces := row.Cells[3].Value
contents := row.Cells[4].Value

if !packageSeen[pkg] {
packageOrder = append(packageOrder, pkg)
packageSeen[pkg] = true
}

bk := bundleKey{pkg: pkg, version: version}
if _, exists := bundleDefs[bk]; exists {
if strings.TrimSpace(contents) != "" {
return nil, fmt.Errorf("duplicate bundle %s/%s: contents must be empty for repeated versions", pkg, version)
}
} else {
opts := parseContents(contents)
bundleDefs[bk] = &bundleEntry{opts: opts}
bundleOrder = append(bundleOrder, bk)
}

if packageChannels[pkg] == nil {
packageChannels[pkg] = make(map[string][]channelEntry)
}
packageChannels[pkg][channel] = append(packageChannels[pkg][channel], channelEntry{
version: version,
replaces: replaces,
})
}

return nil
}
var pkgOpts []catalog.PackageOption
for _, pkgName := range packageOrder {
var opts []catalog.PackageOption

// TagCatalogImage adds a new tag to a catalog container image in the local registry using crane.
func TagCatalogImage(name, oldTag, newTag string) error {
imageRef := fmt.Sprintf("%s/%s", os.Getenv("LOCAL_REGISTRY_HOST"), fmt.Sprintf("e2e/%s-catalog:%s", name, oldTag))
return crane.Tag(imageRef, newTag, crane.Insecure)
for _, bk := range bundleOrder {
if bk.pkg == pkgName {
opts = append(opts, catalog.Bundle(bk.version, bundleDefs[bk].opts...))
}
}

for chName, entries := range packageChannels[pkgName] {
var chOpts []catalog.ChannelOption
for _, e := range entries {
if e.replaces != "" {
chOpts = append(chOpts, catalog.Entry(e.version, catalog.Replaces(e.replaces)))
} else {
chOpts = append(chOpts, catalog.Entry(e.version))
}
}
opts = append(opts, catalog.Channel(chName, chOpts...))
}

pkgOpts = append(pkgOpts, catalog.WithPackage(pkgName, opts...))
}
return pkgOpts, nil
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Validate catalog table width before indexing fixed columns.

parseCatalogTable assumes every data row has five cells and will panic on a malformed feature table. This helper should return a step error instead of crashing the suite.

Suggested change
 func parseCatalogTable(table *godog.Table) ([]catalog.PackageOption, error) {
+	if len(table.Rows) < 2 {
+		return nil, fmt.Errorf("catalog table must include a header row and at least one data row")
+	}
+	if len(table.Rows[0].Cells) < 5 {
+		return nil, fmt.Errorf("catalog table header must include 5 columns: package, version, channel, replaces, contents")
+	}
+
 	type bundleKey struct {
 		pkg     string
 		version string
@@
-	for _, row := range table.Rows[1:] { // skip header
+	for rowIdx, row := range table.Rows[1:] { // skip header
+		if len(row.Cells) < 5 {
+			return nil, fmt.Errorf("catalog table row %d has %d cells, expected 5", rowIdx+2, len(row.Cells))
+		}
 		pkg := row.Cells[0].Value
 		version := row.Cells[1].Value
 		channel := row.Cells[2].Value
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// parseCatalogTable parses a Gherkin data table into catalog.PackageOption slices.
// Table columns: package | version | channel | replaces | contents
func parseCatalogTable(table *godog.Table) ([]catalog.PackageOption, error) {
type bundleKey struct {
pkg string
version string
}
type bundleEntry struct {
opts []catalog.BundleOption
}
type channelEntry struct {
version string
replaces string
}
_, err = k8scliWithInput(substituteScenarioVars(string(yamlContent), sc), "apply", "-f", "-")
if err != nil {
return fmt.Errorf("failed to apply catalog: %v", err)
bundleDefs := make(map[bundleKey]*bundleEntry)
var bundleOrder []bundleKey
packageChannels := make(map[string]map[string][]channelEntry)
var packageOrder []string
packageSeen := make(map[string]bool)
for _, row := range table.Rows[1:] { // skip header
pkg := row.Cells[0].Value
version := row.Cells[1].Value
channel := row.Cells[2].Value
replaces := row.Cells[3].Value
contents := row.Cells[4].Value
if !packageSeen[pkg] {
packageOrder = append(packageOrder, pkg)
packageSeen[pkg] = true
}
bk := bundleKey{pkg: pkg, version: version}
if _, exists := bundleDefs[bk]; exists {
if strings.TrimSpace(contents) != "" {
return nil, fmt.Errorf("duplicate bundle %s/%s: contents must be empty for repeated versions", pkg, version)
}
} else {
opts := parseContents(contents)
bundleDefs[bk] = &bundleEntry{opts: opts}
bundleOrder = append(bundleOrder, bk)
}
if packageChannels[pkg] == nil {
packageChannels[pkg] = make(map[string][]channelEntry)
}
packageChannels[pkg][channel] = append(packageChannels[pkg][channel], channelEntry{
version: version,
replaces: replaces,
})
}
return nil
}
var pkgOpts []catalog.PackageOption
for _, pkgName := range packageOrder {
var opts []catalog.PackageOption
// TagCatalogImage adds a new tag to a catalog container image in the local registry using crane.
func TagCatalogImage(name, oldTag, newTag string) error {
imageRef := fmt.Sprintf("%s/%s", os.Getenv("LOCAL_REGISTRY_HOST"), fmt.Sprintf("e2e/%s-catalog:%s", name, oldTag))
return crane.Tag(imageRef, newTag, crane.Insecure)
for _, bk := range bundleOrder {
if bk.pkg == pkgName {
opts = append(opts, catalog.Bundle(bk.version, bundleDefs[bk].opts...))
}
}
for chName, entries := range packageChannels[pkgName] {
var chOpts []catalog.ChannelOption
for _, e := range entries {
if e.replaces != "" {
chOpts = append(chOpts, catalog.Entry(e.version, catalog.Replaces(e.replaces)))
} else {
chOpts = append(chOpts, catalog.Entry(e.version))
}
}
opts = append(opts, catalog.Channel(chName, chOpts...))
}
pkgOpts = append(pkgOpts, catalog.WithPackage(pkgName, opts...))
}
return pkgOpts, nil
}
// parseCatalogTable parses a Gherkin data table into catalog.PackageOption slices.
// Table columns: package | version | channel | replaces | contents
func parseCatalogTable(table *godog.Table) ([]catalog.PackageOption, error) {
if len(table.Rows) < 2 {
return nil, fmt.Errorf("catalog table must include a header row and at least one data row")
}
if len(table.Rows[0].Cells) < 5 {
return nil, fmt.Errorf("catalog table header must include 5 columns: package, version, channel, replaces, contents")
}
type bundleKey struct {
pkg string
version string
}
type bundleEntry struct {
opts []catalog.BundleOption
}
type channelEntry struct {
version string
replaces string
}
bundleDefs := make(map[bundleKey]*bundleEntry)
var bundleOrder []bundleKey
packageChannels := make(map[string]map[string][]channelEntry)
var packageOrder []string
packageSeen := make(map[string]bool)
for rowIdx, row := range table.Rows[1:] { // skip header
if len(row.Cells) < 5 {
return nil, fmt.Errorf("catalog table row %d has %d cells, expected 5", rowIdx+2, len(row.Cells))
}
pkg := row.Cells[0].Value
version := row.Cells[1].Value
channel := row.Cells[2].Value
replaces := row.Cells[3].Value
contents := row.Cells[4].Value
if !packageSeen[pkg] {
packageOrder = append(packageOrder, pkg)
packageSeen[pkg] = true
}
bk := bundleKey{pkg: pkg, version: version}
if _, exists := bundleDefs[bk]; exists {
if strings.TrimSpace(contents) != "" {
return nil, fmt.Errorf("duplicate bundle %s/%s: contents must be empty for repeated versions", pkg, version)
}
} else {
opts := parseContents(contents)
bundleDefs[bk] = &bundleEntry{opts: opts}
bundleOrder = append(bundleOrder, bk)
}
if packageChannels[pkg] == nil {
packageChannels[pkg] = make(map[string][]channelEntry)
}
packageChannels[pkg][channel] = append(packageChannels[pkg][channel], channelEntry{
version: version,
replaces: replaces,
})
}
var pkgOpts []catalog.PackageOption
for _, pkgName := range packageOrder {
var opts []catalog.PackageOption
for _, bk := range bundleOrder {
if bk.pkg == pkgName {
opts = append(opts, catalog.Bundle(bk.version, bundleDefs[bk].opts...))
}
}
for chName, entries := range packageChannels[pkgName] {
var chOpts []catalog.ChannelOption
for _, e := range entries {
if e.replaces != "" {
chOpts = append(chOpts, catalog.Entry(e.version, catalog.Replaces(e.replaces)))
} else {
chOpts = append(chOpts, catalog.Entry(e.version))
}
}
opts = append(opts, catalog.Channel(chName, chOpts...))
}
pkgOpts = append(pkgOpts, catalog.WithPackage(pkgName, opts...))
}
return pkgOpts, nil
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/steps/steps.go` around lines 1528 - 1606, The parseCatalogTable
helper (function parseCatalogTable) currently indexes row.Cells[0..4] without
validating row width and will panic on malformed tables; update
parseCatalogTable to validate len(row.Cells) >= 5 for each data row (after
skipping header) and return a descriptive error (instead of panicking) when the
row is too short, referencing the package|version|channel|replaces|contents
columns; ensure this validation happens before using bundleKey, bundleDefs,
packageChannels or calling parseContents so subsequent logic (bundleOrder,
packageOrder, packageChannels map population and creation of catalog.Bundle /
catalog.Channel entries) only runs for well-formed rows.

@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 24, 2026

/retest

tmshort and others added 2 commits April 24, 2026 15:31
- Set Proxy: http.ProxyFromEnvironment on the custom http.Transport in
  BuildHTTPClient so HTTPS_PROXY/NO_PROXY env vars are honoured
- Add unit tests verifying the transport uses env-based proxy, tunnels
  connections through an HTTP CONNECT proxy, and fails when the proxy
  rejects the tunnel
- Add an in-process recording proxy and deployment patch helpers to the
  e2e step library
- Add two @httpproxy e2e scenarios: one verifying operator-controller
  blocks catalog fetches when the proxy is unreachable, one verifying
  CONNECT requests are routed through a configured proxy

Signed-off-by: Todd Short <tshort@redhat.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.43.0 to 0.44.0.
- [Release notes](https://github.com/golang/tools/releases)
- [Commits](golang/tools@v0.43.0...v0.44.0)

---
updated-dependencies:
- dependency-name: golang.org/x/tools
  dependency-version: 0.44.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 24, 2026

/cc @openshift/openshift-team-operator-runtime

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 24, 2026

@tmshort: GitHub didn't allow me to request PR reviews from the following users: openshift/openshift-team-operator-runtime.

Note that only openshift members and repo collaborators can review this PR, and authors cannot review their own PRs.

Details

In response to this:

/cc @openshift/openshift-team-operator-runtime

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 24, 2026

/assign @openshift/openshift-team-operator-runtime

1 similar comment
@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 24, 2026

/assign @openshift/openshift-team-operator-runtime

@tmshort
Copy link
Copy Markdown
Contributor

tmshort commented Apr 24, 2026

/assign @tmshort

tmshort and others added 20 commits April 25, 2026 00:08
Signed-off-by: Todd Short <tshort@redhat.com>
…64 support

Signed-off-by: Daniel Franz <dfranz@redhat.com>
Signed-off-by: Todd Short <tshort@redhat.com>
…t in OTE tests

Update all remaining references to ClusterExtensionRevision in
openshift/tests-extension to use ClusterObjectSet, matching the
upstream rename in operator-framework/operator-controller#2589.

Files updated:
- test/qe/specs/olmv1_ce.go: RBAC resource names and comments
- test/olmv1-preflight.go: scenario constants, test names, RBAC rules
- .openshift-tests-extension/openshift_payload_olmv1.json: test name
- pkg/bindata/qe/bindata.go: embedded RBAC templates
- test/qe/testdata/olm/sa-nginx-limited-boxcutter.yaml: RBAC resources
- test/qe/testdata/olm/sa-nginx-insufficient-operand-rbac-boxcutter.yaml: RBAC resources

Signed-off-by: Camila Macedo <cmacedo@redhat.com>
Made-with: Cursor
…s ClusterObjectSet

The upstream rename of ClusterExtensionRevision to ClusterObjectSet
(operator-framework/operator-controller#2589) breaks the incompatible
operator detection in cluster-olm-operator. The cluster-olm-operator
binary still reads ClusterExtensionRevision resources to find operators
with olm.maxOpenShiftVersion, so after the rename it never detects
incompatible operators and InstalledOLMOperatorsUpgradeable stays True.

Skip this test when NewOLMBoxCutterRuntime feature gate is enabled
until cluster-olm-operator is updated to read ClusterObjectSet.

Signed-off-by: Camila Macedo <cmacedo@redhat.com>
Made-with: Cursor
Signed-off-by: Francesco Giudici <fgiudici@redhat.com>
Signed-off-by: Todd Short <todd.short@me.com>
@openshift-bot openshift-bot added the lgtm Indicates that a PR is ready to be merged. label Apr 25, 2026
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Apr 25, 2026
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 25, 2026

[APPROVALNOTIFIER] This PR is APPROVED

Approval requirements bypassed by manually added approval.

This pull-request has been approved by: openshift-bot

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (4)
test/internal/registry/registry.go (2)

203-209: Discarding port-forward output may hinder debugging.

Both stdout and stderr are set to io.Discard. If port-forward issues occur during test runs, there will be no diagnostic output. Consider making this configurable or logging at debug level.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/registry/registry.go` around lines 203 - 209, The
port-forwarder is currently discarding all output (io.Discard passed to
portforward.New), which removes diagnostic logs for stopChan/readyChan failures;
update the call in the registry setup (portforward.New with stopChan and
readyChan) to use a configurable io.Writer (e.g., accept a writer or
testing.T.Logf-backed writer) or capture stdout/stderr into a buffer and emit
its contents at debug level or on error so port-forward stdout/stderr are
available for debugging during tests.

178-188: Consider checking pod Ready condition, not just Running phase.

The pod selection uses status.phase=Running but doesn't verify the pod is Ready. A pod can be Running but not Ready (e.g., failing readiness probes). For test reliability, consider adding a readiness check or at least documenting why Running is sufficient.

💡 Optional: Add Ready condition check
 	pods, err := clientset.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{
 		LabelSelector: labelSelector,
 		FieldSelector: "status.phase=Running",
 	})
 	if err != nil {
 		return "", nil, fmt.Errorf("failed to list pods for deployment %s: %w", name, err)
 	}
-	if len(pods.Items) == 0 {
-		return "", nil, fmt.Errorf("no running pods found for deployment %s/%s", namespace, name)
+	var readyPod *corev1.Pod
+	for i := range pods.Items {
+		for _, cond := range pods.Items[i].Status.Conditions {
+			if cond.Type == corev1.PodReady && cond.Status == corev1.ConditionTrue {
+				readyPod = &pods.Items[i]
+				break
+			}
+		}
+		if readyPod != nil {
+			break
+		}
 	}
-	podName := pods.Items[0].Name
+	if readyPod == nil {
+		return "", nil, fmt.Errorf("no ready pods found for deployment %s/%s", namespace, name)
+	}
+	podName := readyPod.Name
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/internal/registry/registry.go` around lines 178 - 188, The pod listing
currently filters only by "status.phase=Running"
(clientset.CoreV1().Pods(...).List with FieldSelector "status.phase=Running")
and then picks pods.Items[0].Name; update the selection to ensure the chosen pod
is Ready by either (a) after listing, iterate pods.Items and check the
PodCondition of type "Ready" is Status "True" before selecting podName, or (b)
perform an additional readiness check/wait loop (inspect pod.Status.Conditions
for Type==corev1.PodReady) and skip pods that are not Ready; update any error
messages (e.g., the fmt.Errorf lines) to reflect "no ready pods" when none
qualify and ensure labelSelector and namespace usage remains the same.
test/e2e/features/proxy.feature (1)

9-10: Adopt scenario-scoped catalog setup in proxy feature for isolation consistency.

This file still uses global/static catalog naming, unlike the rest of the migrated e2e suite. Converting to parameterized catalog/package references will avoid cross-scenario coupling.

♻️ Suggested update
 Background:
   Given OLM is available
-  And ClusterCatalog "test" serves bundles
+  And an image registry is available
+  And a catalog "test" with packages:
+    | package | version | channel | replaces | contents                   |
+    | test    | 1.0.0   | beta    |          | CRD, Deployment, ConfigMap |
   And ServiceAccount "olm-sa" with needed permissions is available in test namespace
@@
         source:
           sourceType: Catalog
           catalog:
-            packageName: test
+            packageName: ${PACKAGE:test}
             selector:
               matchLabels:
-                "olm.operatorframework.io/metadata.name": test-catalog
+                "olm.operatorframework.io/metadata.name": ${CATALOG:test}
@@
         source:
           sourceType: Catalog
           catalog:
-            packageName: test
+            packageName: ${PACKAGE:test}
             selector:
               matchLabels:
-                "olm.operatorframework.io/metadata.name": test-catalog
+                "olm.operatorframework.io/metadata.name": ${CATALOG:test}

Also applies to: 28-32, 59-63

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/features/proxy.feature` around lines 9 - 10, The feature uses
hardcoded ClusterCatalog "test" and ServiceAccount "olm-sa" which causes
cross-scenario coupling; change the steps that declare ClusterCatalog "test"
serves bundles and ServiceAccount "olm-sa" to use scenario-scoped parameters
(e.g., a generated catalog name and SA tied to the current scenario or example
table) so each scenario creates/tears down its own ClusterCatalog and
ServiceAccount; update all occurrences (including the other instances around
lines 28-32 and 59-63) and adjust any step definitions that accept
ClusterCatalog and ServiceAccount names so they consume the parameterized values
from the scenario context.
docs/designs/testing/2026-04-13-e2e-isolation/design.md (1)

15-24: Add language specifier to fenced code block.

The code block describing the scenario workflow lacks a language identifier, which helps with rendering and accessibility.

📝 Suggested fix
-```
+```text
 Scenario starts
   -> Generate parameterized bundle manifests (CRD names, deployments, etc. include scenario ID)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/designs/testing/2026-04-13-e2e-isolation/design.md` around lines 15 -
24, The fenced code block starting with ``` that contains the scenario workflow
should include a language specifier for better rendering and accessibility;
update the opening fence from ``` to a language-tagged fence such as ```text
(i.e., change the block that begins with "Scenario starts" to use ```text) so
the renderer treats it as plain text.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/extension-developer-e2e/setup.sh`:
- Around line 15-16: The script currently appends the build flag
"--provenance=false" unconditionally which breaks Podman; update the build
invocations that use $CONTAINER_RUNTIME (the commands that pass
"--provenance=false") to only include that flag when CONTAINER_RUNTIME is
"docker" (or its explicit docker binary), e.g. compute a variable like
PROVENANCE_FLAG="" and set it to "--provenance=false" when [
"$CONTAINER_RUNTIME" = "docker" ] and then use "$PROVENANCE_FLAG" in the build
commands so Podman runs without the unsupported flag.

---

Nitpick comments:
In `@docs/designs/testing/2026-04-13-e2e-isolation/design.md`:
- Around line 15-24: The fenced code block starting with ``` that contains the
scenario workflow should include a language specifier for better rendering and
accessibility; update the opening fence from ``` to a language-tagged fence such
as ```text (i.e., change the block that begins with "Scenario starts" to use
```text) so the renderer treats it as plain text.

In `@test/e2e/features/proxy.feature`:
- Around line 9-10: The feature uses hardcoded ClusterCatalog "test" and
ServiceAccount "olm-sa" which causes cross-scenario coupling; change the steps
that declare ClusterCatalog "test" serves bundles and ServiceAccount "olm-sa" to
use scenario-scoped parameters (e.g., a generated catalog name and SA tied to
the current scenario or example table) so each scenario creates/tears down its
own ClusterCatalog and ServiceAccount; update all occurrences (including the
other instances around lines 28-32 and 59-63) and adjust any step definitions
that accept ClusterCatalog and ServiceAccount names so they consume the
parameterized values from the scenario context.

In `@test/internal/registry/registry.go`:
- Around line 203-209: The port-forwarder is currently discarding all output
(io.Discard passed to portforward.New), which removes diagnostic logs for
stopChan/readyChan failures; update the call in the registry setup
(portforward.New with stopChan and readyChan) to use a configurable io.Writer
(e.g., accept a writer or testing.T.Logf-backed writer) or capture stdout/stderr
into a buffer and emit its contents at debug level or on error so port-forward
stdout/stderr are available for debugging during tests.
- Around line 178-188: The pod listing currently filters only by
"status.phase=Running" (clientset.CoreV1().Pods(...).List with FieldSelector
"status.phase=Running") and then picks pods.Items[0].Name; update the selection
to ensure the chosen pod is Ready by either (a) after listing, iterate
pods.Items and check the PodCondition of type "Ready" is Status "True" before
selecting podName, or (b) perform an additional readiness check/wait loop
(inspect pod.Status.Conditions for Type==corev1.PodReady) and skip pods that are
not Ready; update any error messages (e.g., the fmt.Errorf lines) to reflect "no
ready pods" when none qualify and ensure labelSelector and namespace usage
remains the same.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: c6d34601-0c3b-40fe-9fbf-04ccb499e879

📥 Commits

Reviewing files that changed from the base of the PR and between 57c87ba and 6362918.

⛔ Files ignored due to path filters (211)
  • go.sum is excluded by !**/*.sum
  • openshift/tests-extension/go.sum is excluded by !**/*.sum
  • openshift/tests-extension/vendor/github.com/moby/spdystream/NOTICE is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/connection.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/LICENSE is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/PATENTS is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/dictionary.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/options.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/read.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/types.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/github.com/moby/spdystream/spdy/write.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/crypto/ssh/cipher.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/crypto/ssh/client_auth.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/net/http2/hpack/tables.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/net/http2/transport.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/sys/windows/dll_windows.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/golang.org/x/sys/windows/security_windows.go is excluded by !**/vendor/**
  • openshift/tests-extension/vendor/modules.txt is excluded by !**/vendor/**
  • testdata/push/go.sum is excluded by !**/*.sum
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/build.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/estargz.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/gzip.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/testutil.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/containerd/stargz-snapshotter/estargz/types.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/AUTHORS is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/NOTICE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/credentials.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/file_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/credentials/native_store.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/cli/cli/config/types/authconfig.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/distribution/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/distribution/registry/client/auth/challenge/authchallenge.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/client/client.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/client/command.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/error.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/docker/docker-credential-helpers/credentials/version.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/and/and_closer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/compression/compression.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/estargz/estargz.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/gzip/zip.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/redact/redact.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/retry/retry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/retry/wait/kubernetes_apimachinery_wait.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/verify/verify.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/windows/windows.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/internal/zstd/zstd.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/anon.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/auth.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/authn.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/basic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/bearer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/keychain.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/authn/multikeychain.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/compression/compression.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/append.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/catalog.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/copy.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/delete.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/digest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/export.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/filemap.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/get.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/list.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/manifest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/pull.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/push.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/crane/tag.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/legacy/tarball/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/logs/logs.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/check.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/digest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/errors.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/ref.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/registry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/repository.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/name/tag.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/config.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/empty/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/hash.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/blob.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/gc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/layoutpath.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/read.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/layout/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/manifest.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/match/match.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/mutate.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/mutate/rebase.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/compressed.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/uncompressed.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/partial/with.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/platform.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/progress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/catalog.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/check.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/delete.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/descriptor.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/fetcher.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/index.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/list.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/mount.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/multi_write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/options.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/progress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/puller.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/pusher.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/referrers.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/schema1.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/basic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/bearer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/error.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/logger.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/ping.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/retry.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/schemer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/scope.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/transport.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/transport/useragent.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/remote/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/stream/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/stream/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/doc.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/image.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/layer.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/tarball/write.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/types/types.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/google/go-containerregistry/pkg/v1/zz_deepcopy_generated.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.gitattributes is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.gitignore is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/.goreleaser.yml is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/LICENSE is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/SECURITY.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/compressible.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/bytereader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/compress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/decompress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/fse/fse.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/gen.sh is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/.gitignore is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/README.md is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/bitreader.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/bitwriter.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/compress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/decompress_generic.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/huff0/huff0.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go is excluded by !**/vendor/**
  • testdata/push/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s is excluded by !**/vendor/**
📒 Files selected for processing (89)
  • Makefile
  • docs/designs/testing/2026-04-13-e2e-isolation/design.md
  • go.mod
  • hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml
  • hack/kind-config/containerd/certs.d/go.mod
  • internal/operator-controller/applier/boxcutter_test.go
  • internal/operator-controller/applier/provider_test.go
  • internal/operator-controller/config/config_test.go
  • internal/operator-controller/config/error_formatting_test.go
  • internal/operator-controller/rukpak/bundle/source/source_test.go
  • internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go
  • internal/operator-controller/rukpak/render/registryv1/registryv1_test.go
  • internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go
  • internal/operator-controller/rukpak/render/render_test.go
  • internal/shared/util/http/httputil.go
  • internal/shared/util/http/httputil_test.go
  • internal/testing/bundle/csv/builder.go
  • internal/testing/bundle/csv/builder_test.go
  • internal/testing/bundle/fs/bundlefs.go
  • internal/testing/bundle/fs/bundlefs_test.go
  • kind-config/kind-config-2node.yaml
  • kind-config/kind-config.yaml
  • openshift/tests-extension/go.mod
  • requirements.txt
  • test/e2e/README.md
  • test/e2e/features/install.feature
  • test/e2e/features/proxy.feature
  • test/e2e/features/recover.feature
  • test/e2e/features/status.feature
  • test/e2e/features/uninstall.feature
  • test/e2e/features/update.feature
  • test/e2e/features/user-managed-fields.feature
  • test/e2e/steps/hooks.go
  • test/e2e/steps/proxy_steps.go
  • test/e2e/steps/steps.go
  • test/e2e/steps/testdata/extra-catalog-template.yaml
  • test/e2e/steps/testdata/test-catalog-template.yaml
  • test/e2e/steps/tls_steps.go
  • test/e2e/steps/upgrade_steps.go
  • test/extension-developer-e2e/extension_developer_test.go
  • test/extension-developer-e2e/setup.sh
  • test/helpers/feature_gates.go
  • test/helpers/helpers.go
  • test/internal/catalog/bundle.go
  • test/internal/catalog/catalog.go
  • test/internal/catalog/catalog_test.go
  • test/internal/registry/registry.go
  • test/upgrade-e2e/features/operator-upgrade.feature
  • testdata/Dockerfile
  • testdata/build-test-registry.sh
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrd.operatorframework.io_largecrdtests.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml
  • testdata/images/catalogs/test-catalog/v1/configs/.indexignore
  • testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/.indexignore
  • testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml
  • testdata/push/README.md
  • testdata/push/go.mod
  • testdata/push/push.go
💤 Files with no reviewable changes (46)
  • testdata/images/bundles/single-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/catalogs/test-catalog/v1/configs/.indexignore
  • testdata/images/bundles/large-crd-operator/v1.0.0/metadata/annotations.yaml
  • testdata/push/go.mod
  • testdata/Dockerfile
  • testdata/images/bundles/test-operator/v1.0.3/metadata/annotations.yaml
  • test/e2e/steps/testdata/test-catalog-template.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/catalog.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.networkpolicy.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/dummy.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/bundle.configmap.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_ownnamespaces.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.networkpolicy.yaml
  • testdata/push/README.md
  • testdata/images/catalogs/test-catalog/v1/configs/catalog.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/script.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/olm.operatorframework.com_singlenamespaces.yaml
  • kind-config/kind-config.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/script.configmap.yaml
  • hack/kind-config/containerd/certs.d/docker-registry.operator-controller-e2e.svc.cluster.local:5000/hosts.toml
  • test/e2e/steps/testdata/extra-catalog-template.yaml
  • testdata/images/bundles/test-operator/v1.0.2/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/testoperator.clusterserviceversion.yaml
  • kind-config/kind-config-2node.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.0.2/manifests/bundle.configmap.yaml
  • testdata/images/bundles/test-operator/v1.2.0/metadata/properties.yaml
  • testdata/images/bundles/test-operator/v1.0.3/manifests/testoperator.clusterserviceversion.yaml
  • hack/kind-config/containerd/certs.d/go.mod
  • testdata/images/bundles/test-operator/v1.0.2/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/bundles/own-namespace-operator/v1.0.0/manifests/ownnamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/single-namespace-operator/v1.0.0/manifests/singlenamespaceoperator.clusterserviceversion.yaml
  • testdata/images/bundles/large-crd-operator/v1.0.0/manifests/largecrdoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.2.0/manifests/testoperator.clusterserviceversion.yaml
  • testdata/images/bundles/test-operator/v1.0.0/metadata/annotations.yaml
  • testdata/images/bundles/test-operator/v1.0.0/manifests/olm.operatorframework.com_olme2etest.yaml
  • testdata/images/catalogs/test-catalog/v2/configs/.indexignore
  • test/helpers/feature_gates.go
  • test/helpers/helpers.go
✅ Files skipped from review due to trivial changes (10)
  • internal/testing/bundle/csv/builder.go
  • internal/testing/bundle/fs/bundlefs.go
  • requirements.txt
  • internal/operator-controller/rukpak/render/registryv1/registryv1_test.go
  • internal/testing/bundle/csv/builder_test.go
  • testdata/build-test-registry.sh
  • test/e2e/features/user-managed-fields.feature
  • internal/operator-controller/applier/provider_test.go
  • internal/operator-controller/rukpak/render/registryv1/generators/generators_test.go
  • internal/operator-controller/rukpak/render/registryv1/validators/validator_test.go
🚧 Files skipped from review as they are similar to previous changes (8)
  • internal/operator-controller/config/config_test.go
  • test/e2e/features/uninstall.feature
  • internal/operator-controller/rukpak/bundle/source/source_test.go
  • test/e2e/steps/hooks.go
  • openshift/tests-extension/go.mod
  • test/internal/catalog/catalog_test.go
  • internal/operator-controller/rukpak/render/render_test.go
  • test/e2e/features/install.feature

Comment on lines +15 to +16
- \$CONTAINER_RUNTIME - container runtime to use (e.g. docker, podman).
- \$CLUSTER_REGISTRY_HOST - registry address accessible from inside the cluster.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

for rt in docker podman; do
  if command -v "$rt" >/dev/null 2>&1; then
    echo "== $rt =="
    if "$rt" build --help | grep -q -- '--provenance'; then
      echo "supports --provenance"
    else
      echo "does NOT support --provenance"
    fi
  fi
done

Repository: openshift/operator-framework-operator-controller

Length of output: 74


🏁 Script executed:

# First, locate and examine the setup.sh file
fd setup.sh

Repository: openshift/operator-framework-operator-controller

Length of output: 130


🏁 Script executed:

# Read the setup.sh file to check lines 15-16, 84, and 140
cat -n test/extension-developer-e2e/setup.sh | head -150

Repository: openshift/operator-framework-operator-controller

Length of output: 5500


🌐 Web query:

Podman build --provenance flag support

💡 Result:

Podman does not support the --provenance flag for podman build. Official Podman documentation for versions like v4.4, stable, and v5.2.2 lists extensive build options (e.g., --label, --timestamp, --sbom, --http-proxy) but no --provenance flag. A GitHub issue from Cloudflare's workers-sdk (June 2025) confirms Podman rejects --provenance as an unknown flag, while Docker supports it for SLSA provenance attestations. Podman release notes up to v5.7.0 (Nov 2025) mention no addition of this flag. As of 2026-04-25, use Buildah directly for advanced build features or Docker for --provenance support. Podman focuses on SBOM via --sbom flags instead.

Citations:


Guard --provenance=false usage by runtime to avoid Podman breakage.

The script documents Podman as a supported runtime, but --provenance=false is applied unconditionally at lines 84 and 140. Podman does not support the --provenance flag and will fail with unsupported-flag errors. Apply the flag only when using Docker.

🛠️ Suggested fix (runtime-gated build flags)
 operator_sdk="${OPERATOR_SDK}"
 container_tool="${CONTAINER_RUNTIME}"
 cluster_registry_host="${CLUSTER_REGISTRY_HOST}"
+build_flags=()
+if [[ "${container_tool}" == "docker" ]]; then
+  build_flags+=(--provenance=false)
+fi
@@
-  sed -i -e 's/$(CONTAINER_TOOL) build/$(CONTAINER_TOOL) build --provenance=false/' Makefile && \
+  if [[ "${container_tool}" == "docker" ]]; then \
+    sed -i -e 's/$(CONTAINER_TOOL) build/$(CONTAINER_TOOL) build --provenance=false/' Makefile; \
+  fi && \
@@
-${container_tool} build --provenance=false -f "${TMP_ROOT}/catalog.Dockerfile" -t "${catalog_tag}" "${TMP_ROOT}/"
+${container_tool} build "${build_flags[@]}" -f "${TMP_ROOT}/catalog.Dockerfile" -t "${catalog_tag}" "${TMP_ROOT}/"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/extension-developer-e2e/setup.sh` around lines 15 - 16, The script
currently appends the build flag "--provenance=false" unconditionally which
breaks Podman; update the build invocations that use $CONTAINER_RUNTIME (the
commands that pass "--provenance=false") to only include that flag when
CONTAINER_RUNTIME is "docker" (or its explicit docker binary), e.g. compute a
variable like PROVENANCE_FLAG="" and set it to "--provenance=false" when [
"$CONTAINER_RUNTIME" = "docker" ] and then use "$PROVENANCE_FLAG" in the build
commands so Podman runs without the unsupported flag.

@joelanford
Copy link
Copy Markdown
Member

/test okd-scos-images

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 25, 2026

@openshift-bot: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@joelanford
Copy link
Copy Markdown
Member

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Apr 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. kind/sync lgtm Indicates that a PR is ready to be merged. tide/merge-method-merge Denotes a PR that should use a standard merge by tide when it merges.

Projects

None yet

Development

Successfully merging this pull request may close these issues.