Skip to content

CNTRLPLANE-2449: feat: implement OpenAPIModelNamer interface#2856

Open
ingvagabund wants to merge 6 commits into
openshift:masterfrom
ingvagabund:implement-OpenAPIModelNamer-interface
Open

CNTRLPLANE-2449: feat: implement OpenAPIModelNamer interface#2856
ingvagabund wants to merge 6 commits into
openshift:masterfrom
ingvagabund:implement-OpenAPIModelNamer-interface

Conversation

@ingvagabund
Copy link
Copy Markdown
Member

@ingvagabund ingvagabund commented May 25, 2026

TBD

Consequence of kubernetes/kubernetes#131755

Important note: the current openapi/openapi.json is generated with the openshift type names in com.github.openshift.api.<group>.<version>.<TypeName> order. Implementing the new interface results in the openshift types names generated in <TypeName>.<version>.<group>.api.openshift.github.com. Which completely reshuffles the keys in openapi/openapi.json. Which makes it hard to follow the changes. The kubernetes types already follow this new naming schema. E.g. APIGroup.v1.meta.apis.pkg.apimachinery.k8s.io.

After the PR merged if consumers rely on the generated openapi.json they need to adjust their steps by running extra GENERATOR=modelname hack/update-codegen.sh before make update-openapi. E.g. https://github.com/openshift/cluster-kube-descheduler-operator/blob/main/hack/update-codegen.sh#L27-L32

@openshift-merge-bot
Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@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 May 25, 2026
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 25, 2026

Hello @ingvagabund! Some important instructions when contributing to openshift/api:
API design plays an important part in the user experience of OpenShift and as such API PRs are subject to a high level of scrutiny to ensure they follow our best practices. If you haven't already done so, please review the OpenShift API Conventions and ensure that your proposed changes are compliant. Following these conventions will help expedite the api review process for your PR.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 25, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 4b00f1fe-3e04-4740-b361-c6a5146aea7d

📥 Commits

Reviewing files that changed from the base of the PR and between 8a7f7b4 and 03828e0.

⛔ Files ignored due to path filters (50)
  • apiextensions/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • apiserver/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • apps/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • authorization/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • build/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • cloudnetwork/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • config/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • config/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • config/v1alpha2/zz_generated.model_name.go is excluded by !**/zz_generated*
  • console/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • etcd/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • etcd/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • example/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • example/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • helm/v1beta1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • image/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • imageregistry/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • insights/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • insights/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • insights/v1alpha2/zz_generated.model_name.go is excluded by !**/zz_generated*
  • kubecontrolplane/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • legacyconfig/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machine/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machine/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machine/v1beta1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machineconfiguration/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machineconfiguration/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • monitoring/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • network/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • network/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • networkoperator/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • oauth/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • openapi/cmd/models-schema/main.go is excluded by !openapi/**
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**, !**/zz_generated*
  • openshiftcontrolplane/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operator/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operator/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operatorcontrolplane/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operatoringress/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • osin/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • project/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • quota/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • route/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • samples/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • security/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • securityinternal/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • servicecertsigner/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • sharedresource/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • template/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • user/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
📒 Files selected for processing (5)
  • tools/codegen/cmd/modelname.go
  • tools/codegen/cmd/root.go
  • tools/codegen/pkg/generation/types.go
  • tools/codegen/pkg/modelname/generator.go
  • tools/codegen/pkg/modelname/modelname.go
🚧 Files skipped from review as they are similar to previous changes (5)
  • tools/codegen/cmd/root.go
  • tools/codegen/cmd/modelname.go
  • tools/codegen/pkg/generation/types.go
  • tools/codegen/pkg/modelname/generator.go
  • tools/codegen/pkg/modelname/modelname.go

📝 Walkthrough

Walkthrough

This PR adds +k8s:openapi-model-package annotations to many API package doc.go files, updates go.mod dependency versions, and introduces a new tools/codegen "modelname" generator (CLI command, config types, generator implementation, helper, and wiring into the default generator pipeline).

Suggested reviewers

  • JoelSpeed
🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Test Structure And Quality ⚠️ Warning The Ginkgo test code has multiple assertion statements lacking meaningful failure messages, violating the quality requirement for helpful diagnostics. Add descriptive messages to assertions at lines 131, 137, 144, 145, 178, 235, 282, 293, 298, etc. (e.g., "failed to wait for CRD installation", "failed to delete test resources") to meet best practices.
✅ Passed checks (14 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: implementing the OpenAPIModelNamer interface, which aligns with the PR's core objective and the substantial changes throughout the codebase.
Description check ✅ Passed The description relates to the changeset by explaining the consequence of implementing the OpenAPIModelNamer interface and its impact on generated OpenAPI JSON structure, though it contains 'TBD' indicating incomplete details.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed PR contains no test files with Ginkgo test names. Changes are limited to doc.go annotations, dependency updates, and new code generator implementation without any test code modifications.
Microshift Test Compatibility ✅ Passed No new Ginkgo e2e tests added. PR changes include OpenAPI annotations in doc.go files, go.mod updates, and code generation tooling. Test infrastructure pre-exists this PR.
Single Node Openshift (Sno) Test Compatibility ✅ Passed This PR does not add any Ginkgo e2e tests. Changes are limited to API package annotations, dependency updates, and code generation tools. The custom check is not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed PR adds code generation infrastructure (model name generator, doc.go annotations, dependencies). No deployment manifests, operator code, or scheduling constraints are introduced.
Ote Binary Stdout Contract ✅ Passed PR adds code generation tooling, not test binaries. tools/codegen is a CLI code generator, not an OTE test runner that communicates JSON to openshift-tests.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No new Ginkgo e2e tests in this PR. Changes are OpenAPI markers, dependencies, and code generation tools only.
No-Weak-Crypto ✅ Passed PR contains no weak cryptography (MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB), custom crypto implementations, or non-constant-time comparisons; it only adds OpenAPI annotations and a code generator.
Container-Privileges ✅ Passed PR contains no Kubernetes/container manifests with privileged settings; changes are code annotations, dependency updates, and code generation tools.
No-Sensitive-Data-In-Logs ✅ Passed Logging statements only expose safe data: API group/version names, package paths, and error messages. No passwords, tokens, API keys, PII, session IDs, hostnames, or customer data in logs.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

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

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

Error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented
The command is terminated due to an error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented


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

@openshift-ci openshift-ci Bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label May 25, 2026
@openshift-ci openshift-ci Bot requested review from abhat and bparees May 25, 2026 18:45
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

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

Inline comments:
In `@platform/v1alpha1/doc.go`:
- Line 4: Remove the conflicting code-gen directive or reconcile the package
comment: either delete the
"+k8s:openapi-model-package=com.github.openshift.api.platform.v1alpha1"
directive from the deprecated platform/v1alpha1 doc.go so the file matches the
existing "kept here for historical reference only" comment, or if you intend
this API to participate in code generation, update the deprecation text in
doc.go to remove/adjust language that says it "will not be used to generate
code" so it accurately reflects that code-gen is enabled.

In `@tools/codegen/pkg/modelname/modelname.go`:
- Line 17: The generateModelNames function currently ignores the verify bool;
modify generateModelNames(globalParser *parser.Parser, universe types.Universe,
packagePath, outputFileName, headerFilePath string, verify bool) to first
generate the model-name output into a memory buffer/string (using the existing
generation logic that uses globalParser/universe/packagePath/headerFilePath),
and then: if verify is true, read the existing outputFileName from disk and
compare it to the generated buffer and return a non-nil error when they differ
(so CI/--verify fails) without writing any files; if verify is false, proceed to
write headerFilePath/outputFileName as before. Ensure the compare treats missing
file as a mismatch and include clear error messages.
- Around line 39-43: The helper myTargets should not call klog.Fatalf; instead
propagate the error: change myTargets from func(context *gengenerator.Context)
[]gengenerator.Target to func(context *gengenerator.Context)
([]gengenerator.Target, error), remove klog.Fatalf("Failed loading boilerplate:
%v", err) and return nil, fmt.Errorf("loading boilerplate: %w", err) (or the
preferred error type), and update any callers to handle the returned error and
aggregate/report it through the generator's normal error path; keep the
gengo.GoBoilerplate invocation and error check but return the error instead of
exiting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 2ecb0b5a-773b-457b-9d2b-0f401b72230c

📥 Commits

Reviewing files that changed from the base of the PR and between 09730f8 and cfd52d6.

⛔ Files ignored due to path filters (245)
  • apiextensions/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • apiserver/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • apps/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • authorization/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • build/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • cloudnetwork/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • config/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • config/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • config/v1alpha2/zz_generated.model_name.go is excluded by !**/zz_generated*
  • console/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • etcd/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • etcd/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • example/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • example/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • go.sum is excluded by !**/*.sum
  • helm/v1beta1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • image/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • imageregistry/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • insights/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • insights/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • insights/v1alpha2/zz_generated.model_name.go is excluded by !**/zz_generated*
  • kubecontrolplane/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • legacyconfig/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machine/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machine/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machine/v1beta1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machineconfiguration/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • machineconfiguration/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • monitoring/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • network/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • network/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • networkoperator/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • oauth/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**, !**/zz_generated*
  • openshiftcontrolplane/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operator/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operator/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operatorcontrolplane/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • operatoringress/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • osin/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • project/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • quota/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • route/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • samples/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • security/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • securityinternal/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • servicecertsigner/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • sharedresource/v1alpha1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • template/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • user/v1/zz_generated.model_name.go is excluded by !**/zz_generated*
  • vendor/github.com/emicklei/go-restful/v3/.travis.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/compress.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/curly.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/custom_verb.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/entity_accessors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/jsoniter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/jsr311.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/emicklei/go-restful/v3/route.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.codecov.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.mockery.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/cmd_utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/convert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/convert_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/format.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/sizeof.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/type_constraints.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/convert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/convert_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/path.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/go.work is excluded by !**/*.work, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/go.work.sum is excluded by !**/*.sum, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/initialism_index.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/name_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/ifaces.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/registry_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/registry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/adapter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/concat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/loading.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/BENCHMARK.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/initialism_index.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/name_lexem.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/name_mangler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/pools.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/split.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/string_bytes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/name_lexem.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/net.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/net.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/split.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/collection_formats.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils/strings.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/stringutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/typeutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/yamlutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/josharian/intern/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/josharian/intern/intern.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/josharian/intern/license.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/buffer/pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/bytestostr.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jlexer/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mailru/easyjson/jwriter/writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/spf13/pflag/flag.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/mod/semver/semver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/client_priority_go126.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/client_priority_go127.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/frame.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/http2.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/httpsfv/httpsfv.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/sync/errgroup/errgroup.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/secure/bidirule/bidirule.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/forminfo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables10.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables11.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables12.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables15.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables17.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/text/unicode/norm/tables9.0.0.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/cursor.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/inspector.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/ast/inspector/iter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/packages/packages.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/packages/visit.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/types/objectpath/objectpath.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/types/typeutil/callee.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/go/types/typeutil/map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/aliases/aliases.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/aliases/aliases_go122.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/event/core/event.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/event/core/export.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/event/keys/keys.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/event/label/label.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/bimport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/iexport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/iimport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/stdlib/deps.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/stdlib/import.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/stdlib/manifest.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/stdlib/stdlib.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typeparams/free.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typeparams/normalize.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/classify_call.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/element.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/fx.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/isnamed.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/qualifier.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/varkind.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/tools/internal/versions/features.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/NOTICE is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/apic.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/emitterc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/encode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/parserc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/readerc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/resolve.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/scannerc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/sorter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/gopkg.in/yaml.v3/writerc.go is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (55)
  • apiextensions/v1alpha1/doc.go
  • apiserver/v1/doc.go
  • apps/v1/doc.go
  • authorization/v1/doc.go
  • build/v1/doc.go
  • cloudnetwork/v1/doc.go
  • config/v1/doc.go
  • config/v1alpha1/doc.go
  • config/v1alpha2/doc.go
  • console/v1/doc.go
  • etcd/v1/doc.go
  • etcd/v1alpha1/doc.go
  • example/v1/doc.go
  • example/v1alpha1/doc.go
  • go.mod
  • helm/v1beta1/doc.go
  • image/v1/doc.go
  • imageregistry/v1/doc.go
  • insights/v1/doc.go
  • insights/v1alpha1/doc.go
  • insights/v1alpha2/doc.go
  • kubecontrolplane/v1/doc.go
  • legacyconfig/v1/doc.go
  • machine/v1/doc.go
  • machine/v1alpha1/doc.go
  • machine/v1beta1/doc.go
  • machineconfiguration/v1/doc.go
  • machineconfiguration/v1alpha1/doc.go
  • monitoring/v1/doc.go
  • network/v1/doc.go
  • network/v1alpha1/doc.go
  • networkoperator/v1/doc.go
  • oauth/v1/doc.go
  • openshiftcontrolplane/v1/doc.go
  • operator/v1/doc.go
  • operator/v1alpha1/doc.go
  • operatorcontrolplane/v1alpha1/doc.go
  • operatoringress/v1/doc.go
  • osin/v1/doc.go
  • platform/v1alpha1/doc.go
  • project/v1/doc.go
  • quota/v1/doc.go
  • route/v1/doc.go
  • samples/v1/doc.go
  • security/v1/doc.go
  • securityinternal/v1/doc.go
  • servicecertsigner/v1alpha1/doc.go
  • sharedresource/v1alpha1/doc.go
  • template/v1/doc.go
  • tools/codegen/cmd/modelname.go
  • tools/codegen/cmd/root.go
  • tools/codegen/pkg/generation/types.go
  • tools/codegen/pkg/modelname/generator.go
  • tools/codegen/pkg/modelname/modelname.go
  • user/v1/doc.go

Comment thread platform/v1alpha1/doc.go
// +k8s:deepcopy-gen=package,register
// +k8s:defaulter-gen=TypeMeta
// +k8s:openapi-gen=true
// +k8s:openapi-model-package=com.github.openshift.api.platform.v1alpha1
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Inconsistency: Adding code-generation directive to deprecated API.

The existing comment at lines 10-16 explicitly states that this API "will not be used to generate code by code-gen" and is "kept here for historical reference only." Adding the +k8s:openapi-model-package directive contradicts this statement.

Either remove this directive from the deprecated platform/v1alpha1 package, or update the comment if the API should now participate in code generation.

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

In `@platform/v1alpha1/doc.go` at line 4, Remove the conflicting code-gen
directive or reconcile the package comment: either delete the
"+k8s:openapi-model-package=com.github.openshift.api.platform.v1alpha1"
directive from the deprecated platform/v1alpha1 doc.go so the file matches the
existing "kept here for historical reference only" comment, or if you intend
this API to participate in code generation, update the deprecation text in
doc.go to remove/adjust language that says it "will not be used to generate
code" so it accurately reflects that code-gen is enabled.

)

// generateModelNames generates the model name functions for the given API package path.
func generateModelNames(globalParser *parser.Parser, universe types.Universe, packagePath, outputFileName, headerFilePath string, verify bool) error {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

verify mode is currently ignored in model-name generation.

Line 17 accepts verify, but the function never uses it. That makes verify and generate execution effectively identical for this generator, which can break expected --verify behavior.

Also applies to: 24-35, 48-57

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

In `@tools/codegen/pkg/modelname/modelname.go` at line 17, The generateModelNames
function currently ignores the verify bool; modify
generateModelNames(globalParser *parser.Parser, universe types.Universe,
packagePath, outputFileName, headerFilePath string, verify bool) to first
generate the model-name output into a memory buffer/string (using the existing
generation logic that uses globalParser/universe/packagePath/headerFilePath),
and then: if verify is true, read the existing outputFileName from disk and
compare it to the generated buffer and return a non-nil error when they differ
(so CI/--verify fails) without writing any files; if verify is false, proceed to
write headerFilePath/outputFileName as before. Ensure the compare treats missing
file as a mismatch and include clear error messages.

Comment on lines +39 to +43
myTargets := func(context *gengenerator.Context) []gengenerator.Target {
boilerplate, err := gengo.GoBoilerplate(arguments.GoHeaderFile, gengo.StdBuildTag, gengo.StdGeneratedBy)
if err != nil {
klog.Fatalf("Failed loading boilerplate: %v", err)
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Avoid terminating the whole process from this helper.

Line 42 uses klog.Fatalf, which exits immediately and bypasses the normal per-generator error aggregation path. Return an error instead so failures are reported consistently.

Proposed fix
-	myTargets := func(context *gengenerator.Context) []gengenerator.Target {
-		boilerplate, err := gengo.GoBoilerplate(arguments.GoHeaderFile, gengo.StdBuildTag, gengo.StdGeneratedBy)
-		if err != nil {
-			klog.Fatalf("Failed loading boilerplate: %v", err)
-		}
-
-		return generators.GetModelNameTargets(context, arguments, boilerplate)
-	}
+	boilerplate, err := gengo.GoBoilerplate(arguments.GoHeaderFile, gengo.StdBuildTag, gengo.StdGeneratedBy)
+	if err != nil {
+		return fmt.Errorf("failed loading boilerplate: %w", err)
+	}
+	myTargets := func(context *gengenerator.Context) []gengenerator.Target {
+		return generators.GetModelNameTargets(context, arguments, boilerplate)
+	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tools/codegen/pkg/modelname/modelname.go` around lines 39 - 43, The helper
myTargets should not call klog.Fatalf; instead propagate the error: change
myTargets from func(context *gengenerator.Context) []gengenerator.Target to
func(context *gengenerator.Context) ([]gengenerator.Target, error), remove
klog.Fatalf("Failed loading boilerplate: %v", err) and return nil,
fmt.Errorf("loading boilerplate: %w", err) (or the preferred error type), and
update any callers to handle the returned error and aggregate/report it through
the generator's normal error path; keep the gengo.GoBoilerplate invocation and
error check but return the error instead of exiting.

@ingvagabund
Copy link
Copy Markdown
Member Author

ingvagabund commented May 26, 2026

ci/prow/verify-client-go fails because of:

go: updates to go.mod needed; to update it:
	go mod tidy

Checking the job definition under openshift/release the script replaces o/api dep in o/client-go.

Is the ci job expected to be overridden in case the API definition changes?

@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch from cfd52d6 to 7d170fd Compare May 26, 2026 12:44
@ingvagabund
Copy link
Copy Markdown
Member Author

/retest-required

@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch from 7d170fd to 2cac22d Compare May 27, 2026 13:44
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 27, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign joelspeed for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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

@ingvagabund ingvagabund changed the title wip: feat: implement OpenAPIModelNamer interface CNTRLPLANE-2449: wip: feat: implement OpenAPIModelNamer interface May 27, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label May 27, 2026
@openshift-ci-robot
Copy link
Copy Markdown

openshift-ci-robot commented May 27, 2026

@ingvagabund: This pull request references CNTRLPLANE-2449 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

TBD

Consequence of kubernetes/kubernetes#131755

Important note: the current openapi/openapi.json is generated with the openshift type names in com.github.openshift.api.<group>.<version>.<TypeName> order. Implementing the new interface results in the openshift types names generated in <TypeName>.<version>.<group>.api.openshift.github.com. Which completely reshuffles the keys in openapi/openapi.json. Which makes it hard to follow the changes. The kubernetes types already follow this new naming schema. E.g. APIGroup.v1.meta.apis.pkg.apimachinery.k8s.io.

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

@openshift-ci openshift-ci Bot added needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. and removed do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. labels May 27, 2026
@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch from 2cac22d to 14f7da2 Compare May 27, 2026 16:39
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 27, 2026
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 27, 2026
@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch from 14f7da2 to 8a7f7b4 Compare June 1, 2026 10:17
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 1, 2026
@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch from 8a7f7b4 to 03828e0 Compare June 1, 2026 12:36
@ingvagabund ingvagabund changed the title CNTRLPLANE-2449: wip: feat: implement OpenAPIModelNamer interface CNTRLPLANE-2449: feat: implement OpenAPIModelNamer interface Jun 1, 2026
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Jun 1, 2026

@ingvagabund: The following test 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/verify-client-go 03828e0 link true /test verify-client-go

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

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants