Repository navigation
[cozystack-api] Disable startegic-json-patch support - #1179
Conversation
Signed-off-by: Andrei Kvapil <[email protected]>
WalkthroughA new constant for the MIME type "application/strategic-merge-patch+json" was introduced. The OpenAPI v2 and v3 post-processing functions were updated to remove this MIME type from all PATCH operations in the generated OpenAPI documents, ensuring it is no longer advertised as supported. Changes
Suggested reviewers
Poem
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (2)
pkg/cmd/server/openapi.go (2)
19-19: Consider using a more descriptive constant name.While
smpis concise, a more descriptive name likestrategicMergePatchContentTypewould improve code readability and maintainability.- smp = "application/strategic-merge-patch+json" + strategicMergePatchContentType = "application/strategic-merge-patch+json"
205-218: Consider using slices.DeleteFunc for more idiomatic filtering.The current filtering logic is correct but could be more concise using Go's built-in slice utilities.
- if op.Patch != nil && len(op.Patch.Consumes) > 0 { - var out []string - for _, c := range op.Patch.Consumes { - if c != smp { - out = append(out, c) - } - } - op.Patch.Consumes = out - sw.Paths.Paths[p] = op - } + if op.Patch != nil && len(op.Patch.Consumes) > 0 { + op.Patch.Consumes = slices.DeleteFunc(op.Patch.Consumes, func(c string) bool { + return c == smp + }) + sw.Paths.Paths[p] = op + }Note: This would require importing
slicespackage (import "slices").
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
pkg/cmd/server/openapi.go(5 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Build
- GitHub Check: pre-commit
🔇 Additional comments (1)
pkg/cmd/server/openapi.go (1)
142-151: LGTM! Clean implementation for OpenAPI v3.The logic correctly iterates through all paths and removes the strategic-merge-patch+json MIME type from PATCH operations. The null checks are appropriate and the implementation follows the existing code patterns.
Signed-off-by: Andrei Kvapil [email protected]
What this PR does
This PR adds a post-processing hook that removes application/strategic-merge-patch+json from every PATCH operation in the generated OpenAPI v2/v3 specs.
Strategic-merge-patch (SMP) is never supported for CRDs, and our aggregated API implementation can’t handle it either. When the spec advertises SMP, kubectl picks that media-type by default and sends an SMP body, which the apiserver then rejects with
unable to find api field in struct JSON for the json field ….
By dropping SMP from consumes / content:
application/merge-patch+json or application/json-patch+json.
No changes are required on the handler side—only the advertised media-types are updated.
Release note