Skip to content

OCPBUGS-78997: install/0000_00_cluster-version-operator_03_deployment: Disable 1.35 client-go WatchListClient#1355

Open
wking wants to merge 7 commits intoopenshift:mainfrom
wking:tune-client-go
Open

OCPBUGS-78997: install/0000_00_cluster-version-operator_03_deployment: Disable 1.35 client-go WatchListClient#1355
wking wants to merge 7 commits intoopenshift:mainfrom
wking:tune-client-go

Conversation

@wking
Copy link
Member

@wking wking commented Mar 20, 2026

Building on #1282, this lists InOrderInformersBatchProcess, InformerResourceVersion, and WatchListClient as new features in 1.35, and mentions environment variables as a way to turn them off. This gives a demonstration, with:

$ KUBE_FEATURE_WatchListClient=true go test -v . -run ^TestBasic$
...
$ KUBE_FEATURE_WatchListClient=false go test -v ./pkg/webhooks/validation/controller -run ^TestBasic$
...

Try turning all three off, to see if that recovers the CVO's ability to quickly notice version-... Pod completion.

@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Mar 20, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 20, 2026

Walkthrough

This PR updates the Go toolchain from 1.24.0 to 1.25.0, upgrades dependencies (Kubernetes, OpenShift, Prometheus), and introduces major version-based manifest filtering to the cluster-version operator. The implementation adds a MajorVersion field to inclusion configuration, updates manifest loading and filtering logic to track parsed release versions, and includes comprehensive test coverage with version-specific test manifests.

Changes

Cohort / File(s) Summary
Dependency Management
go.mod
Updated Go version to 1.25.0; upgraded Kubernetes dependencies to v0.35.1, OpenShift API/client-go/library-go, and Prometheus client libraries.
Major Version Filtering Core
lib/manifest/manifest.go, pkg/payload/payload.go, pkg/cvo/sync_worker.go
Added MajorVersion *uint64 field to InclusionConfiguration. Updated GetImplicitlyEnabledCapabilities to accept separate update/current configurations with version information. Modified manifest inclusion calls to pass major version derived from parsed release semver.
Manifest Rendering
pkg/payload/render.go
Added loadReleaseVersion helper to parse release version; passes major version into renderDir and manifest inclusion filtering. Updated function signatures to accept and forward major version pointer.
Deployment Configuration
install/0000_00_cluster-version-operator_03_deployment.yaml
Added KUBE_FEATURE_WatchListClient="false" environment variable to cluster-version-operator deployment container.
Major Version Test Data
pkg/cvo/testdata/majorversiontest-v5/release-manifests/*
Added test payload (v5) with five CRD manifests demonstrating version filtering: noversion, version4only, version5only, version4or5, excludeversion3, plus image references and release metadata.
Scenario Testing
pkg/cvo/cvo_scenarios_test.go
Added TestCVO_MajorVersionManifestFiltering verifying major version-based filtering behavior; asserts correct manifest inclusion/exclusion and payload structure for v5 release.
Client Factory Updates
pkg/cvo/cvo_test.go, pkg/cvo/upgradeable_test.go
Changed fake Kubernetes client construction from NewSimpleClientset to NewClientset across multiple test cases.
Signature Compatibility
pkg/cvo/featuregate_integration_test.go
Updated manifest.Include calls to pass additional trailing nil argument matching new function signature.
Payload Unit Tests
pkg/payload/payload_test.go, pkg/payload/render_test.go
Updated test expectations with new ParsedVersion field; added TestRenderDirWithMajorVersionFiltering covering version annotation parsing, comma-separated allows, and negative exclusions.
Expected Test Output
pkg/payload/testdata/TestRenderManifest_expected_cvo_deployment.yaml
Updated expected deployment manifest with KUBE_FEATURE_WatchListClient="false" environment variable.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~28 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 20, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: wking

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

@openshift-ci openshift-ci bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Mar 20, 2026
…client-go features

[1] lists InOrderInformersBatchProcess, InformerResourceVersion, and
WatchListClient as new features in 1.35, and mentions environment
variables as a way to turn them off.  [2] gives a demonstration, with:

  $ KUBE_FEATURE_WatchListClient=true go test -v . -run ^TestBasic$
  ...
  $ KUBE_FEATURE_WatchListClient=false go test -v ./pkg/webhooks/validation/controller -run ^TestBasic$
  ...

Try turning all three off, to see if that recovers the CVO's ability
to quickly notice version-... Pod completion [3].

[1]: https://github.com/kubernetes/kubernetes/blob//v1.35.3/staging/src/k8s.io/client-go/features/known_features.go#L79-L105
[2]: kubernetes/kubernetes#135895 (comment)
[3]: https://redhat.atlassian.net/browse/OCPBUGS-78997
wking added 2 commits March 20, 2026 21:25
…rResourceVersion default

See if allowing this to default back to true breaks the quick
transition into the update.
…InformersBatchProcess default

See if allowing this to default back to true breaks the quick
transition into the update.
@wking
Copy link
Member Author

wking commented Mar 21, 2026

181af31 turned off all three, and its run saw a fast transition:

$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-version-operator/1355/pull-ci-openshift-cluster-version-operator-main-e2e-agnostic-ovn-upgrade-out-of-change/2035135605855227904/artifacts/e2e-agnostic-ovn-upgrade-out-of-change/gather-extra/artifacts/events.json | jq -r '[.items[] | select(.metadata.namespace == "openshift-cluster-version") | (.firstTimestamp // .eventTimestamp // .metadata.creationTimestamp) + " " + (.count | tostring) + " " + (.involvedObject | .kind + " " + .name) + " " + .reason + ": " + .message] | sort[]' | grep 'Pod version-.* Created\|PreconditionsPassed'
2026-03-21T00:31:10Z 1 Pod version--gkm82 Created: Container created
2026-03-21T00:31:11Z 1 Pod version--gkm82 Created: Container created
2026-03-21T00:31:12Z 1 Pod version--gkm82 Created: Container created
2026-03-21T00:31:13Z 1 Pod version--gkm82 Created: Container created
2026-03-21T00:31:14Z 1 Pod version--gkm82 Created: Container created
2026-03-21T00:31:18Z 1 ClusterVersion version PreconditionsPassed: preconditions passed for payload loaded version="4.22.0-0.ci-2026-03-20-232854-test-ci-op-ndty4jri-initial" image="registry.build02.ci.openshift.org/ci-op-ndty4jri/release@sha256:4fdbf520050cfd3b40e7832d0aa20d2629d5cb734c0fd95050fc1f32efe0e477"

So 8s for that transition, which is nice and fast.

02778be re-enabled InformerResourceVersion, and its run failed on an unrelated issue, but

$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-version-operator/1355/pull-ci-openshift-cluster-version-operator-main-e2e-agnostic-ovn-upgrade-out-of-change/2035211505875554304/artifacts/e2e-agnostic-ovn-upgrade-out-of-change/gather-extra/artifacts/events.json | jq -r '[.items[] | select(.metadata.namespace == "openshift-cluster-version") | (.firstTimestamp // .eventTimestamp // .metadata.creationTimestamp) + " " + (.count | tostring) + " " + (.involvedObject | .kind + " " + .name) + " " + .reason + ": " + .message] | sort[]' | grep 'Pod version-.* Created\|PreconditionsPassed'
2026-03-21T05:38:46Z 1 Pod version--gwlts Created: Container created
2026-03-21T05:38:46Z 1 Pod version--gwlts Created: Container created
2026-03-21T05:38:47Z 1 Pod version--gwlts Created: Container created
2026-03-21T05:38:48Z 1 Pod version--gwlts Created: Container created
2026-03-21T05:38:49Z 1 Pod version--gwlts Created: Container created
2026-03-21T05:38:53Z 1 ClusterVersion version PreconditionsPassed: preconditions passed for payload loaded version="4.22.0-0.ci-2026-03-21-043032-test-ci-op-hf29b362-initial" image="registry.build02.ci.openshift.org/ci-op-hf29b362/release@sha256:9bdf03c3f3bd6a27c67aa4751eaeb73f807f394af1a5bcb8f74a7c8c458206aa"

So 7s, again fast. I'll enable InOrderInformersBatchProcess next in 81ae26c, and we'll see how that goes...

@wking
Copy link
Member Author

wking commented Mar 21, 2026

81ae26c re-enabled InOrderInformersBatchProcess (so it's just WatchListClient still disabled), and it's still fast:

$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-version-operator/1355/pull-ci-openshift-cluster-version-operator-main-e2e-agnostic-ovn-upgrade-out-of-change/2035380696331063296/artifacts/e2e-agnostic-ovn-upgrade-out-of-change/gather-extra/artifacts/events.json | jq -r '[.items[] | select(.metadata.namespace == "openshift-cluster-version") | (.firstTimestamp // .eventTimestamp // .metadata.creationTimestamp) + " " + (.count | tostring) + " " + (.involvedObject | .kind + " " + .name) + " " + .reason + ": " + .message] | sort[]' | grep 'Pod version-.* Created\|PreconditionsPassed'
2026-03-21T16:45:58Z 1 Pod version--nk2g8 Created: Container created
2026-03-21T16:45:58Z 1 Pod version--nk2g8 Created: Container created
2026-03-21T16:46:00Z 1 Pod version--nk2g8 Created: Container created
2026-03-21T16:46:00Z 1 Pod version--nk2g8 Created: Container created
2026-03-21T16:46:02Z 1 Pod version--nk2g8 Created: Container created
2026-03-21T16:46:05Z 1 ClusterVersion version PreconditionsPassed: preconditions passed for payload loaded version="4.22.0-0.ci-2026-03-21-154745-test-ci-op-w443i41i-initial" image="registry.build02.ci.openshift.org/ci-op-w443i41i/release@sha256:df457662d482698692801a7f73cc92c71b3779ce4a466507f5c5b34752e472ad"

So it's just enabling WatchListClient that makes the CVO's version-... Pod watch slow.

@wking wking changed the title WIP: install/0000_00_cluster-version-operator_03_deployment: Disable 1.35 client-go features OCPBUGS-78997: install/0000_00_cluster-version-operator_03_deployment: Disable 1.35 client-go features Mar 21, 2026
@openshift-ci openshift-ci bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Mar 21, 2026
@openshift-ci-robot openshift-ci-robot added jira/severity-important Referenced Jira bug's severity is important for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. labels Mar 21, 2026
@openshift-ci-robot
Copy link
Contributor

@wking: This pull request references Jira Issue OCPBUGS-78997, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.22.0) matches configured target version for branch (4.22.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Building on #1282, this lists InOrderInformersBatchProcess, InformerResourceVersion, and WatchListClient as new features in 1.35, and mentions environment variables as a way to turn them off. This gives a demonstration, with:

$ KUBE_FEATURE_WatchListClient=true go test -v . -run ^TestBasic$
...
$ KUBE_FEATURE_WatchListClient=false go test -v ./pkg/webhooks/validation/controller -run ^TestBasic$
...

Try turning all three off, to see if that recovers the CVO's ability to quickly notice version-... Pod completion.

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.

@wking wking changed the title OCPBUGS-78997: install/0000_00_cluster-version-operator_03_deployment: Disable 1.35 client-go features OCPBUGS-78997: install/0000_00_cluster-version-operator_03_deployment: Disable 1.35 client-go WatchListClient Mar 21, 2026
…te fixture

Catch up with the previous few commits, that added this environment
variable to the install/ directory.
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
pkg/payload/render.go (1)

290-293: Normalize release.Version before semver parsing for consistency with pkg/version/version.go.

semver.Parse rejects v1.2.3, but the existing normalization convention in pkg/version/version.go:16 trims the leading v before parsing. Current release-metadata fixtures don't have v-prefixed versions, but this code path should follow the same pattern for consistency and resilience.

Suggested fix
-	parsedVersion, err := semver.Parse(release.Version)
+	parsedVersion, err := semver.Parse(strings.TrimPrefix(release.Version, "v"))

Note: pkg/payload/payload.go:290 and :372 have the same pattern—consider applying this normalization consistently across all version parsing in the payload module.

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

In `@pkg/payload/render.go` around lines 290 - 293, The semver.Parse call should
first normalize release.Version by stripping a leading "v" (same convention used
in pkg/version/version.go) before parsing; update the code around parsedVersion
:= semver.Parse(release.Version) to normalize release.Version (e.g., use
strings.TrimPrefix(release.Version, "v")) and then call semver.Parse on the
trimmed value, and apply the same normalization to the other payload parsing
sites that use semver.Parse (the similar occurrences in pkg/payload/payload.go
referenced around lines ~290 and ~372) so all version parsing is consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@go.mod`:
- Line 3: The go.mod currently specifies an invalid Go version "go 1.25.0";
update the module directive to a released Go version (for example "go 1.24" or
"go 1.24.0") so builds use a valid toolchain; locate the `go 1.25.0` line in
go.mod and replace it with a supported release string.

In `@lib/manifest/manifest.go`:
- Around line 92-96: The code dereferences
currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities without a
nil check; update the logic around newImplicitlyEnabled in manifest.go to first
check if currentManifestInclusionConfiguration.Capabilities is non-nil (and
treat EnabledCapabilities as empty when nil), e.g. construct a safeSet for
enabled capabilities only when Capabilities != nil, and use that safeSet in the
Difference(...) call so you never directly access
Capabilities.EnabledCapabilities when Capabilities is nil; adjust the Difference
call that currently references
currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities to use
the safeSet variable instead.

In
`@pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_30_version-5-only.yaml`:
- Around line 4-12: The CRD fixture's metadata.name must follow Kubernetes spec
(metadata.name == spec.names.plural + "." + spec.group), so change the CRD in
pkg/cvo/testdata/.../0000_30_version-5-only.yaml to set metadata.name to
"version5onlies.test.io" (matching spec.names.plural and spec.group); then
update the test expectations in TestCVO_MajorVersionManifestFiltering
(cvo_scenarios_test.go) to look for "version5onlies" (or the full name if the
test asserts full resource names) and adjust any other CRD fixtures in the same
testdata directory that currently use singular names to use "<plural>.<group>"
format so tests and fixtures remain consistent.

---

Nitpick comments:
In `@pkg/payload/render.go`:
- Around line 290-293: The semver.Parse call should first normalize
release.Version by stripping a leading "v" (same convention used in
pkg/version/version.go) before parsing; update the code around parsedVersion :=
semver.Parse(release.Version) to normalize release.Version (e.g., use
strings.TrimPrefix(release.Version, "v")) and then call semver.Parse on the
trimmed value, and apply the same normalization to the other payload parsing
sites that use semver.Parse (the similar occurrences in pkg/payload/payload.go
referenced around lines ~290 and ~372) so all version parsing is consistent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c4bc4c7d-f180-4e55-86d4-cb421c68b4d5

📥 Commits

Reviewing files that changed from the base of the PR and between 9f23899 and a2ed8ce.

⛔ Files ignored due to path filters (279)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/gogo/protobuf/AUTHORS is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/CONTRIBUTORS is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/Makefile is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/clone.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/custom_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/decode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/deprecated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/discard.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/duration.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/duration_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/encode.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/encode_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/equal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/extensions.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/extensions_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/lib.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/lib_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/message_set.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/pointer_reflect.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/properties.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/properties_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/skip_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/table_marshal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/table_merge.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/table_unmarshal.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/text.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/text_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/text_parser.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/timestamp.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/wrappers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/format/format.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/gomega_dsl.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/internal/assertion.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/internal/async_assertion.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/internal/duration_bundle.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/internal/gomega.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/internal/polling_signal_error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/internal/vetoptdesc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/and.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_a_directory.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_false_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_identical_to.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_true_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/consist_of.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/equal_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_each_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_exact_elements.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_field.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_key_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_len_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/have_value.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_error_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_json_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/not.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/or.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/panic_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/receive_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/satisfy_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/succeed_matcher.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/type_support.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/matchers/with_transform.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/onsi/gomega/types/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_apiserver.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_authentication.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_infrastructure.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_ingress.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_insights.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-CustomNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-Default.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-DevPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-OKD.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-TechPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-CustomNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Default.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-DevPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-OKD.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-TechPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-OKD.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_ingresses.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_insightsdatagathers-DevPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_insightsdatagathers-TechPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_insightsdatagathers.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_networks.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_openshift-controller-manager_01_builds.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/register.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_backup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_crio_credential_provider_config.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_insights.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha2/types_insights.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/config/v1alpha2/zz_generated.featuregated-crd-manifests.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/features/features.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/features/legacyfeaturegates.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/features/util.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/image/v1/generated.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/image/v1/generated.protomessage.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_network.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/register.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/types_clusterapi.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversionoperators-DevPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversionoperators-TechPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversionoperators.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_10_etcd_01_etcdbackups-CustomNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_10_etcd_01_etcdbackups-TechPreviewNoUpgrade.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_10_etcd_01_etcdbackups.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_30_cluster-api_01_clusterapis.crd.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/security/v1/generated.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/api/security/v1/generated.protomessage.pb.go is excluded by !**/*.pb.go, !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/acceptrisk.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/alibabacloudplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/alibabacloudresourcetag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserver.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverencryption.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiservernamedservingcert.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverservingcerts.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/audit.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/auditcustomrule.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/authentication.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/authenticationspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/authenticationstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsdnsspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsingressspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awskmsconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsplatformspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsresourcetag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsserviceendpoint.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/azureplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/azureresourcetag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/baremetalplatformloadbalancer.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/baremetalplatformspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/baremetalplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/basicauthidentityprovider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/build.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/builddefaults.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/buildoverrides.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/buildspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/cloudcontrollermanagerstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/cloudloadbalancerconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/cloudloadbalancerips.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clustercondition.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterimagepolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterimagepolicyspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterimagepolicystatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusternetworkentry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusteroperator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusteroperatorstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusteroperatorstatuscondition.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterversion.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterversioncapabilitiesspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterversioncapabilitiesstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterversionspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/clusterversionstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/componentoverride.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/componentroutespec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/componentroutestatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/conditionalupdate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/conditionalupdaterisk.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/configmapfilereference.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/configmapnamereference.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/console.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/consoleauthentication.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/consolespec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/consolestatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/custom.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/customfeaturegates.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/customtlsprofile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/deprecatedwebhooktokenauthenticator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/dns.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/dnsplatformspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/dnsspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/dnszone.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/equinixmetalplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/externalipconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/externalippolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/externalplatformspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/externalplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/extramapping.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/featuregate.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/featuregateattributes.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/featuregatedetails.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/featuregateselection.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/featuregatestatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gatherconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gathererconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gatherers.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gcpplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gcpresourcelabel.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gcpresourcetag.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/githubidentityprovider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/gitlabidentityprovider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/googleidentityprovider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/htpasswdidentityprovider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/hubsource.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/hubsourcestatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/ibmcloudplatformspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/ibmcloudplatformstatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/ibmcloudserviceendpoint.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/identityprovider.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/identityproviderconfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/image.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagecontentpolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagecontentpolicyspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagedigestmirrors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagedigestmirrorset.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagedigestmirrorsetspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagelabel.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagepolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagepolicyfulciocawithrekorrootoftrust.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagepolicypkirootoftrust.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagepolicypublickeyrootoftrust.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagepolicyspec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagepolicystatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagesigstoreverificationpolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagespec.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagestatus.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagetagmirrors.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagetagmirrorset.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/imagetagmirrorsetspec.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (21)
  • go.mod
  • install/0000_00_cluster-version-operator_03_deployment.yaml
  • lib/manifest/manifest.go
  • pkg/cvo/cvo_scenarios_test.go
  • pkg/cvo/cvo_test.go
  • pkg/cvo/featuregate_integration_test.go
  • pkg/cvo/sync_worker.go
  • pkg/cvo/testdata/majorversiontest-v5/manifests/.gitkeep
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_10_no-version.yaml
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_20_version-4-only.yaml
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_30_version-5-only.yaml
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_40_version-4-or-5.yaml
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_50_exclude-version-3.yaml
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/image-references
  • pkg/cvo/testdata/majorversiontest-v5/release-manifests/release-metadata
  • pkg/cvo/upgradeable_test.go
  • pkg/payload/payload.go
  • pkg/payload/payload_test.go
  • pkg/payload/render.go
  • pkg/payload/render_test.go
  • pkg/payload/testdata/TestRenderManifest_expected_cvo_deployment.yaml

module github.com/openshift/cluster-version-operator

go 1.24.0
go 1.25.0
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Verify Go 1.25.0 exists and check its release status

# Check if Go 1.25.0 is available
curl -s https://go.dev/dl/?mode=json | jq -r '.[].version' | grep -E '^go1\.25\.0$'

# Check Go release page for 1.25.0 details
curl -s https://go.dev/doc/devel/release.html | grep -A5 "go1.25"

Repository: openshift/cluster-version-operator

Length of output: 60


Go version 1.25.0 does not appear to be a valid release.

The directive go 1.25.0 in go.mod references a Go version that does not exist in the official Go releases. This will cause build failures. Use a valid Go version (e.g., 1.24.0 or another released version).

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

In `@go.mod` at line 3, The go.mod currently specifies an invalid Go version "go
1.25.0"; update the module directive to a released Go version (for example "go
1.24" or "go 1.24.0") so builds use a valid toolchain; locate the `go 1.25.0`
line in go.mod and replace it with a supported release string.

Comment on lines 92 to 96
newImplicitlyEnabled := sets.New[configv1.ClusterVersionCapability](updateManifest.GetManifestCapabilities()...).
Difference(sets.New[configv1.ClusterVersionCapability](currentManifest.GetManifestCapabilities()...)).
Difference(currentImplicitlyEnabled).
Difference(sets.New[configv1.ClusterVersionCapability](manifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
Difference(sets.New[configv1.ClusterVersionCapability](currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
ret = ret.Union(newImplicitlyEnabled)
Copy link

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:

#!/bin/bash
# Verify how GetImplicitlyEnabledCapabilities is called and whether Capabilities can be nil

# Search for calls to GetImplicitlyEnabledCapabilities
rg -nA10 'GetImplicitlyEnabledCapabilities\(' --type go

# Check if there are any calls where Capabilities could be nil
rg -nB5 -A10 'InclusionConfiguration\{' --type go | head -100

Repository: openshift/cluster-version-operator

Length of output: 6206


🏁 Script executed:

#!/bin/bash
# Get full function implementation and type definitions
cat -n lib/manifest/manifest.go | sed -n '30,110p'

Repository: openshift/cluster-version-operator

Length of output: 4286


🏁 Script executed:

#!/bin/bash
# Look for InclusionConfiguration type definition
rg -nB2 -A10 'type InclusionConfiguration struct' --type go

Repository: openshift/cluster-version-operator

Length of output: 1009


🏁 Script executed:

#!/bin/bash
# Find all callers of GetImplicitlyEnabledCapabilities to check for nil Capabilities
rg -nB3 'GetImplicitlyEnabledCapabilities\(' --type go | grep -A3 'InclusionConfiguration'

Repository: openshift/cluster-version-operator

Length of output: 60


🏁 Script executed:

#!/bin/bash
# Get the complete InclusionConfiguration struct definition
cat -n lib/manifest/manifest.go | sed -n '18,42p'

Repository: openshift/cluster-version-operator

Length of output: 1281


🏁 Script executed:

#!/bin/bash
# Search for the Capabilities type definition - what does it hold?
rg -nB1 -A5 'Capabilities \*' lib/manifest/manifest.go

Repository: openshift/cluster-version-operator

Length of output: 469


🏁 Script executed:

#!/bin/bash
# Search for all InclusionConfiguration{} struct literals to check what values are passed
rg -n 'InclusionConfiguration\{' lib/

Repository: openshift/cluster-version-operator

Length of output: 60


🏁 Script executed:

#!/bin/bash
# Search for InclusionConfiguration struct literal creation
rg -n 'InclusionConfiguration{' lib/ pkg/ --type go

Repository: openshift/cluster-version-operator

Length of output: 187


🏁 Script executed:

#!/bin/bash
# Look for test cases that might instantiate with nil Capabilities
rg -n -B5 -A10 'InclusionConfiguration{}' --type go

Repository: openshift/cluster-version-operator

Length of output: 207


🏁 Script executed:

#!/bin/bash
# Check the test file mentioned in initial results for context around line 382
cat -n pkg/payload/payload_test.go | sed -n '370,395p'

Repository: openshift/cluster-version-operator

Length of output: 1043


🏁 Script executed:

#!/bin/bash
# Search without regex special chars for InclusionConfiguration creation
rg -n 'InclusionConfiguration' lib/ pkg/ --type go -A 2 | head -50

Repository: openshift/cluster-version-operator

Length of output: 3033


🏁 Script executed:

#!/bin/bash
# Check if there are other calls to GetImplicitlyEnabledCapabilities in lib/manifest/
rg -n 'GetImplicitlyEnabledCapabilities' lib/ --type go -B 5 -A 5

Repository: openshift/cluster-version-operator

Length of output: 1793


🏁 Script executed:

#!/bin/bash
# Look at configv1.ClusterVersionCapabilitiesStatus to understand EnabledCapabilities field
rg -n 'EnabledCapabilities' --type go | head -20

Repository: openshift/cluster-version-operator

Length of output: 4529


Add nil check before dereferencing Capabilities on line 95.

Line 95 dereferences currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities without a nil check. The Capabilities field is defined as a pointer type with a "if non-nil" comment, meaning nil is a valid value. Although current callers pass non-nil pointers, the function's public API accepts InclusionConfiguration without guaranteeing Capabilities is non-nil.

Proposed fix
			newImplicitlyEnabled := sets.New[configv1.ClusterVersionCapability](updateManifest.GetManifestCapabilities()...).
				Difference(sets.New[configv1.ClusterVersionCapability](currentManifest.GetManifestCapabilities()...)).
-				Difference(currentImplicitlyEnabled).
-				Difference(sets.New[configv1.ClusterVersionCapability](currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
+				Difference(currentImplicitlyEnabled)
+			if currentManifestInclusionConfiguration.Capabilities != nil {
+				newImplicitlyEnabled = newImplicitlyEnabled.Difference(sets.New[configv1.ClusterVersionCapability](currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
+			}
📝 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
newImplicitlyEnabled := sets.New[configv1.ClusterVersionCapability](updateManifest.GetManifestCapabilities()...).
Difference(sets.New[configv1.ClusterVersionCapability](currentManifest.GetManifestCapabilities()...)).
Difference(currentImplicitlyEnabled).
Difference(sets.New[configv1.ClusterVersionCapability](manifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
Difference(sets.New[configv1.ClusterVersionCapability](currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
ret = ret.Union(newImplicitlyEnabled)
newImplicitlyEnabled := sets.New[configv1.ClusterVersionCapability](updateManifest.GetManifestCapabilities()...).
Difference(sets.New[configv1.ClusterVersionCapability](currentManifest.GetManifestCapabilities()...)).
Difference(currentImplicitlyEnabled)
if currentManifestInclusionConfiguration.Capabilities != nil {
newImplicitlyEnabled = newImplicitlyEnabled.Difference(sets.New[configv1.ClusterVersionCapability](currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities...))
}
ret = ret.Union(newImplicitlyEnabled)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@lib/manifest/manifest.go` around lines 92 - 96, The code dereferences
currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities without a
nil check; update the logic around newImplicitlyEnabled in manifest.go to first
check if currentManifestInclusionConfiguration.Capabilities is non-nil (and
treat EnabledCapabilities as empty when nil), e.g. construct a safeSet for
enabled capabilities only when Capabilities != nil, and use that safeSet in the
Difference(...) call so you never directly access
Capabilities.EnabledCapabilities when Capabilities is nil; adjust the Difference
call that currently references
currentManifestInclusionConfiguration.Capabilities.EnabledCapabilities to use
the safeSet variable instead.

Comment on lines +4 to +12
name: version5only
annotations:
include.release.openshift.io/self-managed-high-availability: "true"
release.openshift.io/major-version: "5"
spec:
group: test.io
names:
kind: Version5Only
plural: version5onlies
Copy link

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:

# First, check if the file exists and read its content
cat "pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_30_version-5-only.yaml"

Repository: openshift/cluster-version-operator

Length of output: 521


🏁 Script executed:

# Check for other CRD fixtures in testdata to understand the pattern
find pkg/cvo/testdata -name "*.yaml" -type f | head -20

Repository: openshift/cluster-version-operator

Length of output: 1484


🏁 Script executed:

# Look for other CRDs in the testdata to see how they are named
rg -A5 "kind: CustomResourceDefinition" pkg/cvo/testdata/ --max-count=5

Repository: openshift/cluster-version-operator

Length of output: 3502


🏁 Script executed:

# Check how these testdata files are used in tests
rg -B3 -A3 "majorversiontest-v5" pkg/cvo/ --type go | head -50

Repository: openshift/cluster-version-operator

Length of output: 636


🏁 Script executed:

# Look for any validation or loading of these CRD fixtures
rg "0000_30_version-5-only" pkg/cvo/ --type go

Repository: openshift/cluster-version-operator

Length of output: 60


🌐 Web query:

Kubernetes CustomResourceDefinition metadata.name format requirement apiextensions.k8s.io/v1

💡 Result:

For apiextensions.k8s.io/v1 CustomResourceDefinition, metadata.name is required to:

  1. Equal:
    spec.names.plural + "." + spec.group (i.e., <plural>.<group>) (docs.redhat.com)

  2. Be a valid DNS subdomain name (the standard Kubernetes object-name rule for CRDs), which is why the <plural>.<group> value must be DNS-safe (lowercase, digits, -, ., etc.). (v1-33.docs.kubernetes.io)

Citations:


🏁 Script executed:

# Look at the test that uses these fixtures to understand how they're used
cat -n pkg/cvo/cvo_scenarios_test.go | grep -A 50 "func TestCVO_MajorVersionManifestFiltering"

Repository: openshift/cluster-version-operator

Length of output: 1929


🏁 Script executed:

# Search for any validation logic applied to loaded manifests
rg "setupCVOTest" pkg/cvo/cvo_scenarios_test.go -A 5 -B 2

Repository: openshift/cluster-version-operator

Length of output: 5750


🏁 Script executed:

# Check if these manifests are ever applied to an actual API server or just parsed
rg -B5 -A5 "Apply|Create" pkg/cvo/cvo_scenarios_test.go | head -60

Repository: openshift/cluster-version-operator

Length of output: 1684


CRD name does not match Kubernetes specification, but requires broader test updates.

For apiextensions.k8s.io/v1 CRDs, the Kubernetes API requires metadata.name to be <plural>.<group>. Here, the name should be version5onlies.test.io (not version5only). However, the test TestCVO_MajorVersionManifestFiltering hardcodes expectations for the short name "version5only" (line 4439 in cvo_scenarios_test.go). Fixing the fixture alone would break the test; you'll need to update the fixture, the test expectation list, and the corresponding changes in other similar CRD fixtures in the same testdata directory.

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

In
`@pkg/cvo/testdata/majorversiontest-v5/release-manifests/0000_30_version-5-only.yaml`
around lines 4 - 12, The CRD fixture's metadata.name must follow Kubernetes spec
(metadata.name == spec.names.plural + "." + spec.group), so change the CRD in
pkg/cvo/testdata/.../0000_30_version-5-only.yaml to set metadata.name to
"version5onlies.test.io" (matching spec.names.plural and spec.group); then
update the test expectations in TestCVO_MajorVersionManifestFiltering
(cvo_scenarios_test.go) to look for "version5onlies" (or the full name if the
test asserts full resource names) and adjust any other CRD fixtures in the same
testdata directory that currently use singular names to use "<plural>.<group>"
format so tests and fixtures remain consistent.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 21, 2026

@wking: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-agnostic-ovn-techpreview-serial-2of3 a2ed8ce link true /test e2e-agnostic-ovn-techpreview-serial-2of3
ci/prow/e2e-agnostic-ovn-techpreview-serial-1of3 a2ed8ce link true /test e2e-agnostic-ovn-techpreview-serial-1of3
ci/prow/e2e-agnostic-ovn-techpreview-serial-3of3 a2ed8ce link true /test e2e-agnostic-ovn-techpreview-serial-3of3
ci/prow/e2e-hypershift-conformance a2ed8ce link true /test e2e-hypershift-conformance

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/severity-important Referenced Jira bug's severity is important for the branch this PR is targeting. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants