Move the fn render --save-on-failure options to Kptfile#4411
Merged
efiacor merged 2 commits intokptdev:mainfrom Feb 25, 2026
Merged
Move the fn render --save-on-failure options to Kptfile#4411efiacor merged 2 commits intokptdev:mainfrom
efiacor merged 2 commits intokptdev:mainfrom
Conversation
Signed-off-by: aravind.est <aravindhan.a@est.tech>
✅ Deploy Preview for kptdocs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Contributor
Contributor
There was a problem hiding this comment.
Pull request overview
Moves the “save partially rendered resources on render failure” behavior from a kpt fn render CLI flag to a package-level Kptfile annotation to support programmatic rendering flows (e.g., Porch).
Changes:
- Removed
--save-on-render-failureflag and the correspondingRunnerOptions/test-runner config plumbing. - Added
kpt.dev/save-on-render-failure: "true"annotation support (constant + executor behavior). - Updated e2e test packages/expectations to declare the behavior via Kptfile annotations.
Reviewed changes
Copilot reviewed 49 out of 55 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| pkg/test/runner/runner.go | Stops passing --save-on-render-failure from the test harness. |
| pkg/test/runner/config.go | Removes test config knob that previously toggled the CLI flag. |
| pkg/lib/runneroptions/runneroptions.go | Removes SaveOnRenderFailure from runner invocation options. |
| pkg/api/kptfile/v1/types.go | Introduces SaveOnRenderFailureAnnotation constant used by the renderer. |
| internal/util/render/executor.go | Reads save-on-failure behavior from root Kptfile annotation and uses it during hydration/write. |
| internal/util/render/executor_test.go | Minor formatting change in an existing test struct. |
| commands/fn/render/cmdrender.go | Removes the --save-on-render-failure CLI flag. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/Kptfile | Declares save-on-failure via Kptfile annotation for this scenario. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
| e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/Kptfile | Declares save-on-failure via Kptfile annotation for BFS scenario. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/diff.patch | Updates expected patch output to match new behavior/baselines. |
| e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/config.yaml | Removes saveOnRenderFailure from test config (now in Kptfile). |
Comments suppressed due to low confidence (3)
internal/util/render/executor.go:1
- This silently treats any non-
ConditionTruevalue (including typos like\"ture\") as disabled, which can make misconfiguration hard to detect. Consider validating the annotation value explicitly and returning a clear error when the annotation is present but not a supported boolean value (mirroring whatever validation policy you want forkpt.dev/bfs-rendering).
pkg/api/kptfile/v1/types.go:1 - Both doc comments are attached to the const block rather than the individual constants, which can make GoDoc output less clear when multiple constants share a block. Consider moving each comment to sit directly above its respective constant (or splitting into separate const blocks) so
BFSRenderAnnotationandSaveOnRenderFailureAnnotationare documented independently.
internal/util/render/executor.go:1 - The control flow for error handling/write behavior now depends on the new
kpt.dev/save-on-render-failureannotation. There doesn’t appear to be a unit test covering the annotation-driven toggle (enabled vs disabled) ininternal/util/render/executor_test.go; adding one would help prevent regressions independent of e2e fixtures.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: aravind.est <aravindhan.a@est.tech>
liamfallon
approved these changes
Feb 25, 2026
efiacor
approved these changes
Feb 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replace the
--save-on-render-failureCLI flag with a Kptfile annotation (kpt.dev/save-on-render-failure: "true"), making save-on-render-failure a package-level declaration rather than an invocation-time option.This follows the same pattern as
kpt.dev/bfs-renderingand makes the behaviour controllable via the Kptfile, which is essential for Porch integration where packages are rendered programmatically without CLI flags.Part of: nephio-project/nephio#1009
Changes
New Annotation:
kpn fn render cli flag
--save-on-render-failureremoved and the annotationkpt.dev/save-on-render-failurein the Kptfile is providing the same feature.Changes
File Changes
Next Steps: