OCPBUGS-77845: Update release extract inclusion to support feature gates and major version#2222
OCPBUGS-77845: Update release extract inclusion to support feature gates and major version#2222JoelSpeed wants to merge 1 commit intoopenshift:mainfrom
Conversation
|
@JoelSpeed: This pull request references Jira Issue OCPBUGS-77845, which is invalid:
Comment The bug has been updated to refer to the pull request using the external bug tracker. DetailsIn response to this:
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. |
WalkthroughRefactors extract option initialization into a new helper on ExtractOptions and moves cluster include configuration discovery onto ExtractOptions, adding feature-gate and major-version extraction from release payloads to drive manifest inclusion filtering. Pointer-based metadata handling and related imports were added. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Comment |
|
/jira refresh |
|
@JoelSpeed: This pull request references Jira Issue OCPBUGS-77845, which is valid. The bug has been moved to the POST state. 3 validation(s) were run on this bug
Requesting review from QA contact: DetailsIn response to this:
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. |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (2)
pkg/cli/admin/release/extract_tools.go (2)
1332-1338: Parameterversionis validated but effectively unused for logic.The
versionparameter is validated as non-empty (line 1336-1337), but it's only used in the final log message (line 1436). The actual version used for filtering feature gates isreleaseMetadata.Versionparsed from the release payload (line 1416).Consider either:
- Removing the validation and documenting that
versionis only for logging- Using the parameter consistently if it was intended for a specific purpose
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/cli/admin/release/extract_tools.go` around lines 1332 - 1338, The function extractFeatureGatesFromRelease currently validates the input parameter version but never uses it for logic (releaseMetadata.Version is used instead); either remove the empty-string validation and update documentation/comments to state that version is used only for logging, or enforce consistency by comparing the passed version against releaseMetadata.Version and returning an error if they differ; locate extractFeatureGatesFromRelease and change the validation accordingly, referencing the parameter version and the parsed releaseMetadata.Version to implement the chosen behavior.
1429-1429: Variable shadowing: loop variableversionshadows function parameter.The loop variable
versionshadows the function parameterversionfrom line 1332. This reduces readability and could cause confusion during maintenance.♻️ Suggested fix: Rename loop variable
- for _, version := range featureGate.Status.FeatureGates { - for _, enabled := range version.Enabled { + for _, gateVersion := range featureGate.Status.FeatureGates { + for _, enabled := range gateVersion.Enabled { enabledFeatureGates.Insert(string(enabled.Name)) } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/cli/admin/release/extract_tools.go` at line 1429, The loop variable `version` shadows the function parameter `version`; rename the loop variable used in the `for _, version := range featureGate.Status.FeatureGates` iteration (e.g., to `fgVersion` or `fg`) and update all references inside that loop accordingly so the function parameter `version` remains unshadowed and code clarity is preserved (search for references to `featureGate.Status.FeatureGates` and the inner use of `version` to apply the rename).
🤖 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`:
- Around line 60-69: The go.mod lists mixed Kubernetes minor versions (some
0.35.1 and some 0.34.1) which can cause dependency skew; update the module lines
for k8s.io/cli-runtime, k8s.io/kubectl, k8s.io/pod-security-admission,
k8s.io/component-helpers (if present), and k8s.io/metrics to the same minor
version as the core modules (e.g., change their versions to v0.35.1 to match
k8s.io/api, k8s.io/apimachinery, k8s.io/client-go, k8s.io/apiserver, and
k8s.io/klog/v2) and run go mod tidy to resolve and verify consistent dependency
graph.
- Line 3: The repo's go directive was bumped to "go 1.25.0" but CI/build images
still reference Go 1.24; update all image tags that contain "golang-1.24" to the
corresponding "golang-1.25" variants (e.g. replace
"rhel-9-release-golang-1.24-openshift-4.22",
"rhel-8-golang-1.24-openshift-4.22", and "rhel-9-golang-1.24-openshift-4.22"
with their golang-1.25 equivalents) so the CI config and Dockerfiles match the
go.mod change.
- Around line 39-40: The go.mod currently requires github.com/onsi/ginkgo/v2
v2.27.2 but a replace directive points to an OpenShift fork at v2.6.1-... which
effectively downgrades and may break future tests; update the module constraints
so the require and replace are consistent: either remove the replace for
github.com/onsi/ginkgo/v2 (so the upstream v2.27.2 is used) or update the
replace to point to an equivalent fork/tag that matches v2.27.2, then run go mod
tidy and go test to verify; also update the comment in test/e2e/util.go to
document why a fork is needed if you keep the replace (or note its removal) so
maintainers understand the rationale.
In `@pkg/cli/admin/release/extract_tools.go`:
- Line 1181: The function signature for
findClusterIncludeConfigFromInstallConfig contains an unused ctx context.Context
parameter which causes a call-site mismatch; remove the ctx parameter from the
signature (leaving func (o *ExtractOptions)
findClusterIncludeConfigFromInstallConfig(installConfigPath string, imageRef
imagesource.TypedImageReference) (manifestInclusionConfiguration, error)) and
update any internal references to ctx inside that method (none expected) so
callers that pass only o.InstallConfig and ref compile correctly; also search
for any other callers and adjust them to the new two-argument signature if
needed.
In `@pkg/cli/admin/release/extract.go`:
- Line 327: The call to findClusterIncludeConfigFromInstallConfig is missing the
required ctx argument; update the invocation that assigns to inclusionConfig
(currently: inclusionConfig, err =
o.findClusterIncludeConfigFromInstallConfig(o.InstallConfig, ref)) to pass the
context (ctx) as the first parameter so it matches the function signature in
extract_tools.go (e.g., inclusionConfig, err =
o.findClusterIncludeConfigFromInstallConfig(ctx, o.InstallConfig, ref)).
- Around line 623-641: metadataVerifyMsg is captured by the image metadata
callback and returned immediately from newExtractOpts, but the callback runs
later so the caller receives an empty copy; change metadataVerifyMsg from a
string to *string (or return *string) so the closure writes to the pointed-to
value, update the callback closure in imageMetadataCallbacks and
opts.ImageMetadataCallback to assign to the pointer, and update call sites that
read the returned metadataVerifyMsg to dereference the pointer (or handle nil)
so the computed message produced by the closure is visible after opts.Run().
---
Nitpick comments:
In `@pkg/cli/admin/release/extract_tools.go`:
- Around line 1332-1338: The function extractFeatureGatesFromRelease currently
validates the input parameter version but never uses it for logic
(releaseMetadata.Version is used instead); either remove the empty-string
validation and update documentation/comments to state that version is used only
for logging, or enforce consistency by comparing the passed version against
releaseMetadata.Version and returning an error if they differ; locate
extractFeatureGatesFromRelease and change the validation accordingly,
referencing the parameter version and the parsed releaseMetadata.Version to
implement the chosen behavior.
- Line 1429: The loop variable `version` shadows the function parameter
`version`; rename the loop variable used in the `for _, version := range
featureGate.Status.FeatureGates` iteration (e.g., to `fgVersion` or `fg`) and
update all references inside that loop accordingly so the function parameter
`version` remains unshadowed and code clarity is preserved (search for
references to `featureGate.Status.FeatureGates` and the inner use of `version`
to apply the rename).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1ccc24ef-41b7-4370-bb44-f14739df2048
⛔ Files ignored due to path filters (297)
go.sumis excluded by!**/*.sumvendor/github.com/go-logr/logr/.golangci.yamlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-logr/logr/funcr/funcr.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/format/format.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/gomega_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/assertion.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/async_assertion.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/duration_bundle.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/gomega.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/polling_signal_error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/vetoptdesc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/and.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_a_directory.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_a_regular_file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_an_existing_file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_closed_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_empty_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_false_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_identical_to.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_nil_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_sent_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_true_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_zero_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/consist_of.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/contain_element_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/equal_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_cap_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_each_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_exact_elements.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_field.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_key_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_len_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_value.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/internal/miter/type_support_iter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/internal/miter/type_support_noiter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_error_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_json_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_xml_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/not.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/or.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/panic_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/receive_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/satisfy_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/succeed_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/type_support.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/with_transform.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/types/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/.ci-operator.yamlis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/.coderabbit.yamlis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/.golangci.go-validated.yamlis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/.golangci.yamlis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/AGENTS.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/Dockerfile.ocpis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apiextensions/install.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apiextensions/v1alpha1/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apiextensions/v1alpha1/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apiextensions/v1alpha1/register.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apiextensions/v1alpha1/types_compatibilityrequirement.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apiextensions/v1alpha1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/apiextensions/v1alpha1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/apiextensions/v1alpha1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/apps/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apps/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apps/v1/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/apps/v1/zz_prerelease_lifecycle_generated.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/authorization/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/authorization/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/build/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/build/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/cloudnetwork/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/cloudnetwork/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_apiserver.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_authentication.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_cluster_image_policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_cluster_version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_feature.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_image_policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_infrastructure.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_ingress.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_insights.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_network.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_node.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_scheduling.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/config/v1alpha1/register.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/types_backup.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/types_crio_credential_provider_config.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/types_insights.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/config/v1alpha1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/config/v1alpha2/types_insights.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/config/v1alpha2/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/console/v1/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/console/v1/types_console_sample.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/console/v1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/etcd/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/etcd/install.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/etcd/v1alpha1/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/etcd/v1alpha1/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/etcd/v1alpha1/register.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/etcd/v1alpha1/types_pacemakercluster.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/etcd/v1alpha1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/etcd/v1alpha1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/etcd/v1alpha1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/features.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/features/features.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/features/legacyfeaturegates.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/features/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/image/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/image/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/install.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machine/v1/types_controlplanemachineset.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machine/v1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machine/v1beta1/types_machine.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machine/v1beta1/types_machineset.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machine/v1beta1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machine/v1beta1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machineconfiguration/v1/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1/types_machineconfignode.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machineconfiguration/v1alpha1/register.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types_internalreleaseimage.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types_osimagestream.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types_pinnedimageset.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/network/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/network/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/networkoperator/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/networkoperator/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/oauth/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/oauth/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1/types_console.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1/types_ingress.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1/types_machineconfiguration.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1/types_network.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/operator/v1alpha1/register.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1alpha1/types_clusterapi.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.featuregated-crd-manifests.yamlis excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.gois excluded by!**/vendor/**,!vendor/**,!**/zz_generated*vendor/github.com/openshift/api/project/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/project/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/quota/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/quota/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/route/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/route/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/samples/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/samples/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/security/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/security/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/template/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/template/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/user/v1/generated.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/api/user/v1/generated.protomessage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/customdeploymentstrategyparams.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentcause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentcauseimagetrigger.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentcondition.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentconfig.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentconfigspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentconfigstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentdetails.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymentstrategy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymenttriggerimagechangeparams.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/deploymenttriggerpolicy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/execnewpodhook.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/lifecyclehook.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/recreatedeploymentstrategyparams.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/rollingdeploymentstrategyparams.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/applyconfigurations/apps/v1/tagimagehook.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/apps/clientset/versioned/fake/clientset_generated.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/clusterrole.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/clusterrolebinding.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/grouprestriction.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/policyrule.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/role.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/rolebinding.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/rolebindingrestriction.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/rolebindingrestrictionspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/serviceaccountreference.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/serviceaccountrestriction.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/applyconfigurations/authorization/v1/userrestriction.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/authorization/clientset/versioned/fake/clientset_generated.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/binarybuildsource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/bitbucketwebhookcause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/build.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildcondition.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildconfig.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildconfigspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildconfigstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildoutput.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildpostcommitspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildsource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildstatusoutput.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildstatusoutputto.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildstrategy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildtriggercause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildtriggerpolicy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildvolume.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildvolumemount.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/buildvolumesource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/commonspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/commonwebhookcause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/configmapbuildsource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/custombuildstrategy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/dockerbuildstrategy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/genericwebhookcause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/gitbuildsource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/githubwebhookcause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/gitlabwebhookcause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/gitsourcerevision.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagechangecause.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagechangetrigger.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagechangetriggerstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagelabel.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagesource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagesourcepath.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/imagestreamtagreference.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/jenkinspipelinebuildstrategy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/proxyconfig.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/secretbuildsource.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/secretlocalreference.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/secretspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/sourcebuildstrategy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/sourcecontroluser.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/sourcerevision.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/stageinfo.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/stepinfo.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/applyconfigurations/build/v1/webhooktrigger.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/build/clientset/versioned/fake/clientset_generated.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/acceptrisk.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/alibabacloudplatformstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/alibabacloudresourcetag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserver.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverencryption.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiservernamedservingcert.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverservingcerts.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/audit.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/auditcustomrule.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/authentication.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/authenticationspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/authenticationstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsdnsspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsingressspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awskmsconfig.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsplatformspec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsplatformstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsresourcetag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsserviceendpoint.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/azureplatformstatus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/azureresourcetag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/baremetalplatformloadbalancer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/baremetalplatformspec.gois excluded by!**/vendor/**,!vendor/**
📒 Files selected for processing (3)
go.modpkg/cli/admin/release/extract.gopkg/cli/admin/release/extract_tools.go
| module github.com/openshift/oc | ||
|
|
||
| go 1.24.0 | ||
| go 1.25.0 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify all CI/build definitions are aligned with Go 1.25.x
set -euo pipefail
echo "== Files likely pinning Go versions =="
fd -HI '(\.github/workflows/.*\.ya?ml$|Dockerfile|Containerfile|\.ci-operator\.ya?ml$|Makefile|go\.mod$|go\.sum$|OWNERS|\.tool-versions$|\.golangci\.ya?ml$)' . 2>/dev/null | head -30
echo
echo "== Explicit Go version mentions =="
rg -n --no-heading -S 'go1\.[0-9]+|golang:1\.[0-9]+|GO_VERSION|GOVERSION|go[[:space:]]+1\.[0-9]+' . 2>/dev/null | head -50
echo
echo "== Current go.mod Go directive =="
head -5 go.mod 2>/dev/null || echo "go.mod not found"Repository: openshift/oc
Length of output: 3536
🏁 Script executed:
#!/bin/bash
echo "== .ci-operator.yaml Go version specs =="
grep -n -i "golang\|go_version\|go version" .ci-operator.yaml 2>/dev/null || echo "No explicit Go version found"
echo
echo "== Makefile Go version specs =="
grep -n -i "golang_version\|go_version\|go_required\|go version" Makefile 2>/dev/null | head -20 || echo "No explicit Go version found"
echo
echo "== Dockerfile Go/golang specifications =="
for f in ./images/*/Dockerfile*; do
echo "--- $f ---"
grep -n "golang:\|FROM.*go\|GO_VERSION\|GOVERSION" "$f" 2>/dev/null || echo "No explicit Go version"
done
echo
echo "== Checking if any build script references Go versions =="
find . -name "*.sh" -type f ! -path "./vendor/*" | head -10 | xargs grep -l "golang\|GO_VERSION" 2>/dev/null | head -5Repository: openshift/oc
Length of output: 916
🏁 Script executed:
#!/bin/bash
echo "== hack/lib/init.sh Go version references =="
grep -n -i "golang\|go.*version" ./hack/lib/init.sh 2>/dev/null | head -20Repository: openshift/oc
Length of output: 183
Update CI/build images to Go 1.25 before merging.
The go directive in go.mod is now 1.25.0, but CI and build images are still pinned to Go 1.24:
.ci-operator.yamlline 4:rhel-9-release-golang-1.24-openshift-4.22images/cli-artifacts/Dockerfile.rhellines 3, 8:rhel-8-golang-1.24-openshift-4.22,rhel-9-golang-1.24-openshift-4.22images/cli/Dockerfile.rhelline 1:rhel-9-golang-1.24-openshift-4.22images/tools/Dockerfileline 1:rhel-9-golang-1.24-openshift-4.22
Update all references to use Go 1.25 to maintain consistency across the repo.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@go.mod` at line 3, The repo's go directive was bumped to "go 1.25.0" but
CI/build images still reference Go 1.24; update all image tags that contain
"golang-1.24" to the corresponding "golang-1.25" variants (e.g. replace
"rhel-9-release-golang-1.24-openshift-4.22",
"rhel-8-golang-1.24-openshift-4.22", and "rhel-9-golang-1.24-openshift-4.22"
with their golang-1.25 equivalents) so the CI config and Dockerfiles match the
go.mod change.
| github.com/onsi/ginkgo/v2 v2.27.2 | ||
| github.com/onsi/gomega v1.38.2 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Confirm effective ginkgo module and whether code uses newer APIs
set -euo pipefail
echo "== Ginkgo require/replace lines =="
rg -n --no-heading 'github\.com/onsi/ginkgo/v2|github\.com/openshift/onsi-ginkgo/v2' go.mod
echo
echo "== Common newer ginkgo usage patterns in repo =="
rg -n --no-heading 'DeferCleanup\(|AddReportEntry\(|Ordered\(|Label\(|Serial\(|ReportAfterEach\(' . || echo "(no matches found)"Repository: openshift/oc
Length of output: 39855
🏁 Script executed:
#!/bin/bash
# Search for Ginkgo DSL usage in actual test files (exclude vendor)
set -euo pipefail
echo "== Searching test files for Ginkgo v2 DSL usage (non-vendor) =="
rg -t go 'DeferCleanup\(|AddReportEntry\(|Ordered\(|Label\(|Serial\(|ReportAfterEach\(' --glob '!vendor' --glob '*_test.go' -A 2 -B 2 | head -100
echo
echo "== Check if fork comment or rationale exists in go.mod =="
grep -A 5 -B 5 'openshift/onsi-ginkgo' go.mod || echo "(no comments found)"Repository: openshift/oc
Length of output: 3355
🏁 Script executed:
#!/bin/bash
# Check e2e test files for Ginkgo usage and fork history
set -euo pipefail
echo "== E2E test files that might use Ginkgo =="
fd -t f -e go 'test' test/e2e/ | head -20
echo
echo "== Check test/e2e/util.go for Ginkgo usage =="
grep -n 'ginkgo\|Ginkgo' test/e2e/util.go | head -20
echo
echo "== Look for g variable pattern (ginkgo.GinkgoT()) =="
rg -n 'var\s+g\s+=' test/e2e/ --glob '*.go' -A 2 -B 2 | head -50Repository: openshift/oc
Length of output: 742
Address the Ginkgo version mismatch between require and replace directives.
The require of v2.27.2 is overridden by a replace pointing to the OpenShift fork at v2.6.1-0.20251001123353-fd5b1fb35db1. This fork is approximately 20 minor versions behind the declared requirement, effectively nullifying the upgrade. The comment in test/e2e/util.go references "v1/v2 compatibility issues," but the rationale for the fork and its maintenance status is unclear. While current test code uses only basic Ginkgo v2 APIs (GinkgoWriter, DeferCleanup), future test changes relying on newer Ginkgo features (added between v2.6.1 and v2.27.2) could fail silently or behave unexpectedly if the fork lacks parity.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@go.mod` around lines 39 - 40, The go.mod currently requires
github.com/onsi/ginkgo/v2 v2.27.2 but a replace directive points to an OpenShift
fork at v2.6.1-... which effectively downgrades and may break future tests;
update the module constraints so the require and replace are consistent: either
remove the replace for github.com/onsi/ginkgo/v2 (so the upstream v2.27.2 is
used) or update the replace to point to an equivalent fork/tag that matches
v2.27.2, then run go mod tidy and go test to verify; also update the comment in
test/e2e/util.go to document why a fork is needed if you keep the replace (or
note its removal) so maintainers understand the rationale.
| inclusionConfig, err = findClusterIncludeConfig(ctx, o.RESTConfig) | ||
| } else { | ||
| inclusionConfig, err = findClusterIncludeConfigFromInstallConfig(ctx, o.InstallConfig) | ||
| inclusionConfig, err = o.findClusterIncludeConfigFromInstallConfig(o.InstallConfig, ref) |
There was a problem hiding this comment.
Missing ctx argument in function call.
The call to findClusterIncludeConfigFromInstallConfig is missing the ctx argument that the function signature requires (see extract_tools.go line 1181). This will cause a compilation error.
🐛 Alternative fix if keeping ctx in signature
- inclusionConfig, err = o.findClusterIncludeConfigFromInstallConfig(o.InstallConfig, ref)
+ inclusionConfig, err = o.findClusterIncludeConfigFromInstallConfig(ctx, o.InstallConfig, ref)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pkg/cli/admin/release/extract.go` at line 327, The call to
findClusterIncludeConfigFromInstallConfig is missing the required ctx argument;
update the invocation that assigns to inclusionConfig (currently:
inclusionConfig, err =
o.findClusterIncludeConfigFromInstallConfig(o.InstallConfig, ref)) to pass the
context (ctx) as the first parameter so it matches the function signature in
extract_tools.go (e.g., inclusionConfig, err =
o.findClusterIncludeConfigFromInstallConfig(ctx, o.InstallConfig, ref)).
|
@JoelSpeed I'm bumping k8s dependencies and I had to fix it #2219 (comment). Does it make sense adding your commits in my PR? |
b6419ba to
6302173
Compare
|
@ardaguclu Yes, that probably makes sense. Either you can pick my changes in, or you can placeholder the values for now by just updating the |
This would be better for me. So I'll pass nil here oc/pkg/cli/admin/release/extract_tools.go Line 1286 in 4aebabf Just a note: #2219 suffers a couple of problems due to a conflict with new dependencies. I have to fix them. How urgent is this bug? |
|
I think it's a release blocker, but I should be able to wait a few days for you to fix up your other PR |
|
@JoelSpeed: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions 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. |
|
this is another pull that's waiting on #2219. |
|
@JoelSpeed this is blocking testing for workload identity on Azure - in particular the PQC effort: https://redhat.atlassian.net/browse/CCO-776 - any updates? |
This PR is blocked by #2219 which is blocked by openshift/cluster-openshift-apiserver-operator#667. Currently openshift/cluster-openshift-apiserver-operator#667 is pending for review/approval |
|
#2219 has merged |
6302173 to
b936a9f
Compare
|
@JoelSpeed: This pull request references Jira Issue OCPBUGS-77845, which is valid. 3 validation(s) were run on this bug
No GitHub users were found matching the public email listed for the QA contact in Jira (yinzhou@redhat.com), skipping review request. DetailsIn response to this:
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. |
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
pkg/cli/admin/release/extract.go (1)
624-633:⚠️ Potential issue | 🟠 Major
metadataVerifyMsgis still not propagated to the caller.
metadataVerifyMsgis returned beforeopts.Run()executes the callback, and the callback currently reassigns the local pointer variable. The caller keeps the originalnil, so the message remains empty.🐛 Proposed fix
- var metadataVerifyMsg *string + metadataVerifyMsg := new(string) verifier := imagemanifest.NewVerifier() imageMetadataCallbacks = append(imageMetadataCallbacks, func(m *extract.Mapping, dgst, contentDigest digest.Digest, config *dockerv1client.DockerImageConfig, manifestListDigest digest.Digest) { verifier.Verify(dgst, contentDigest) if len(ref.Ref.ID) > 0 { - metadataVerifyMsg = ptr.To(fmt.Sprintf("Extracted release payload created at %s", config.Created.Format(time.RFC3339))) + *metadataVerifyMsg = fmt.Sprintf("Extracted release payload created at %s", config.Created.Format(time.RFC3339)) } else { - metadataVerifyMsg = ptr.To(fmt.Sprintf("Extracted release payload from digest %s created at %s", dgst, config.Created.Format(time.RFC3339))) + *metadataVerifyMsg = fmt.Sprintf("Extracted release payload from digest %s created at %s", dgst, config.Created.Format(time.RFC3339)) } })As per coding guidelines, "Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
Also applies to: 642-643
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/cli/admin/release/extract.go` around lines 624 - 633, The local pointer metadataVerifyMsg is set inside the async callback but the function returns before that callback runs so the caller sees nil; change the callback to write the message into the mapping (e.g. set a new field on extract.Mapping such as MetadataVerifyMsg or reuse an existing metadata field on m) instead of assigning the outer metadataVerifyMsg variable, and after opts.Run() completes read the message from the mapping and return it; update the callback appended to imageMetadataCallbacks (the func(m *extract.Mapping, dgst, contentDigest digest.Digest, config *dockerv1client.DockerImageConfig, manifestListDigest digest.Digest)) to assign the formatted string to m.MetadataVerifyMsg and then retrieve that value after opts.Run() finishes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pkg/cli/admin/release/extract_tools.go`:
- Around line 1230-1238: The code is performing a full release extraction twice:
findClusterIncludeConfigFromInstallConfig calls extractFeatureGatesFromRelease
which invokes opts.Run(), and later the main extraction path calls opts.Run()
again for the same image, doubling remote I/O and verification; fix this by
caching the feature-gate and major-version results keyed by the image digest (or
by returning and storing them from the primary extraction) so that
extractFeatureGatesFromRelease and the main extract flow reuse the cached values
instead of calling opts.Run() a second time—modify
findClusterIncludeConfigFromInstallConfig, extractFeatureGatesFromRelease, and
the main extract flow to check the cache (or accept precomputed values from the
primary extraction) and avoid re-invoking opts.Run() for the same image.
---
Duplicate comments:
In `@pkg/cli/admin/release/extract.go`:
- Around line 624-633: The local pointer metadataVerifyMsg is set inside the
async callback but the function returns before that callback runs so the caller
sees nil; change the callback to write the message into the mapping (e.g. set a
new field on extract.Mapping such as MetadataVerifyMsg or reuse an existing
metadata field on m) instead of assigning the outer metadataVerifyMsg variable,
and after opts.Run() completes read the message from the mapping and return it;
update the callback appended to imageMetadataCallbacks (the func(m
*extract.Mapping, dgst, contentDigest digest.Digest, config
*dockerv1client.DockerImageConfig, manifestListDigest digest.Digest)) to assign
the formatted string to m.MetadataVerifyMsg and then retrieve that value after
opts.Run() finishes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: f7e5597f-ab6e-47ca-be45-e04b05e51441
📒 Files selected for processing (2)
pkg/cli/admin/release/extract.gopkg/cli/admin/release/extract_tools.go
| return enabledFeatureGates, nil, fmt.Errorf("version cannot be empty") | ||
| } | ||
|
|
||
| opts, metadataVerifyMsg, verifier := o.newExtractOpts(imageRef) |
There was a problem hiding this comment.
It would be better to pass the ExtractOpts created in extract_tools but I guess the reason is to use custom TarEntryCallback
There was a problem hiding this comment.
Yeah I figured since we needed a different entry callback it was better to create one separately, hence moving the build of the extract opts out into a helper
Want me to look at changing or is this ~ok?
| } | ||
|
|
||
| // There will only be a single version in the feature gate manifests. | ||
| for _, version := range featureGate.Status.FeatureGates { |
There was a problem hiding this comment.
version is shadowed, it is better to use a different naming.
|
In my opinion, this requires pre-merge testing |
|
/approve |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: ardaguclu, JoelSpeed The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
b936a9f to
2153fc0
Compare
|
@JianLi-RH Would you be able to pre-merge test this please? |
There was a problem hiding this comment.
♻️ Duplicate comments (2)
pkg/cli/admin/release/extract_tools.go (1)
1230-1231:⚠️ Potential issue | 🟠 Major
--included --install-configstill triggers a second full payload extraction.This pre-pass calls
extractFeatureGatesFromRelease(...), which runsopts.Run()again, and the main extract flow later runs anotheropts.Run()for the same release image. That doubles registry I/O + verification work and increases failure probability on constrained registries.Please reuse data from the primary extraction pass (or cache by image digest) instead of running a second extraction pass.
As per coding guidelines, "-Focus on major issues impacting performance, readability, maintainability and security. Avoid nitpicks and avoid verbosity."
Also applies to: 1390-1394
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/cli/admin/release/extract_tools.go` around lines 1230 - 1231, The call to o.extractFeatureGatesFromRelease(imageRef, ...) triggers opts.Run() a second time for the same release, doubling extraction I/O; change extractFeatureGatesFromRelease (and callers) to accept either the already-extracted release result or a cache key (image digest) and check that before invoking opts.Run(); specifically, update extractFeatureGatesFromRelease to accept an optional pre-extracted release object (or a shared map[string]*ExtractResult keyed by image digest), have the primary extraction flow store its result in that cache or pass it directly, and make extractFeatureGatesFromRelease use the cached result instead of calling opts.Run() when present so the second full payload extraction is avoided.pkg/cli/admin/release/extract.go (1)
624-633:⚠️ Potential issue | 🟡 Minor
metadataVerifyMsgis still lost due to pointer rebinding in the callback.
newExtractOptsreturnsmetadataVerifyMsgbefore callbacks run, and the callback doesmetadataVerifyMsg = ptr.To(...)(rebind), so callers keep the originalnilpointer and never see the message.💡 Suggested fix
- var metadataVerifyMsg *string + metadataVerifyMsg := new(string) verifier := imagemanifest.NewVerifier() imageMetadataCallbacks = append(imageMetadataCallbacks, func(m *extract.Mapping, dgst, contentDigest digest.Digest, config *dockerv1client.DockerImageConfig, manifestListDigest digest.Digest) { verifier.Verify(dgst, contentDigest) if len(ref.Ref.ID) > 0 { - metadataVerifyMsg = ptr.To(fmt.Sprintf("Extracted release payload created at %s", config.Created.Format(time.RFC3339))) + *metadataVerifyMsg = fmt.Sprintf("Extracted release payload created at %s", config.Created.Format(time.RFC3339)) } else { - metadataVerifyMsg = ptr.To(fmt.Sprintf("Extracted release payload from digest %s created at %s", dgst, config.Created.Format(time.RFC3339))) + *metadataVerifyMsg = fmt.Sprintf("Extracted release payload from digest %s created at %s", dgst, config.Created.Format(time.RFC3339)) } })Also applies to: 642-642
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/cli/admin/release/extract.go` around lines 624 - 633, The callback currently rebinds metadataVerifyMsg (metadataVerifyMsg = ptr.To(...)) so callers holding the original pointer never observe updates; instead, ensure the callback mutates the pointed-to string: if metadataVerifyMsg == nil { metadataVerifyMsg = new(string) } *metadataVerifyMsg = fmt.Sprintf("...") (use the same message formats currently used). Apply this change in the imageMetadataCallbacks callback(s) that set metadataVerifyMsg (including the other occurrence noted) so the pointer value is updated in-place and callers of newExtractOpts see the populated message.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@pkg/cli/admin/release/extract_tools.go`:
- Around line 1230-1231: The call to o.extractFeatureGatesFromRelease(imageRef,
...) triggers opts.Run() a second time for the same release, doubling extraction
I/O; change extractFeatureGatesFromRelease (and callers) to accept either the
already-extracted release result or a cache key (image digest) and check that
before invoking opts.Run(); specifically, update extractFeatureGatesFromRelease
to accept an optional pre-extracted release object (or a shared
map[string]*ExtractResult keyed by image digest), have the primary extraction
flow store its result in that cache or pass it directly, and make
extractFeatureGatesFromRelease use the cached result instead of calling
opts.Run() when present so the second full payload extraction is avoided.
In `@pkg/cli/admin/release/extract.go`:
- Around line 624-633: The callback currently rebinds metadataVerifyMsg
(metadataVerifyMsg = ptr.To(...)) so callers holding the original pointer never
observe updates; instead, ensure the callback mutates the pointed-to string: if
metadataVerifyMsg == nil { metadataVerifyMsg = new(string) } *metadataVerifyMsg
= fmt.Sprintf("...") (use the same message formats currently used). Apply this
change in the imageMetadataCallbacks callback(s) that set metadataVerifyMsg
(including the other occurrence noted) so the pointer value is updated in-place
and callers of newExtractOpts see the populated message.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ed5945bc-c743-4284-8ae7-cb0d9877f585
📒 Files selected for processing (2)
pkg/cli/admin/release/extract.gopkg/cli/admin/release/extract_tools.go
Sure, I will take a look at it tomorrow. |
|
I see Ying Zhou already verified it in https://redhat.atlassian.net/browse/OCPBUGS-77845?focusedCommentId=16452255 I re-tested it, it works. the test result: And if I don't specify install-config, it will generate the credential file: |
|
Besides Ying's tests, I finished some more tests:
|
|
/verified by @JianLi-RH |
|
@JoelSpeed: This PR has been marked as verified by DetailsIn response to this:
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. |
|
Just retested |
|
@JoelSpeed who are you expecting to add the LGTM here? |
Recent changes to library-go added manifest inclusion for feature gates and major version.
This updates library-go and adds a step to gather the feature gates and major OCP version either from the in-cluster feature gate resource, or, by finding the correct
FeatureGateinside the payload and gathering the gates enabled from thatTested locally it appears to be working as expected
CC @atiratree