Skip to content

CNTRLPLANE-2449: feat: implement OpenAPIModelNamer interface#2856

Merged
openshift-merge-bot[bot] merged 6 commits into
openshift:masterfrom
ingvagabund:implement-OpenAPIModelNamer-interface
Jun 19, 2026
Merged

CNTRLPLANE-2449: feat: implement OpenAPIModelNamer interface#2856
openshift-merge-bot[bot] merged 6 commits into
openshift:masterfrom
ingvagabund:implement-OpenAPIModelNamer-interface

Conversation

@ingvagabund

@ingvagabund ingvagabund commented May 25, 2026

Copy link
Copy Markdown
Member

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

openshift-ci Bot commented May 25, 2026

Copy link
Copy Markdown
Contributor

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

coderabbitai Bot commented May 25, 2026

Copy link
Copy Markdown

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
📝 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

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 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 Outdated
// +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.

Comment thread tools/codegen/pkg/modelname/modelname.go
Comment thread tools/codegen/pkg/modelname/modelname.go Outdated
@ingvagabund

ingvagabund commented May 26, 2026

Copy link
Copy Markdown
Member Author

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
@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

openshift-ci-robot commented May 27, 2026

Copy link
Copy Markdown

@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
@everettraven

Copy link
Copy Markdown
Contributor

At a brief glance, this seems fairly good overall. There are a few CodeRabbit comments that seemed reasonable to me to address.

Once those are addressed, I'll do a more thorough review by pulling down the changes here so that I can better review the raw generated openapi JSON.

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 2, 2026
@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch 2 times, most recently from 69cf31a to cb5e1fd Compare June 4, 2026 09:19
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 4, 2026
@everettraven

Copy link
Copy Markdown
Contributor

@ingvagabund Thanks for the proof PR. I'll wait for the additional proof PRs before I override the failing check, but the change to client-go looks reasonable to incorporate the changes from this PR.

Let me know when you'd like the override here.

@ingvagabund

ingvagabund commented Jun 18, 2026

Copy link
Copy Markdown
Member Author

After digging deeper:

  1. openshift/client-go@388a325 only renames Kubernetes types. All the openshift types are already using the new naming convention (introduced in 2022). Because of that none of the openshift operator code bases need to be altered.
  2. Looking at openshift/client-go@75befef the Kubernetes types were already migrated to the new naming convention before the change. So Remove CSIBlockVolume from tech preview in 4.2 #365 regenerated the kubernetes naming back to the reflection one. Because of that I am "just" undoing this change.
  3. MON-4033: Add OpenShiftMetricsConfig #2726 regenerated openapi/openapi.json back to the old naming. Since in one of the vendor bumps k8s.io/kube-openapi brough the new OpenAPIModelName interface that was already returning the new name (in the right order). Before that, when Kubernetes used the reflection based naming, friendlyName function was invoked to generate the openshift type schemas with the reversed ordering (that resembles the new naming convention). After the bump there was no need for invoking friendlyName (since OpenAPIModelName already returned the reversed name). Yet, friendlyName was not removed (forgotten/missed) which cause reverting the revert and flipping the Kubernetes naming back to the old convention.

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 18, 2026
@ingvagabund

ingvagabund commented Jun 18, 2026

Copy link
Copy Markdown
Member Author

@everettraven there's no need for any evidence PR. Actually, the change under openapi/openapi.json is fixing the regression back to the right new kubernetes naming. So openshift/client-go#381 is sufficient evidence that the client-go regenerated internal.go files are "resetting" back to how they were before this whole OpenAPIModelName interface "revolution".

@everettraven

Copy link
Copy Markdown
Contributor

@ingvagabund Sounds good.

Let's get this rebased and then I can help get it merged. Once merged, we can get client-go updated.

@ingvagabund ingvagabund force-pushed the implement-OpenAPIModelNamer-interface branch from ccf82b0 to 63e0c6d Compare June 18, 2026 19:08
@openshift-ci openshift-ci Bot removed lgtm Indicates that a PR is ready to be merged. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. labels Jun 18, 2026
@ingvagabund

Copy link
Copy Markdown
Member Author

Rebased

@JoelSpeed

Copy link
Copy Markdown
Contributor

/lgtm
/override ci/prow/verify-client-go

/hold

Feel free to unhold if you're ready for this to merge

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jun 19, 2026
@openshift-ci

openshift-ci Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

@JoelSpeed: Overrode contexts on behalf of JoelSpeed: ci/prow/verify-client-go

Details

In response to this:

/lgtm
/override ci/prow/verify-client-go

/hold

Feel free to unhold if you're ready for this to merge

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

@openshift-ci

openshift-ci Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

@ingvagabund: all tests passed!

Full PR test history. Your PR dashboard.

Details

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

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Jun 19, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification

No second-stage tests were triggered for this PR.

This can happen when:

  • The changed files don't match any pipeline_run_if_changed patterns
  • All files match pipeline_skip_if_only_changed patterns
  • No pipeline-controlled jobs are defined for the master branch

Use /test ? to see all available tests.

@openshift-ci

openshift-ci Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: everettraven, JoelSpeed

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

The pull request process is described here

Details Needs approval from an approver in each of these files:
  • OWNERS [JoelSpeed,everettraven]

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

@ingvagabund

Copy link
Copy Markdown
Member Author

/verified by ingvagabund and openshift/client-go#381

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Jun 19, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@ingvagabund: This PR has been marked as verified by ingvagabund and https://github.com/openshift/client-go/pull/381.

Details

In response to this:

/verified by ingvagabund and openshift/client-go#381

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.

@ingvagabund

Copy link
Copy Markdown
Member Author

/hold cancel

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jun 19, 2026
@openshift-merge-bot openshift-merge-bot Bot merged commit 5346161 into openshift:master Jun 19, 2026
16 checks passed
@ingvagabund ingvagabund deleted the implement-OpenAPIModelNamer-interface branch June 19, 2026 10:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants