diff --git a/commands/fn/render/cmdrender.go b/commands/fn/render/cmdrender.go index 851f0ca93c..43426ebef9 100644 --- a/commands/fn/render/cmdrender.go +++ b/commands/fn/render/cmdrender.go @@ -63,8 +63,6 @@ func NewRunner(ctx context.Context, parent string) *Runner { "allow functions to access network during pipeline execution.") c.Flags().BoolVar(&r.RunnerOptions.AllowWasm, "allow-alpha-wasm", r.RunnerOptions.AllowWasm, "allow wasm to be used during pipeline execution.") - c.Flags().BoolVar(&r.RunnerOptions.SaveOnRenderFailure, "save-on-render-failure", r.RunnerOptions.SaveOnRenderFailure, - "save partially rendered resources when rendering fails.") cmdutil.FixDocs("kpt", parent, c) r.Command = c return r diff --git a/documentation/content/en/book/02-concepts/_index.md b/documentation/content/en/book/02-concepts/_index.md index 362223757b..c102d2db17 100644 --- a/documentation/content/en/book/02-concepts/_index.md +++ b/documentation/content/en/book/02-concepts/_index.md @@ -88,6 +88,16 @@ YAML as the file format. A package is explicitly declared using a file named `Kptfile` containing a KRM resource of kind `Kptfile`. The Kptfile contains metadata about the package and is just a regular resource in the YAML format. +### Kptfile Annotations + +The Kptfile supports annotations that control package-level behaviour: + +- **`kpt.dev/bfs-rendering`**: When set to `"true"`, renders the package hierarchy in breadth-first order instead of +the default depth-first post-order. +- **`kpt.dev/save-on-render-failure`**: When set to `"true"`, saves partially rendered resources to disk even when +rendering fails, instead of reverting all changes. This is particularly useful for debugging render failures and is +essential for programmatic package rendering scenarios where preserving partial progress is valuable. + Just as directories can be nested, a package can contain another package, called a _subpackage_. Let's take a look at the wordpress package as an example: diff --git a/documentation/content/en/book/04-using-functions/_index.md b/documentation/content/en/book/04-using-functions/_index.md index 3c6b228ed2..b2ec711e7b 100644 --- a/documentation/content/en/book/04-using-functions/_index.md +++ b/documentation/content/en/book/04-using-functions/_index.md @@ -124,8 +124,38 @@ The end result is that: 3. Resources in `mysql` and `wordpress` packages are validated against their OpenAPI spec. -If any of the functions in the pipeline fails for whatever reason, then the -entire pipeline is aborted and the local filesystem is left intact. +### Debugging render failures + +When a render pipeline fails, you can configure the package to save partially rendered resources to disk. +This is particularly useful for debugging function pipeline issues by inspecting what changes were made before +the failure occurred. + +By default, partially rendered resources are not saved when render fails. To enable this behaviour, +add the `kpt.dev/save-on-render-failure` annotation to the Kptfile's metadata section: + +```yaml +apiVersion: kpt.dev/v1 +kind: Kptfile +metadata: + name: wordpress + annotations: + kpt.dev/save-on-render-failure: "true" +pipeline: + mutators: + - image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest + configMap: + app: wordpress + validators: + - image: ghcr.io/kptdev/krm-functions-catalog/kubeconform:latest +``` + +With this annotation set to `"true"`, if a function in the pipeline fails, kpt will save all resources that were +successfully processed up to the point of failure. This allows you to examine the intermediate state and understand +what transformations were applied before the error. + +This annotation follows the same pattern as `kpt.dev/bfs-rendering` and must be declared in the root package's Kptfile +before running `kpt fn render`. + ### Specifying `function` diff --git a/documentation/content/en/reference/cli/fn/render/_index.md b/documentation/content/en/reference/cli/fn/render/_index.md index 397b237469..4cde120dab 100644 --- a/documentation/content/en/reference/cli/fn/render/_index.md +++ b/documentation/content/en/reference/cli/fn/render/_index.md @@ -74,6 +74,18 @@ PKG_PATH: If not specified, no result files are written to the local filesystem. ``` +#### Kptfile Annotations + +```shell +kpt.dev/save-on-render-failure: + Controls whether partially rendered resources are saved when rendering fails. + Set to "true" in the Kptfile metadata.annotations section to preserve the state + of resources at the point of failure. This is useful for debugging render failures + and understanding what changes were applied before the error occurred. + This follows the same pattern as kpt.dev/bfs-rendering annotation. + Default: false (failures will revert changes). +``` + #### Environment Variables ```shell @@ -131,6 +143,17 @@ $ KRM_FN_RUNTIME=podman kpt fn render my-package-dir $ kpt fn render --allow-network ``` +```shell +# Example Kptfile with save-on-render-failure annotation +apiVersion: kpt.dev/v1 +kind: Kptfile +metadata: + name: my-package + annotations: + kpt.dev/save-on-render-failure: "true" +... +``` + [declarative functions execution]: diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/diff.patch index 3d21e4a397..b0b6b3e100 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/.expected/diff.patch @@ -1,11 +1,11 @@ diff --git a/Kptfile b/Kptfile -index 2b64f0f..b2b7aa6 100644 +index ec2c042..d795f4f 100644 --- a/Kptfile +++ b/Kptfile -@@ -3,7 +3,9 @@ kind: Kptfile - metadata: +@@ -4,7 +4,9 @@ metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" + app: myapp name: save-on-render-failure + namespace: staging @@ -28,4 +28,4 @@ index 0848ba0..7eece9b 100644 + template: + metadata: + annotations: -+ app: myapp \ No newline at end of file ++ app: myapp diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/Kptfile index 2b64f0fbec..ec2c042dc7 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-basicpipeline/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: save-on-render-failure pipeline: mutators: diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/diff.patch index 193aaf8a82..3efb8adbb5 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 20f0a00..1129926 100644 +index dbd6541..bc4fd2d 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,10 +4,12 @@ metadata: - annotations: +@@ -5,10 +5,12 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-deep-nested-middle-fails + labels: + level: root @@ -82,4 +82,4 @@ index ab7d3fa..1eeeaed 100644 + labels: + level: level1 data: - level: level2 \ No newline at end of file + level: level2 diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/Kptfile index 20f0a00674..dbd6541cc7 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-deep-nested-middle-fails/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-deep-nested-middle-fails info: description: BFS - Deep nested, middle level fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/diff.patch index 4092050b8f..8a582dcd77 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 436929b..101eb46 100644 +index e9fad85..1b08a62 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,6 +4,8 @@ metadata: - annotations: +@@ -5,6 +5,8 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-multiple-subpkgs-one-fails + labels: + pkg: root @@ -121,4 +121,4 @@ index dc257b3..3a13d11 100644 + template: + metadata: + labels: -+ pkg: root \ No newline at end of file ++ pkg: root diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/Kptfile index 436929b34e..e9fad85916 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-multiple-subpkgs-one-fails/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-multiple-subpkgs-one-fails info: description: BFS - Multiple subpackages, sub2 fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/diff.patch index c0e0fc087f..6154172d4a 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 542177a..a19bbc4 100644 +index cbe756f..a5fa6c0 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,6 +4,8 @@ metadata: - annotations: +@@ -5,6 +5,8 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-parent-and-subpkg-both-fail + labels: + pkg: root @@ -50,4 +50,4 @@ index 276bf9e..d6424da 100644 ports: - port: 80 + selector: -+ pkg: root \ No newline at end of file ++ pkg: root diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/Kptfile index 542177a62e..cbe756f987 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-and-subpkg-both-fail/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-parent-and-subpkg-both-fail info: description: BFS - Both parent and subpackage fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/diff.patch index db09e9e1c4..d7619bd383 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 2391a7a..0e48609 100644 +index c80b904..6954e67 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,11 +4,13 @@ metadata: - annotations: +@@ -5,11 +5,13 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-parent-mutator-fails + labels: + test: parent-mutator-fail @@ -56,4 +56,4 @@ index 276bf9e..acfae7a 100644 ports: - port: 80 + selector: -+ test: parent-mutator-fail \ No newline at end of file ++ test: parent-mutator-fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/Kptfile index 2391a7a46f..c80b904236 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-mutator-fails/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-parent-mutator-fails info: description: BFS - Parent mutator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/diff.patch index 60248a863e..1d8bba0c89 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 3e37f10..87a67b1 100644 +index 491b12e..8c66fe7 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,12 +4,14 @@ metadata: - annotations: +@@ -5,12 +5,14 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-parent-validator-fails + labels: + test: parent-fail @@ -57,4 +57,4 @@ index 276bf9e..fe08496 100644 ports: - port: 80 + selector: -+ test: parent-fail \ No newline at end of file ++ test: parent-fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/Kptfile index 3e37f10ba1..491b12e732 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-parent-validator-fails/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-parent-validator-fails info: description: BFS - Parent validator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/diff.patch index 00b634249f..5c771fd77f 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 95a1035..aa44f54 100644 +index 84b93a6..877725d 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,10 +4,12 @@ metadata: - annotations: +@@ -5,10 +5,12 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-subpkg-mutator-fails + labels: + test: mutator-fail @@ -68,4 +68,4 @@ index 302322e..546fe5c 100644 + template: + metadata: + labels: -+ test: mutator-fail \ No newline at end of file ++ test: mutator-fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/Kptfile index 95a103593b..84b93a6de8 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-mutator-fails/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-subpkg-mutator-fails info: description: BFS - Subpackage mutator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/diff.patch index 676af7c1fd..c18f86ccf4 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 35b7419..08a35b8 100644 +index 86dbe13..c5c38b8 100644 --- a/Kptfile +++ b/Kptfile -@@ -4,11 +4,14 @@ metadata: - annotations: +@@ -5,11 +5,14 @@ metadata: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-subpkg-validator-fails + labels: + level: root @@ -78,4 +78,4 @@ index 302322e..dfe3056 100644 + metadata: + labels: + level: root -+ test: subpkg-fail \ No newline at end of file ++ test: subpkg-fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/Kptfile index 35b741942c..86dbe130e7 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/bfs-subpkg-validator-fails/Kptfile @@ -3,6 +3,7 @@ kind: Kptfile metadata: annotations: kpt.dev/bfs-rendering: "true" + kpt.dev/save-on-render-failure: "true" name: bfs-subpkg-validator-fails info: description: BFS - Subpackage validator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/diff.patch index 3449ace228..92754c2fd1 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/.expected/diff.patch @@ -1,13 +1,13 @@ diff --git a/Kptfile b/Kptfile -index a2aef8c..93f2bd5 100644 +index c6fc0c5..1631bfb 100644 --- a/Kptfile +++ b/Kptfile -@@ -2,6 +2,9 @@ apiVersion: kpt.dev/v1 - kind: Kptfile +@@ -3,7 +3,9 @@ kind: Kptfile metadata: - name: save-on-render-failure -+ annotations: + annotations: + kpt.dev/save-on-render-failure: "true" + app: myapp + name: save-on-render-failure + namespace: staging pipeline: mutators: diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/Kptfile index a2aef8c7a6..c6fc0c546a 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-basicpipeline/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: save-on-render-failure pipeline: mutators: diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/diff.patch index 0089e2c4f0..a4012da01e 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/.expected/diff.patch @@ -52,4 +52,4 @@ index ab7d3fa..1eeeaed 100644 + labels: + level: level1 data: - level: level2 \ No newline at end of file + level: level2 diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/Kptfile index 98c6f7b2b9..4047d2778b 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-deep-nested-middle-fails/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-deep-nested-middle-fails info: description: DFS - Deep nested, middle level fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/diff.patch index a576ecda9e..70def2baa5 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/.expected/diff.patch @@ -61,4 +61,4 @@ index 20375ea..7290360 100644 + template: + metadata: + labels: -+ pkg: sub2 \ No newline at end of file ++ pkg: sub2 diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/Kptfile index 010acfb956..c47c90d51f 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-multiple-subpkgs-one-fails/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-multiple-subpkgs-one-fails info: description: DFS - Multiple subpackages, sub2 fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/diff.patch index b667c36b97..e2923d8d42 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/.expected/diff.patch @@ -25,4 +25,4 @@ index 276bf9e..7b26a8d 100644 ports: - port: 80 + selector: -+ pkg: subpkg \ No newline at end of file ++ pkg: subpkg diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/Kptfile index d15ba2c378..e4d630ddc7 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-and-subpkg-both-fail/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-parent-and-subpkg-both-fail info: description: DFS - Both parent and subpackage fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/diff.patch index c99854e65f..0c15742529 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 4feff42..5c4578e 100644 +index c134b37..32d759a 100644 --- a/Kptfile +++ b/Kptfile -@@ -2,11 +2,13 @@ apiVersion: kpt.dev/v1 - kind: Kptfile - metadata: +@@ -4,11 +4,13 @@ metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-parent-mutator-fails + labels: + test: parent-mutator-fail @@ -58,4 +58,4 @@ index 276bf9e..571e684 100644 ports: - port: 80 + selector: -+ test: parent-mutator-fail \ No newline at end of file ++ test: parent-mutator-fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/Kptfile index 4feff42893..c134b37717 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-mutator-fails/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-parent-mutator-fails info: description: DFS - Parent mutator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/diff.patch index 3b7ead5c66..cfdb9a036b 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/.expected/diff.patch @@ -1,10 +1,10 @@ diff --git a/Kptfile b/Kptfile -index 86325b3..2efd0b0 100644 +index 94a7a73..8581173 100644 --- a/Kptfile +++ b/Kptfile -@@ -2,12 +2,14 @@ apiVersion: kpt.dev/v1 - kind: Kptfile - metadata: +@@ -4,12 +4,14 @@ metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-parent-validator-fails + labels: + test: parent-fail @@ -59,4 +59,4 @@ index 276bf9e..3ba5cae 100644 ports: - port: 80 + selector: -+ test: parent-fail \ No newline at end of file ++ test: parent-fail diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/Kptfile index 86325b3796..94a7a73ca7 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-parent-validator-fails/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-parent-validator-fails info: description: DFS - Parent validator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/diff.patch index 383ee185f5..24433c71d9 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/.expected/diff.patch @@ -20,4 +20,4 @@ index 302322e..98ff830 100644 name: sub-deployment + namespace: subpkg-ns spec: - replicas: 2 \ No newline at end of file + replicas: 2 diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/Kptfile index 5234a05c32..80aa788235 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-mutator-fails/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-subpkg-mutator-fails info: description: DFS - Subpackage mutator fails diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/config.yaml b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/config.yaml index 14d9bc5616..2eba311bad 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/config.yaml +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/config.yaml @@ -1,3 +1,2 @@ exitCode: 1 -saveOnRenderFailure: true StdErrRegEx: "(docker: Error response from daemon: Head.*denied|Error.*initializing source docker)" diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/diff.patch b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/diff.patch index 5978ff59d6..0fdd10dee3 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/diff.patch +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/.expected/diff.patch @@ -20,4 +20,4 @@ index 302322e..98ff830 100644 name: sub-deployment + namespace: subpkg-ns spec: - replicas: 2 \ No newline at end of file + replicas: 2 diff --git a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/Kptfile b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/Kptfile index b1ad2b390b..7c3b09a202 100644 --- a/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/Kptfile +++ b/e2e/testdata/fn-render/save-on-render-failure/dfs-subpkg-validator-fails/Kptfile @@ -1,6 +1,8 @@ apiVersion: kpt.dev/v1 kind: Kptfile metadata: + annotations: + kpt.dev/save-on-render-failure: "true" name: dfs-subpkg-validator-fails info: description: DFS - Subpackage validator fails diff --git a/internal/util/render/executor.go b/internal/util/render/executor.go index da09e339e7..d74ccf4957 100644 --- a/internal/util/render/executor.go +++ b/internal/util/render/executor.go @@ -93,6 +93,11 @@ func (e *Renderer) Execute(ctx context.Context) (*fnresult.ResultList, error) { return nil, fmt.Errorf("failed to read Kptfile: %w", err) } + // Read save-on-render-failure behavior from Kptfile annotation + if value, exists := kptfile.Annotations[kptfilev1.SaveOnRenderFailureAnnotation]; exists && kptfilev1.ToCondition(value) == kptfilev1.ConditionTrue { + hctx.saveOnRenderFailure = true + } + // Choose hydration function based on annotation // If the annotation "kpt.dev/bfs-rendering" is set to "true", use hydrateBfsOrder // otherwise use the default hydrate function in depth-first post-order. @@ -103,7 +108,7 @@ func (e *Renderer) Execute(ctx context.Context) (*fnresult.ResultList, error) { _, hydErr := hydrateFn(ctx, root, hctx) - if hydErr != nil && !hctx.runnerOptions.SaveOnRenderFailure { + if hydErr != nil && !hctx.saveOnRenderFailure { _ = e.saveFnResults(ctx, hctx.fnResults) return hctx.fnResults, errors.E(op, root.pkg.UniquePath, hydErr) } @@ -125,8 +130,8 @@ func (e *Renderer) Execute(ctx context.Context) (*fnresult.ResultList, error) { if e.Output == nil { // the intent of the user is to modify resources in-place - // Only write resources if hydration succeeded OR SaveOnRenderFailure is enabled - if hydErr == nil || hctx.runnerOptions.SaveOnRenderFailure { + // Only write resources if hydration succeeded OR save-on-render-failure is enabled + if hydErr == nil || hctx.saveOnRenderFailure { pkgWriter := &kio.LocalPackageReadWriter{ PackagePath: string(root.pkg.UniquePath), PreserveSeqIndent: true, @@ -225,6 +230,10 @@ type hydrationContext struct { // during pipeline execution. fnResults *fnresult.ResultList + // saveOnRenderFailure indicates whether partially rendered resources + // should be saved when rendering fails. Read from the root Kptfile annotation. + saveOnRenderFailure bool + runnerOptions runneroptions.RunnerOptions fileSystem filesys.FileSystem @@ -353,7 +362,7 @@ func hydrate(ctx context.Context, pn *pkgNode, hctx *hydrationContext) (output [ transitiveResources, err = hydrate(ctx, subPkgNode, hctx) if err != nil { - if transitiveResources != nil && hctx.runnerOptions.SaveOnRenderFailure { + if transitiveResources != nil && hctx.saveOnRenderFailure { input = append(input, transitiveResources...) curr.resources = input } @@ -365,7 +374,7 @@ func hydrate(ctx context.Context, pn *pkgNode, hctx *hydrationContext) (output [ output, err = curr.runPipeline(ctx, hctx, input) if err != nil { - if hctx.runnerOptions.SaveOnRenderFailure { + if hctx.saveOnRenderFailure { // Fall back to input if output is nil (early errors before pipeline execution) if output == nil { output = input @@ -503,7 +512,7 @@ func executePipelinesWithScopedVisibility(ctx context.Context, allNodes []*pkgNo input := buildPipelineInputWithScopedVisibility(node, childrenMap) output, err := node.runPipeline(ctx, hctx, input) if err != nil { - if hctx.runnerOptions.SaveOnRenderFailure { + if hctx.saveOnRenderFailure { // Fall back to input if output is nil (early errors before pipeline execution) if output == nil { output = input diff --git a/internal/util/render/executor_test.go b/internal/util/render/executor_test.go index 5d1725d118..2c8e253f54 100644 --- a/internal/util/render/executor_test.go +++ b/internal/util/render/executor_test.go @@ -574,7 +574,7 @@ func TestRenderer_PrintPipelineExecutionSummary(t *testing.T) { func TestPkgNode_ClearAnnotationsOnMutFailure(t *testing.T) { tests := []struct { - name string + name string inputYAML string hasNonRenderingAnnotation bool }{ diff --git a/pkg/api/kptfile/v1/types.go b/pkg/api/kptfile/v1/types.go index 4afb56af5a..656820c448 100644 --- a/pkg/api/kptfile/v1/types.go +++ b/pkg/api/kptfile/v1/types.go @@ -411,8 +411,11 @@ const ( // BFSRenderAnnotation is an annotation that can be used to indicate that a package // should be hydrated from the root package to the subpackages in a Breadth-First Level Order manner. +// SaveOnRenderFailureAnnotation is an annotation that controls whether partially rendered +// resources are saved to disk when rendering fails. const ( - BFSRenderAnnotation = "kpt.dev/bfs-rendering" + BFSRenderAnnotation = "kpt.dev/bfs-rendering" + SaveOnRenderFailureAnnotation = "kpt.dev/save-on-render-failure" ) func ToCondition(value string) ConditionStatus { diff --git a/pkg/lib/runneroptions/runneroptions.go b/pkg/lib/runneroptions/runneroptions.go index 064abb78df..0f6fa19615 100644 --- a/pkg/lib/runneroptions/runneroptions.go +++ b/pkg/lib/runneroptions/runneroptions.go @@ -58,10 +58,6 @@ type RunnerOptions struct { // ResolveToImage will resolve a partial image to a fully-qualified one ResolveToImage ImageResolveFunc - - // SaveOnRenderFailure determines whether to save the partially rendered - // resources when rendering fails. - SaveOnRenderFailure bool } func (opts *RunnerOptions) InitDefaults(defaultImagePrefix string) { diff --git a/pkg/test/runner/config.go b/pkg/test/runner/config.go index 5be14ad930..3c073bc425 100644 --- a/pkg/test/runner/config.go +++ b/pkg/test/runner/config.go @@ -94,9 +94,6 @@ type TestCaseConfig struct { // AllowWasm determines if `fn render` needs to be invoked with `--allow-alpha-wasm` flag AllowWasm bool `json:"allowWasm,omitempty" yaml:"allowWasm,omitempty"` - // SaveOnRenderFailure determines if `fn render` needs to be invoked with `--save-on-render-failure` flag - SaveOnRenderFailure bool `json:"saveOnRenderFailure,omitempty" yaml:"saveOnRenderFailure,omitempty"` - // Skip means should this test case be skipped. Default: false Skip bool `json:"skip,omitempty" yaml:"skip,omitempty"` diff --git a/pkg/test/runner/runner.go b/pkg/test/runner/runner.go index b988d99e85..23575720fd 100644 --- a/pkg/test/runner/runner.go +++ b/pkg/test/runner/runner.go @@ -371,10 +371,6 @@ func (r *Runner) runFnRender() error { kptArgs = append(kptArgs, "--allow-exec") } - if r.testCase.Config.SaveOnRenderFailure { - kptArgs = append(kptArgs, "--save-on-render-failure") - } - if r.testCase.Config.AllowWasm { kptArgs = append(kptArgs, allowWasmFlag) }