Skip to content

NO-ISSUE: Synchronize From Upstream Repositories - #707

Merged
openshift-merge-bot[bot] merged 96 commits into
openshift:mainfrom
openshift-bot:synchronize-upstream
Apr 27, 2026
Merged

NO-ISSUE: Synchronize From Upstream Repositories#707
openshift-merge-bot[bot] merged 96 commits into
openshift:mainfrom
openshift-bot:synchronize-upstream

Conversation

@openshift-bot

@openshift-botopenshift-bot commented Apr 23, 2026

Copy link
Copy Markdown

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

DateCommitAuthorMessage
2026-04-24 15:34:17operator-framework/operator-controller@7277a46dependabot[bot]🌱 Bump golang.org/x/tools from 0.43.0 to 0.44.0 (#2673)
2026-04-24 15:31:22operator-framework/operator-controller@967be14Todd Shorttests: add unit and e2e tests for HTTPS_PROXY support (#2654)
2026-04-23 17:37:46operator-framework/operator-controller@c8585e9dependabot[bot]🌱 Bump platformdirs from 4.9.4 to 4.9.6 (#2671)
2026-04-23 17:35:03operator-framework/operator-controller@6415a1cdependabot[bot]🌱 Bump golang.org/x/mod from 0.34.0 to 0.35.0 (#2670)
2026-04-23 10:46:42operator-framework/operator-controller@a47a0b4dependabot[bot]🌱 Bump github.com/moby/spdystream from 0.5.0 to 0.5.1 (#2669)
2026-04-23 08:53:23operator-framework/operator-controller@c0dc83fJoe Lanford✨ e2e: isolate tests with per-scenario dynamic catalogs (#2651)

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

DateCommitAuthorMessage
2026-04-22 13:53:04openshift/operator-framework-operator-controller@73ac3fddtfranzUPSTREAM: <carry>: Add OpenShift specific files
2026-04-22 13:53:05openshift/operator-framework-operator-controller@7952255Camila MacedoUPSTREAM: <carry>: Add new tests for single/own namespaces install modes
2026-04-22 13:53:06openshift/operator-framework-operator-controller@be123ceCamila MacedoUPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
2026-04-22 13:53:07openshift/operator-framework-operator-controller@dcafc41Camila MacedoUPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp images from openshift/catalogd/manifests.yaml
2026-04-22 13:53:07openshift/operator-framework-operator-controller@2a52f67Todd ShortUPSTREAM: <carry>: Update OCP catalogs to v4.21
2026-04-22 13:53:08openshift/operator-framework-operator-controller@7446900Kui WangUPSTREAM: <carry>: support singleown cases in disconnected
2026-04-22 13:53:08openshift/operator-framework-operator-controller@4bc8b8aKui WangUPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
2026-04-22 13:53:09openshift/operator-framework-operator-controller@e6074c3Camila MacedoUPSTREAM: <carry>: Define Default timeouts and apply their usage accross to avoid flakes
2026-04-22 13:53:09openshift/operator-framework-operator-controller@66c65fcTodd ShortUPSTREAM: <carry>: Update to new feature-gate options in helm
2026-04-22 13:53:10openshift/operator-framework-operator-controller@c21263eCamila MacedoUPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniquess and waiting for k8s cleanups
2026-04-22 13:53:10openshift/operator-framework-operator-controller@1f7b390Camila MacedoUPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comments ( Follow-Up of: 714977c )
2026-04-22 13:53:11openshift/operator-framework-operator-controller@d1798fbKui WangUPSTREAM: <carry>: Update OwnSingle template to use spec.config.inline.watchNamespace
2026-04-22 13:53:11openshift/operator-framework-operator-controller@a5e2177Camila MacedoUPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension uninstall
2026-04-22 13:53:12openshift/operator-framework-operator-controller@1b437a5Kui WangUPSTREAM: <carry>: Add [OTP] to migrated cases
2026-04-22 13:53:13openshift/operator-framework-operator-controller@7d59ccaCamila MacedoUPSTREAM: <carry>: [OTE]: Upgrade dependencies used
2026-04-22 13:53:13openshift/operator-framework-operator-controller@e6afa52Camila MacedoUPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version format
2026-04-22 13:53:14openshift/operator-framework-operator-controller@ca59600Camila MacedoUPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and dependencies
2026-04-22 13:53:15openshift/operator-framework-operator-controller@6295ce6Kui WangUPSTREAM: <carry>: add disconnected environment support with custom prow job for migrated qe cases
2026-04-22 13:53:16openshift/operator-framework-operator-controller@39917f1Jian ZhangUPSTREAM: <carry>: migrate jiazha test cases to OTE
2026-04-22 13:53:16openshift/operator-framework-operator-controller@8c058ebXia ZhaoUPSTREAM: <carry>: migrate clustercatalog case to ote
2026-04-22 13:53:17openshift/operator-framework-operator-controller@f151b4eKui WangUPSTREAM: <carry>: migrate olmv1 QE stress cases
2026-04-22 13:53:17openshift/operator-framework-operator-controller@1dc3edaTodd ShortUPSTREAM: <carry>: Use busybox/httpd to simulate probes
2026-04-22 13:53:18openshift/operator-framework-operator-controller@ac73f68Xia ZhaoUPSTREAM: <carry>: migrate olmv1 QE cases
2026-04-22 13:53:18openshift/operator-framework-operator-controller@b3ca065Kui WangUPSTREAM: <carry>: add agent for olmv1 qe cases
2026-04-22 13:53:18openshift/operator-framework-operator-controller@5ee9f5dTodd ShortUPSTREAM: <carry>: Disable upstream PodDisruptionBudget
2026-04-22 13:53:19openshift/operator-framework-operator-controller@746f5feRashmi GottipatiUPSTREAM: <carry>: Add AGENTS.md for AI code contributions
2026-04-22 13:53:19openshift/operator-framework-operator-controller@77c6b38Rashmi GottipatiUPSTREAM: <carry>: address review comments through addl prompts
2026-04-22 13:53:20openshift/operator-framework-operator-controller@153e40cRashmi GottipatiUPSTREAM: <carry>: addressing some more review comments
2026-04-22 13:53:20openshift/operator-framework-operator-controller@6daa8bcRashmi GottipatiUPSTREAM: <carry>: remove DCO line
2026-04-22 13:53:21openshift/operator-framework-operator-controller@111e025Bruno AndradeUPSTREAM: <carry>: migrate bandrade test cases to OTE
2026-04-22 13:53:21openshift/operator-framework-operator-controller@f41805fBruno AndradeUPSTREAM: <carry>: update metadata
2026-04-22 13:53:22openshift/operator-framework-operator-controller@22d8b59Bruno AndradeUPSTREAM: <carry>: remove originalName
2026-04-22 13:53:22openshift/operator-framework-operator-controller@d522a24Jian ZhangUPSTREAM: <carry>: update 80458's timeout to 180s
2026-04-22 13:53:23openshift/operator-framework-operator-controller@0b3440eJian ZhangUPSTREAM: <carry>: update 83026 to specify the clustercatalog
2026-04-22 13:53:23openshift/operator-framework-operator-controller@34d14a4Catherine Chan-TseUPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
2026-04-22 13:53:24openshift/operator-framework-operator-controller@9efec63Predrag KnezevicUPSTREAM: <carry>: Use oc client for running e2e tests
2026-04-22 13:53:24openshift/operator-framework-operator-controller@14e1a61Predrag KnezevicUPSTREAM: <carry>: Run upstream e2e tests tagged with @catalogd-update
2026-04-22 13:53:25openshift/operator-framework-operator-controller@7b9d84aKui WangUPSTREAM: <carry>: enhance case to make it more stable
2026-04-22 13:53:25openshift/operator-framework-operator-controller@8101ae9Evan HearneUPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:26openshift/operator-framework-operator-controller@fe22048Evan HearneUPSTREAM: <carry>: move sa creation out of buildCurlJob()
2026-04-22 13:53:26openshift/operator-framework-operator-controller@ba5a14cEvan HearneUPSTREAM: <carry>: comment out delete service account
2026-04-22 13:53:26openshift/operator-framework-operator-controller@ee804bfEvan HearneUPSTREAM: <carry>: move defercleanup for sa for LIFO
2026-04-22 13:53:27openshift/operator-framework-operator-controller@41868aeEvan HearneUPSTREAM: <carry>: add polling so job fully deleted before proceed
2026-04-22 13:53:27openshift/operator-framework-operator-controller@5a6c36aLuke MeyerUPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redhat/add-service-account-curl-job"
2026-04-22 13:53:28openshift/operator-framework-operator-controller@7b4c9f0Camila MacedoUPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
2026-04-22 13:53:28openshift/operator-framework-operator-controller@edea496Kui WangUPSTREAM: <carry>: config watchnamespace cases
2026-04-22 13:53:29openshift/operator-framework-operator-controller@d262a58Xia ZhaoUPSTREAM: <carry>: enhance ocp-79770
2026-04-22 13:53:29openshift/operator-framework-operator-controller@ef56866Kui WangUPSTREAM: <carry>: upgrade version support case
2026-04-22 13:53:30openshift/operator-framework-operator-controller@3db44c7Per Goncalves da SilvaUPSTREAM: <carry>: Remove installed condition check from auth preflight test
2026-04-22 13:53:30openshift/operator-framework-operator-controller@f67b8dfPer Goncalves da SilvaUPSTREAM: <carry>: Add openshift/api dependency
2026-04-22 13:53:31openshift/operator-framework-operator-controller@b319bb1Per Goncalves da SilvaUPSTREAM: <carry>: Add boxcutter specific preflight auth test
2026-04-22 13:53:31openshift/operator-framework-operator-controller@522cb2bKui WangUPSTREAM: <carry>: adjust watchnamespace case based on change
2026-04-22 13:53:32openshift/operator-framework-operator-controller@29ef9daCamila MacedoUPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root dir
2026-04-22 13:53:33openshift/operator-framework-operator-controller@0fed203Bruno AndradeUPSTREAM: <carry>: add 83979 automation
2026-04-22 13:53:33openshift/operator-framework-operator-controller@de588bdBruno AndradeUPSTREAM: <carry>: add 85889 automation
2026-04-22 13:53:33openshift/operator-framework-operator-controller@0677d3cPer Goncalves da SilvaUPSTREAM: <carry>: Update test-operator startup script to fix pod probe endpoints
2026-04-22 13:53:34openshift/operator-framework-operator-controller@cffd47fPer Goncalves da SilvaUPSTREAM: <carry>: Fix up own-namespace invalid configuration test
2026-04-22 13:53:34openshift/operator-framework-operator-controller@780b3f5Camila MacedoUPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles instead of openshift-pipelines-operator-rh
2026-04-22 13:53:35openshift/operator-framework-operator-controller@1c96b44Kui WangUPSTREAM: <carry>: adjust sa and permission test cases per new change from boxcutterruntime
2026-04-22 13:53:35openshift/operator-framework-operator-controller@e867918Camila MacedoUPSTREAM: <carry>: Update OCP catalogs to v4.22
2026-04-22 13:53:36openshift/operator-framework-operator-controller@0b80cf9Camila MacedoUPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and dependencies
2026-04-22 13:53:37openshift/operator-framework-operator-controller@b88351bJian ZhangUPSTREAM: <carry>: fix 83026 for TP cluster
2026-04-22 13:53:38openshift/operator-framework-operator-controller@d31e67cKui WangUPSTREAM: <carry>: serviceAccount validation unified across all runtimes
2026-04-22 13:53:38openshift/operator-framework-operator-controller@9f3943fStephen BenjaminUPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
2026-04-22 13:53:39openshift/operator-framework-operator-controller@ac0012cCamila MacedoUPSTREAM: <carry>: Increase install timeout and add diagnostic logging for CE install tests
2026-04-22 13:53:39openshift/operator-framework-operator-controller@2ae413fEvan HearneUPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:40openshift/operator-framework-operator-controller@8bf116dJian ZhangUPSTREAM: <carry>: update OCP-75441 to support multi-arch
2026-04-22 13:53:40openshift/operator-framework-operator-controller@478a5b0Kui WangUPSTREAM: <carry>: deployment config cases
2026-04-22 13:53:41openshift/operator-framework-operator-controller@0eb1038Todd ShortUPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
2026-04-22 13:53:41openshift/operator-framework-operator-controller@d591bedTodd ShortUPSTREAM: <carry>: Update openshift/api and client-go
2026-04-22 13:53:42openshift/operator-framework-operator-controller@5169a85Camila MacedoUPSTREAM: <carry>: Add boxcutter tests
2026-04-22 13:53:42openshift/operator-framework-operator-controller@af8e61dXia ZhaoUPSTREAM: <carry>: enhance QE cases
2026-04-22 13:53:43openshift/operator-framework-operator-controller@8381ec3Daniel FranzUPSTREAM: <carry>: Update quay-operator version to one containing arm64 support
2026-04-22 13:53:43openshift/operator-framework-operator-controller@f1e8159Kui WangUPSTREAM: <carry>: verify volume/volumeMount override
2026-04-22 13:53:44openshift/operator-framework-operator-controller@e7d74f6Jian ZhangUPSTREAM: <carry>: Add long-duration test script and documents
2026-04-22 13:53:44openshift/operator-framework-operator-controller@7d2cac3Todd ShortUPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
2026-04-22 13:53:45openshift/operator-framework-operator-controller@6474a8cCamila MacedoUPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSet in OTE tests
2026-04-22 13:53:45openshift/operator-framework-operator-controller@5f7a011Camila MacedoUPSTREAM: <carry>: Skip incompatible operator test when Boxcutter uses ClusterObjectSet
2026-04-22 13:53:46openshift/operator-framework-operator-controller@c5923fdBruno AndradeUPSTREAM: <carry>: add ocp-87557
2026-04-22 13:53:46openshift/operator-framework-operator-controller@ecaf2f9Francesco GiudiciUPSTREAM: <carry>: Add fgiudici as reviewer
2026-04-22 13:53:47openshift/operator-framework-operator-controller@c07855dCamila MacedoUPSTREAM: <carry>: Remove skip for incompatible operator check after rename of CER
2026-04-22 13:53:47openshift/operator-framework-operator-controller@11baf82Kui WangUPSTREAM: <carry>: Test empty affinity erasure and cleanup
2026-04-22 13:53:48openshift/operator-framework-operator-controller@43598ecCamila MacedoUPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in preflight test
2026-04-22 13:53:48openshift/operator-framework-operator-controller@19eca43Camila MacedoUPSTREAM: <carry>: Expand OTE docs with more comprehensive details
2026-04-22 13:53:49openshift/operator-framework-operator-controller@6a000e1Todd ShortUPSTREAM: <carry>: Disable upstream TLSProfile tests
2026-04-22 13:53:49openshift/operator-framework-operator-controller@7f79c27Camila MacedoUPSTREAM: <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

joelanfordand 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-robotopenshift-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:

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

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

DateCommitAuthorMessage
2026-04-22 13:53:04openshift/operator-framework-operator-controller@73ac3fddtfranzUPSTREAM: <carry>: Add OpenShift specific files
2026-04-22 13:53:05openshift/operator-framework-operator-controller@7952255Camila MacedoUPSTREAM: <carry>: Add new tests for single/own namespaces install modes
2026-04-22 13:53:06openshift/operator-framework-operator-controller@be123ceCamila MacedoUPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
2026-04-22 13:53:07openshift/operator-framework-operator-controller@dcafc41Camila MacedoUPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp images from openshift/catalogd/manifests.yaml
2026-04-22 13:53:07openshift/operator-framework-operator-controller@2a52f67Todd ShortUPSTREAM: <carry>: Update OCP catalogs to v4.21
2026-04-22 13:53:08openshift/operator-framework-operator-controller@7446900Kui WangUPSTREAM: <carry>: support singleown cases in disconnected
2026-04-22 13:53:08openshift/operator-framework-operator-controller@4bc8b8aKui WangUPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
2026-04-22 13:53:09openshift/operator-framework-operator-controller@e6074c3Camila MacedoUPSTREAM: <carry>: Define Default timeouts and apply their usage accross to avoid flakes
2026-04-22 13:53:09openshift/operator-framework-operator-controller@66c65fcTodd ShortUPSTREAM: <carry>: Update to new feature-gate options in helm
2026-04-22 13:53:10openshift/operator-framework-operator-controller@c21263eCamila MacedoUPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniquess and waiting for k8s cleanups
2026-04-22 13:53:10openshift/operator-framework-operator-controller@1f7b390Camila MacedoUPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comments ( Follow-Up of: 714977c )
2026-04-22 13:53:11openshift/operator-framework-operator-controller@d1798fbKui WangUPSTREAM: <carry>: Update OwnSingle template to use spec.config.inline.watchNamespace
2026-04-22 13:53:11openshift/operator-framework-operator-controller@a5e2177Camila MacedoUPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension uninstall
2026-04-22 13:53:12openshift/operator-framework-operator-controller@1b437a5Kui WangUPSTREAM: <carry>: Add [OTP] to migrated cases
2026-04-22 13:53:13openshift/operator-framework-operator-controller@7d59ccaCamila MacedoUPSTREAM: <carry>: [OTE]: Upgrade dependencies used
2026-04-22 13:53:13openshift/operator-framework-operator-controller@e6afa52Camila MacedoUPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version format
2026-04-22 13:53:14openshift/operator-framework-operator-controller@ca59600Camila MacedoUPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and dependencies
2026-04-22 13:53:15openshift/operator-framework-operator-controller@6295ce6Kui WangUPSTREAM: <carry>: add disconnected environment support with custom prow job for migrated qe cases
2026-04-22 13:53:16openshift/operator-framework-operator-controller@39917f1Jian ZhangUPSTREAM: <carry>: migrate jiazha test cases to OTE
2026-04-22 13:53:16openshift/operator-framework-operator-controller@8c058ebXia ZhaoUPSTREAM: <carry>: migrate clustercatalog case to ote
2026-04-22 13:53:17openshift/operator-framework-operator-controller@f151b4eKui WangUPSTREAM: <carry>: migrate olmv1 QE stress cases
2026-04-22 13:53:17openshift/operator-framework-operator-controller@1dc3edaTodd ShortUPSTREAM: <carry>: Use busybox/httpd to simulate probes
2026-04-22 13:53:18openshift/operator-framework-operator-controller@ac73f68Xia ZhaoUPSTREAM: <carry>: migrate olmv1 QE cases
2026-04-22 13:53:18openshift/operator-framework-operator-controller@b3ca065Kui WangUPSTREAM: <carry>: add agent for olmv1 qe cases
2026-04-22 13:53:18openshift/operator-framework-operator-controller@5ee9f5dTodd ShortUPSTREAM: <carry>: Disable upstream PodDisruptionBudget
2026-04-22 13:53:19openshift/operator-framework-operator-controller@746f5feRashmi GottipatiUPSTREAM: <carry>: Add AGENTS.md for AI code contributions
2026-04-22 13:53:19openshift/operator-framework-operator-controller@77c6b38Rashmi GottipatiUPSTREAM: <carry>: address review comments through addl prompts
2026-04-22 13:53:20openshift/operator-framework-operator-controller@153e40cRashmi GottipatiUPSTREAM: <carry>: addressing some more review comments
2026-04-22 13:53:20openshift/operator-framework-operator-controller@6daa8bcRashmi GottipatiUPSTREAM: <carry>: remove DCO line
2026-04-22 13:53:21openshift/operator-framework-operator-controller@111e025Bruno AndradeUPSTREAM: <carry>: migrate bandrade test cases to OTE
2026-04-22 13:53:21openshift/operator-framework-operator-controller@f41805fBruno AndradeUPSTREAM: <carry>: update metadata
2026-04-22 13:53:22openshift/operator-framework-operator-controller@22d8b59Bruno AndradeUPSTREAM: <carry>: remove originalName
2026-04-22 13:53:22openshift/operator-framework-operator-controller@d522a24Jian ZhangUPSTREAM: <carry>: update 80458's timeout to 180s
2026-04-22 13:53:23openshift/operator-framework-operator-controller@0b3440eJian ZhangUPSTREAM: <carry>: update 83026 to specify the clustercatalog
2026-04-22 13:53:23openshift/operator-framework-operator-controller@34d14a4Catherine Chan-TseUPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
2026-04-22 13:53:24openshift/operator-framework-operator-controller@9efec63Predrag KnezevicUPSTREAM: <carry>: Use oc client for running e2e tests
2026-04-22 13:53:24openshift/operator-framework-operator-controller@14e1a61Predrag KnezevicUPSTREAM: <carry>: Run upstream e2e tests tagged with @catalogd-update
2026-04-22 13:53:25openshift/operator-framework-operator-controller@7b9d84aKui WangUPSTREAM: <carry>: enhance case to make it more stable
2026-04-22 13:53:25openshift/operator-framework-operator-controller@8101ae9Evan HearneUPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:26openshift/operator-framework-operator-controller@fe22048Evan HearneUPSTREAM: <carry>: move sa creation out of buildCurlJob()
2026-04-22 13:53:26openshift/operator-framework-operator-controller@ba5a14cEvan HearneUPSTREAM: <carry>: comment out delete service account
2026-04-22 13:53:26openshift/operator-framework-operator-controller@ee804bfEvan HearneUPSTREAM: <carry>: move defercleanup for sa for LIFO
2026-04-22 13:53:27openshift/operator-framework-operator-controller@41868aeEvan HearneUPSTREAM: <carry>: add polling so job fully deleted before proceed
2026-04-22 13:53:27openshift/operator-framework-operator-controller@5a6c36aLuke MeyerUPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redhat/add-service-account-curl-job"
2026-04-22 13:53:28openshift/operator-framework-operator-controller@7b4c9f0Camila MacedoUPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
2026-04-22 13:53:28openshift/operator-framework-operator-controller@edea496Kui WangUPSTREAM: <carry>: config watchnamespace cases
2026-04-22 13:53:29openshift/operator-framework-operator-controller@d262a58Xia ZhaoUPSTREAM: <carry>: enhance ocp-79770
2026-04-22 13:53:29openshift/operator-framework-operator-controller@ef56866Kui WangUPSTREAM: <carry>: upgrade version support case
2026-04-22 13:53:30openshift/operator-framework-operator-controller@3db44c7Per Goncalves da SilvaUPSTREAM: <carry>: Remove installed condition check from auth preflight test
2026-04-22 13:53:30openshift/operator-framework-operator-controller@f67b8dfPer Goncalves da SilvaUPSTREAM: <carry>: Add openshift/api dependency
2026-04-22 13:53:31openshift/operator-framework-operator-controller@b319bb1Per Goncalves da SilvaUPSTREAM: <carry>: Add boxcutter specific preflight auth test
2026-04-22 13:53:31openshift/operator-framework-operator-controller@522cb2bKui WangUPSTREAM: <carry>: adjust watchnamespace case based on change
2026-04-22 13:53:32openshift/operator-framework-operator-controller@29ef9daCamila MacedoUPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root dir
2026-04-22 13:53:33openshift/operator-framework-operator-controller@0fed203Bruno AndradeUPSTREAM: <carry>: add 83979 automation
2026-04-22 13:53:33openshift/operator-framework-operator-controller@de588bdBruno AndradeUPSTREAM: <carry>: add 85889 automation
2026-04-22 13:53:33openshift/operator-framework-operator-controller@0677d3cPer Goncalves da SilvaUPSTREAM: <carry>: Update test-operator startup script to fix pod probe endpoints
2026-04-22 13:53:34openshift/operator-framework-operator-controller@cffd47fPer Goncalves da SilvaUPSTREAM: <carry>: Fix up own-namespace invalid configuration test
2026-04-22 13:53:34openshift/operator-framework-operator-controller@780b3f5Camila MacedoUPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles instead of openshift-pipelines-operator-rh
2026-04-22 13:53:35openshift/operator-framework-operator-controller@1c96b44Kui WangUPSTREAM: <carry>: adjust sa and permission test cases per new change from boxcutterruntime
2026-04-22 13:53:35openshift/operator-framework-operator-controller@e867918Camila MacedoUPSTREAM: <carry>: Update OCP catalogs to v4.22
2026-04-22 13:53:36openshift/operator-framework-operator-controller@0b80cf9Camila MacedoUPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and dependencies
2026-04-22 13:53:37openshift/operator-framework-operator-controller@b88351bJian ZhangUPSTREAM: <carry>: fix 83026 for TP cluster
2026-04-22 13:53:38openshift/operator-framework-operator-controller@d31e67cKui WangUPSTREAM: <carry>: serviceAccount validation unified across all runtimes
2026-04-22 13:53:38openshift/operator-framework-operator-controller@9f3943fStephen BenjaminUPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
2026-04-22 13:53:39openshift/operator-framework-operator-controller@ac0012cCamila MacedoUPSTREAM: <carry>: Increase install timeout and add diagnostic logging for CE install tests
2026-04-22 13:53:39openshift/operator-framework-operator-controller@2ae413fEvan HearneUPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:40openshift/operator-framework-operator-controller@8bf116dJian ZhangUPSTREAM: <carry>: update OCP-75441 to support multi-arch
2026-04-22 13:53:40openshift/operator-framework-operator-controller@478a5b0Kui WangUPSTREAM: <carry>: deployment config cases
2026-04-22 13:53:41openshift/operator-framework-operator-controller@0eb1038Todd ShortUPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
2026-04-22 13:53:41openshift/operator-framework-operator-controller@d591bedTodd ShortUPSTREAM: <carry>: Update openshift/api and client-go
2026-04-22 13:53:42openshift/operator-framework-operator-controller@5169a85Camila MacedoUPSTREAM: <carry>: Add boxcutter tests
2026-04-22 13:53:42openshift/operator-framework-operator-controller@af8e61dXia ZhaoUPSTREAM: <carry>: enhance QE cases
2026-04-22 13:53:43openshift/operator-framework-operator-controller@8381ec3Daniel FranzUPSTREAM: <carry>: Update quay-operator version to one containing arm64 support
2026-04-22 13:53:43openshift/operator-framework-operator-controller@f1e8159Kui WangUPSTREAM: <carry>: verify volume/volumeMount override
2026-04-22 13:53:44openshift/operator-framework-operator-controller@e7d74f6Jian ZhangUPSTREAM: <carry>: Add long-duration test script and documents
2026-04-22 13:53:44openshift/operator-framework-operator-controller@7d2cac3Todd ShortUPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
2026-04-22 13:53:45openshift/operator-framework-operator-controller@6474a8cCamila MacedoUPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSet in OTE tests
2026-04-22 13:53:45openshift/operator-framework-operator-controller@5f7a011Camila MacedoUPSTREAM: <carry>: Skip incompatible operator test when Boxcutter uses ClusterObjectSet
2026-04-22 13:53:46openshift/operator-framework-operator-controller@c5923fdBruno AndradeUPSTREAM: <carry>: add ocp-87557
2026-04-22 13:53:46openshift/operator-framework-operator-controller@ecaf2f9Francesco GiudiciUPSTREAM: <carry>: Add fgiudici as reviewer
2026-04-22 13:53:47openshift/operator-framework-operator-controller@c07855dCamila MacedoUPSTREAM: <carry>: Remove skip for incompatible operator check after rename of CER
2026-04-22 13:53:47openshift/operator-framework-operator-controller@11baf82Kui WangUPSTREAM: <carry>: Test empty affinity erasure and cleanup
2026-04-22 13:53:48openshift/operator-framework-operator-controller@43598ecCamila MacedoUPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in preflight test
2026-04-22 13:53:48openshift/operator-framework-operator-controller@19eca43Camila MacedoUPSTREAM: <carry>: Expand OTE docs with more comprehensive details
2026-04-22 13:53:49openshift/operator-framework-operator-controller@6a000e1Todd ShortUPSTREAM: <carry>: Disable upstream TLSProfile tests
2026-04-22 13:53:49openshift/operator-framework-operator-controller@7f79c27Camila MacedoUPSTREAM: <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-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:

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

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

DateCommitAuthorMessage
2026-04-22 13:53:04openshift/operator-framework-operator-controller@73ac3fddtfranzUPSTREAM: <carry>: Add OpenShift specific files
2026-04-22 13:53:05openshift/operator-framework-operator-controller@7952255Camila MacedoUPSTREAM: <carry>: Add new tests for single/own namespaces install modes
2026-04-22 13:53:06openshift/operator-framework-operator-controller@be123ceCamila MacedoUPSTREAM: <carry>: Upgrade OCP image from 4.20 to 4.21
2026-04-22 13:53:07openshift/operator-framework-operator-controller@dcafc41Camila MacedoUPSTREAM: <carry>: [Default Catalog Tests] - Change logic to get ocp images from openshift/catalogd/manifests.yaml
2026-04-22 13:53:07openshift/operator-framework-operator-controller@2a52f67Todd ShortUPSTREAM: <carry>: Update OCP catalogs to v4.21
2026-04-22 13:53:08openshift/operator-framework-operator-controller@7446900Kui WangUPSTREAM: <carry>: support singleown cases in disconnected
2026-04-22 13:53:08openshift/operator-framework-operator-controller@4bc8b8aKui WangUPSTREAM: <carry>: fix cases 81696 and 74618 for product code changes
2026-04-22 13:53:09openshift/operator-framework-operator-controller@e6074c3Camila MacedoUPSTREAM: <carry>: Define Default timeouts and apply their usage accross to avoid flakes
2026-04-22 13:53:09openshift/operator-framework-operator-controller@66c65fcTodd ShortUPSTREAM: <carry>: Update to new feature-gate options in helm
2026-04-22 13:53:10openshift/operator-framework-operator-controller@c21263eCamila MacedoUPSTREAM: <carry>: Fix flake for single/own ns tests by ensuring uniquess and waiting for k8s cleanups
2026-04-22 13:53:10openshift/operator-framework-operator-controller@1f7b390Camila MacedoUPSTREAM: <carry>: [OTE]: Enhance single/own ns based on review comments ( Follow-Up of: 714977c )
2026-04-22 13:53:11openshift/operator-framework-operator-controller@d1798fbKui WangUPSTREAM: <carry>: Update OwnSingle template to use spec.config.inline.watchNamespace
2026-04-22 13:53:11openshift/operator-framework-operator-controller@a5e2177Camila MacedoUPSTREAM: <carry>: [OTE]: Add webhook cleanup validation on extension uninstall
2026-04-22 13:53:12openshift/operator-framework-operator-controller@1b437a5Kui WangUPSTREAM: <carry>: Add [OTP] to migrated cases
2026-04-22 13:53:13openshift/operator-framework-operator-controller@7d59ccaCamila MacedoUPSTREAM: <carry>: [OTE]: Upgrade dependencies used
2026-04-22 13:53:13openshift/operator-framework-operator-controller@e6afa52Camila MacedoUPSTREAM: <carry>: fix(OTE): fix OpenShift Kubernetes replace version format
2026-04-22 13:53:14openshift/operator-framework-operator-controller@ca59600Camila MacedoUPSTREAM: <carry>: [Default Catalog Tests] Upgrade go 1.24.6 and dependencies
2026-04-22 13:53:15openshift/operator-framework-operator-controller@6295ce6Kui WangUPSTREAM: <carry>: add disconnected environment support with custom prow job for migrated qe cases
2026-04-22 13:53:16openshift/operator-framework-operator-controller@39917f1Jian ZhangUPSTREAM: <carry>: migrate jiazha test cases to OTE
2026-04-22 13:53:16openshift/operator-framework-operator-controller@8c058ebXia ZhaoUPSTREAM: <carry>: migrate clustercatalog case to ote
2026-04-22 13:53:17openshift/operator-framework-operator-controller@f151b4eKui WangUPSTREAM: <carry>: migrate olmv1 QE stress cases
2026-04-22 13:53:17openshift/operator-framework-operator-controller@1dc3edaTodd ShortUPSTREAM: <carry>: Use busybox/httpd to simulate probes
2026-04-22 13:53:18openshift/operator-framework-operator-controller@ac73f68Xia ZhaoUPSTREAM: <carry>: migrate olmv1 QE cases
2026-04-22 13:53:18openshift/operator-framework-operator-controller@b3ca065Kui WangUPSTREAM: <carry>: add agent for olmv1 qe cases
2026-04-22 13:53:18openshift/operator-framework-operator-controller@5ee9f5dTodd ShortUPSTREAM: <carry>: Disable upstream PodDisruptionBudget
2026-04-22 13:53:19openshift/operator-framework-operator-controller@746f5feRashmi GottipatiUPSTREAM: <carry>: Add AGENTS.md for AI code contributions
2026-04-22 13:53:19openshift/operator-framework-operator-controller@77c6b38Rashmi GottipatiUPSTREAM: <carry>: address review comments through addl prompts
2026-04-22 13:53:20openshift/operator-framework-operator-controller@153e40cRashmi GottipatiUPSTREAM: <carry>: addressing some more review comments
2026-04-22 13:53:20openshift/operator-framework-operator-controller@6daa8bcRashmi GottipatiUPSTREAM: <carry>: remove DCO line
2026-04-22 13:53:21openshift/operator-framework-operator-controller@111e025Bruno AndradeUPSTREAM: <carry>: migrate bandrade test cases to OTE
2026-04-22 13:53:21openshift/operator-framework-operator-controller@f41805fBruno AndradeUPSTREAM: <carry>: update metadata
2026-04-22 13:53:22openshift/operator-framework-operator-controller@22d8b59Bruno AndradeUPSTREAM: <carry>: remove originalName
2026-04-22 13:53:22openshift/operator-framework-operator-controller@d522a24Jian ZhangUPSTREAM: <carry>: update 80458's timeout to 180s
2026-04-22 13:53:23openshift/operator-framework-operator-controller@0b3440eJian ZhangUPSTREAM: <carry>: update 83026 to specify the clustercatalog
2026-04-22 13:53:23openshift/operator-framework-operator-controller@34d14a4Catherine Chan-TseUPSTREAM: <carry>: Update to golang 1.25 and ocp 4.22
2026-04-22 13:53:24openshift/operator-framework-operator-controller@9efec63Predrag KnezevicUPSTREAM: <carry>: Use oc client for running e2e tests
2026-04-22 13:53:24openshift/operator-framework-operator-controller@14e1a61Predrag KnezevicUPSTREAM: <carry>: Run upstream e2e tests tagged with @catalogd-update
2026-04-22 13:53:25openshift/operator-framework-operator-controller@7b9d84aKui WangUPSTREAM: <carry>: enhance case to make it more stable
2026-04-22 13:53:25openshift/operator-framework-operator-controller@8101ae9Evan HearneUPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:26openshift/operator-framework-operator-controller@fe22048Evan HearneUPSTREAM: <carry>: move sa creation out of buildCurlJob()
2026-04-22 13:53:26openshift/operator-framework-operator-controller@ba5a14cEvan HearneUPSTREAM: <carry>: comment out delete service account
2026-04-22 13:53:26openshift/operator-framework-operator-controller@ee804bfEvan HearneUPSTREAM: <carry>: move defercleanup for sa for LIFO
2026-04-22 13:53:27openshift/operator-framework-operator-controller@41868aeEvan HearneUPSTREAM: <carry>: add polling so job fully deleted before proceed
2026-04-22 13:53:27openshift/operator-framework-operator-controller@5a6c36aLuke MeyerUPSTREAM: <carry>: Revert "Merge pull request #594 from ehearne-redhat/add-service-account-curl-job"
2026-04-22 13:53:28openshift/operator-framework-operator-controller@7b4c9f0Camila MacedoUPSTREAM: <carry>: Remove openshift-redhat-marketplace catalog tests
2026-04-22 13:53:28openshift/operator-framework-operator-controller@edea496Kui WangUPSTREAM: <carry>: config watchnamespace cases
2026-04-22 13:53:29openshift/operator-framework-operator-controller@d262a58Xia ZhaoUPSTREAM: <carry>: enhance ocp-79770
2026-04-22 13:53:29openshift/operator-framework-operator-controller@ef56866Kui WangUPSTREAM: <carry>: upgrade version support case
2026-04-22 13:53:30openshift/operator-framework-operator-controller@3db44c7Per Goncalves da SilvaUPSTREAM: <carry>: Remove installed condition check from auth preflight test
2026-04-22 13:53:30openshift/operator-framework-operator-controller@f67b8dfPer Goncalves da SilvaUPSTREAM: <carry>: Add openshift/api dependency
2026-04-22 13:53:31openshift/operator-framework-operator-controller@b319bb1Per Goncalves da SilvaUPSTREAM: <carry>: Add boxcutter specific preflight auth test
2026-04-22 13:53:31openshift/operator-framework-operator-controller@522cb2bKui WangUPSTREAM: <carry>: adjust watchnamespace case based on change
2026-04-22 13:53:32openshift/operator-framework-operator-controller@29ef9daCamila MacedoUPSTREAM: <carry>: fix(ote): Use as operator-controller dep from root dir
2026-04-22 13:53:33openshift/operator-framework-operator-controller@0fed203Bruno AndradeUPSTREAM: <carry>: add 83979 automation
2026-04-22 13:53:33openshift/operator-framework-operator-controller@de588bdBruno AndradeUPSTREAM: <carry>: add 85889 automation
2026-04-22 13:53:33openshift/operator-framework-operator-controller@0677d3cPer Goncalves da SilvaUPSTREAM: <carry>: Update test-operator startup script to fix pod probe endpoints
2026-04-22 13:53:34openshift/operator-framework-operator-controller@cffd47fPer Goncalves da SilvaUPSTREAM: <carry>: Fix up own-namespace invalid configuration test
2026-04-22 13:53:34openshift/operator-framework-operator-controller@780b3f5Camila MacedoUPSTREAM: <carry>: Preflight tests use in-cluster catalog and bundles instead of openshift-pipelines-operator-rh
2026-04-22 13:53:35openshift/operator-framework-operator-controller@1c96b44Kui WangUPSTREAM: <carry>: adjust sa and permission test cases per new change from boxcutterruntime
2026-04-22 13:53:35openshift/operator-framework-operator-controller@e867918Camila MacedoUPSTREAM: <carry>: Update OCP catalogs to v4.22
2026-04-22 13:53:36openshift/operator-framework-operator-controller@0b80cf9Camila MacedoUPSTREAM: <carry>: chore(OTE and Default Catalog Tests) Update go and dependencies
2026-04-22 13:53:37openshift/operator-framework-operator-controller@b88351bJian ZhangUPSTREAM: <carry>: fix 83026 for TP cluster
2026-04-22 13:53:38openshift/operator-framework-operator-controller@d31e67cKui WangUPSTREAM: <carry>: serviceAccount validation unified across all runtimes
2026-04-22 13:53:38openshift/operator-framework-operator-controller@9f3943fStephen BenjaminUPSTREAM: <carry>: Fix OLMv1 test operator to listen on IPv6
2026-04-22 13:53:39openshift/operator-framework-operator-controller@ac0012cCamila MacedoUPSTREAM: <carry>: Increase install timeout and add diagnostic logging for CE install tests
2026-04-22 13:53:39openshift/operator-framework-operator-controller@2ae413fEvan HearneUPSTREAM: <carry>: add service account to curl job
2026-04-22 13:53:40openshift/operator-framework-operator-controller@8bf116dJian ZhangUPSTREAM: <carry>: update OCP-75441 to support multi-arch
2026-04-22 13:53:40openshift/operator-framework-operator-controller@478a5b0Kui WangUPSTREAM: <carry>: deployment config cases
2026-04-22 13:53:41openshift/operator-framework-operator-controller@0eb1038Todd ShortUPSTREAM: <carry>: Add OTE tests for OLMv1 DeploymentConfig support
2026-04-22 13:53:41openshift/operator-framework-operator-controller@d591bedTodd ShortUPSTREAM: <carry>: Update openshift/api and client-go
2026-04-22 13:53:42openshift/operator-framework-operator-controller@5169a85Camila MacedoUPSTREAM: <carry>: Add boxcutter tests
2026-04-22 13:53:42openshift/operator-framework-operator-controller@af8e61dXia ZhaoUPSTREAM: <carry>: enhance QE cases
2026-04-22 13:53:43openshift/operator-framework-operator-controller@8381ec3Daniel FranzUPSTREAM: <carry>: Update quay-operator version to one containing arm64 support
2026-04-22 13:53:43openshift/operator-framework-operator-controller@f1e8159Kui WangUPSTREAM: <carry>: verify volume/volumeMount override
2026-04-22 13:53:44openshift/operator-framework-operator-controller@e7d74f6Jian ZhangUPSTREAM: <carry>: Add long-duration test script and documents
2026-04-22 13:53:44openshift/operator-framework-operator-controller@7d2cac3Todd ShortUPSTREAM: <carry>: Update grpc in default-catalog-consistency tests
2026-04-22 13:53:45openshift/operator-framework-operator-controller@6474a8cCamila MacedoUPSTREAM: <carry>: Rename ClusterExtensionRevision to ClusterObjectSet in OTE tests
2026-04-22 13:53:45openshift/operator-framework-operator-controller@5f7a011Camila MacedoUPSTREAM: <carry>: Skip incompatible operator test when Boxcutter uses ClusterObjectSet
2026-04-22 13:53:46openshift/operator-framework-operator-controller@c5923fdBruno AndradeUPSTREAM: <carry>: add ocp-87557
2026-04-22 13:53:46openshift/operator-framework-operator-controller@ecaf2f9Francesco GiudiciUPSTREAM: <carry>: Add fgiudici as reviewer
2026-04-22 13:53:47openshift/operator-framework-operator-controller@c07855dCamila MacedoUPSTREAM: <carry>: Remove skip for incompatible operator check after rename of CER
2026-04-22 13:53:47openshift/operator-framework-operator-controller@11baf82Kui WangUPSTREAM: <carry>: Test empty affinity erasure and cleanup
2026-04-22 13:53:48openshift/operator-framework-operator-controller@43598ecCamila MacedoUPSTREAM: <carry>: Fix boxcutter finalizer ResourceNames in preflight test
2026-04-22 13:53:48openshift/operator-framework-operator-controller@19eca43Camila MacedoUPSTREAM: <carry>: Expand OTE docs with more comprehensive details
2026-04-22 13:53:49openshift/operator-framework-operator-controller@6a000e1Todd ShortUPSTREAM: <carry>: Disable upstream TLSProfile tests
2026-04-22 13:53:49openshift/operator-framework-operator-controller@7f79c27Camila MacedoUPSTREAM: <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-botopenshift-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

coderabbitaiBot commented Apr 23, 2026

Copy link
Copy Markdown

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 nameStatusExplanationResolution
Ote Binary Stdout Contract❌ ErrorPull 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⚠️ WarningDocstring 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⚠️ WarningThe 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⚠️ WarningNew 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❓ InconclusivePull 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 nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe 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✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names✅ PassedAll 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✅ PassedThe 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✅ PassedPR 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.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

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 ordervaralpha, beta*channelfori:=rangepkg.channels {
switchpkg.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 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
casestrings.HasPrefix(part, "LargeCRD(") &&strings.HasSuffix(part, ")"):
// LargeCRD(250)
countStr:=part[len("LargeCRD(") : len(part)-1]
count, err:=strconv.Atoi(countStr)
iferr==nil {
opts=append(opts, catalog.WithLargeCRD(count))
}
casestrings.HasPrefix(part, "LargeCRD(") &&strings.HasSuffix(part, ")"):
// LargeCRD(250)
countStr:=part[len("LargeCRD(") : len(part)-1]
count, err:=strconv.Atoi(countStr)
iferr!=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)
iferr:=crane.Push(img, tag, crane.Insecure, crane.WithContext(ctx)); err!=nil {
returnnil, fmt.Errorf("failed to push bundle image %s: %w", tag, err)
}
bundleImageTag:=fmt.Sprintf("%s/bundles/%s:v%s", localRegistry, paramPkgName, bd.version)
iferr:=crane.Push(img, bundleImageTag, crane.Insecure, crane.WithContext(ctx)); err!=nil {
returnnil, 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

/retest

@tmshort

Copy link
Copy Markdown
Contributor

/test e2e-gcp-ovn-upgrade

1 similar comment
@tmshort

Copy link
Copy Markdown
Contributor

/test e2e-gcp-ovn-upgrade

dependabotBot 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

/retest

@openshift-ciopenshift-ciBot removed the lgtm Indicates that a PR is ready to be merged. label Apr 24, 2026

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

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 ordervaralpha, beta*channelDeffori:=rangepkg.channels {
switchpkg.channels[i].name {
case"alpha":
alpha=&pkg.channels[i]
case"beta":
beta=&pkg.channels[i]
}
}
ifalpha==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 threadMakefile
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 threadtest/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
funcparseCatalogTable(table*godog.Table) ([]catalog.PackageOption, error) {
typebundleKeystruct {
pkgstring
versionstring
}
typebundleEntrystruct {
opts []catalog.BundleOption
}
typechannelEntrystruct {
versionstring
replacesstring
}
_, err=k8scliWithInput(substituteScenarioVars(string(yamlContent), sc), "apply", "-f", "-")
iferr!=nil {
returnfmt.Errorf("failed to apply catalog: %v", err)
bundleDefs:=make(map[bundleKey]*bundleEntry)
varbundleOrder []bundleKey
packageChannels:=make(map[string]map[string][]channelEntry)
varpackageOrder []string
packageSeen:=make(map[string]bool)
for_, row:=rangetable.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 {
ifstrings.TrimSpace(contents) !="" {
returnnil, 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)
}
ifpackageChannels[pkg] ==nil {
packageChannels[pkg] =make(map[string][]channelEntry)
}
packageChannels[pkg][channel] =append(packageChannels[pkg][channel], channelEntry{
version: version,
replaces: replaces,
})
}
returnnil
}
varpkgOpts []catalog.PackageOption
for_, pkgName:=rangepackageOrder {
varopts []catalog.PackageOption
// TagCatalogImage adds a new tag to a catalog container image in the local registry using crane.
funcTagCatalogImage(name, oldTag, newTagstring) error {
imageRef:=fmt.Sprintf("%s/%s", os.Getenv("LOCAL_REGISTRY_HOST"), fmt.Sprintf("e2e/%s-catalog:%s", name, oldTag))
returncrane.Tag(imageRef, newTag, crane.Insecure)
for_, bk:=rangebundleOrder {
ifbk.pkg==pkgName {
opts=append(opts, catalog.Bundle(bk.version, bundleDefs[bk].opts...))
}
}
forchName, entries:=rangepackageChannels[pkgName] {
varchOpts []catalog.ChannelOption
for_, e:=rangeentries {
ife.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...))
}
returnpkgOpts, nil
}
// parseCatalogTable parses a Gherkin data table into catalog.PackageOption slices.
// Table columns: package | version | channel | replaces | contents
funcparseCatalogTable(table*godog.Table) ([]catalog.PackageOption, error) {
iflen(table.Rows) <2 {
returnnil, fmt.Errorf("catalog table must include a header row and at least one data row")
}
iflen(table.Rows[0].Cells) <5 {
returnnil, fmt.Errorf("catalog table header must include 5 columns: package, version, channel, replaces, contents")
}
typebundleKeystruct {
pkgstring
versionstring
}
typebundleEntrystruct {
opts []catalog.BundleOption
}
typechannelEntrystruct {
versionstring
replacesstring
}
bundleDefs:=make(map[bundleKey]*bundleEntry)
varbundleOrder []bundleKey
packageChannels:=make(map[string]map[string][]channelEntry)
varpackageOrder []string
packageSeen:=make(map[string]bool)
forrowIdx, row:=rangetable.Rows[1:] { // skip header
iflen(row.Cells) <5 {
returnnil, 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 {
ifstrings.TrimSpace(contents) !="" {
returnnil, 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)
}
ifpackageChannels[pkg] ==nil {
packageChannels[pkg] =make(map[string][]channelEntry)
}
packageChannels[pkg][channel] =append(packageChannels[pkg][channel], channelEntry{
version: version,
replaces: replaces,
})
}
varpkgOpts []catalog.PackageOption
for_, pkgName:=rangepackageOrder {
varopts []catalog.PackageOption
for_, bk:=rangebundleOrder {
ifbk.pkg==pkgName {
opts=append(opts, catalog.Bundle(bk.version, bundleDefs[bk].opts...))
}
}
forchName, entries:=rangepackageChannels[pkgName] {
varchOpts []catalog.ChannelOption
for_, e:=rangeentries {
ife.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...))
}
returnpkgOpts, 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

/retest

tmshortand 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

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

@openshift-ci

Copy link
Copy Markdown
Contributor

@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

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

1 similar comment
@tmshort

Copy link
Copy Markdown
Contributor

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

@tmshort

Copy link
Copy Markdown
Contributor

/assign @tmshort

jianzhangbjzand others added 15 commits April 25, 2026 00:08
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-botopenshift-bot added the lgtm Indicates that a PR is ready to be merged. label Apr 25, 2026
@openshift-ciopenshift-ciBot removed the lgtm Indicates that a PR is ready to be merged. label Apr 25, 2026
@openshift-ci

Copy link
Copy Markdown
Contributor

[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

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

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 bashset -euo pipefail
forrtin docker podman;doifcommand -v "$rt">/dev/null 2>&1;thenecho"== $rt =="if"$rt" build --help | grep -q -- '--provenance';thenecho"supports --provenance"elseecho"does NOT support --provenance"fifidone

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-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-ciopenshift-ciBot added the lgtm Indicates that a PR is ready to be merged. label Apr 25, 2026
@tmshort

Copy link
Copy Markdown
Contributor

/verified by ci/prow/unit

Rationale: 6 upstream commits analyzed.

  • 7277a46 (dependabot[bot]): Pure Go dep bump — golang.org/x/tools 0.43.0→0.44.0
  • 967be14 (tmshort): Bug fix — sets Proxy: http.ProxyFromEnvironment on custom TLS transport in httputil.go, enabling HTTPS_PROXY support for catalog fetching. Accompanied by unit tests (httputil_test.go) and e2e proxy suite. Covered by ci/prow/unit.
  • c8585e9 (dependabot[bot]): Pure Python dep bump — platformdirs 4.9.4→4.9.6 (requirements.txt only)
  • 6415a1c (dependabot[bot]): Pure Go dep bump — golang.org/x/mod 0.34.0→0.35.0
  • a47a0b4 (dependabot[bot]): Pure Go dep bump — github.com/moby/spdystream 0.5.0→0.5.1
  • c0dc83f (joelanford): Test infrastructure only — e2e catalog isolation refactor, no production code changed

All CI jobs passed.

🤖 Generated by Claude Code

@openshift-ci-robotopenshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Apr 27, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@tmshort: This PR has been marked as verified by ci/prow/unit.

Details

In response to this:

/verified by ci/prow/unit

Rationale: 6 upstream commits analyzed.

  • 7277a46 (dependabot[bot]): Pure Go dep bump — golang.org/x/tools 0.43.0→0.44.0
  • 967be14 (tmshort): Bug fix — sets Proxy: http.ProxyFromEnvironment on custom TLS transport in httputil.go, enabling HTTPS_PROXY support for catalog fetching. Accompanied by unit tests (httputil_test.go) and e2e proxy suite. Covered by ci/prow/unit.
  • c8585e9 (dependabot[bot]): Pure Python dep bump — platformdirs 4.9.4→4.9.6 (requirements.txt only)
  • 6415a1c (dependabot[bot]): Pure Go dep bump — golang.org/x/mod 0.34.0→0.35.0
  • a47a0b4 (dependabot[bot]): Pure Go dep bump — github.com/moby/spdystream 0.5.0→0.5.1
  • c0dc83f (joelanford): Test infrastructure only — e2e catalog isolation refactor, no production code changed

All CI jobs passed.

🤖 Generated by Claude Code

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.

@tmshort

Copy link
Copy Markdown
Contributor

The upstream changes are primarily testing-only changes.

@openshift-merge-bot
openshift-merge-botBot merged commit eb20885 into openshift:mainApr 27, 2026
15 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approvedIndicates a PR has been approved by an approver from all required OWNERS files.jira/valid-referenceIndicates that this PR references a valid Jira ticket of any type.kind/synclgtmIndicates that a PR is ready to be merged.tide/merge-method-mergeDenotes a PR that should use a standard merge by tide when it merges.verifiedSignifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

17 participants

@openshift-bot@openshift-ci-robot@tmshort@joelanford@dtfranz@camilamacedo86@kuiwang02@jianzhangbjz@Xia-Zhao-rh@rashmigottipati@bandrade@oceanc80@pedjak@ehearne-redhat@sosiouxme@stbenjam@fgiudici