From 6fbeb6887fa095516cb8b51efb465ddc095afef9 Mon Sep 17 00:00:00 2001 From: Rashid Alam <115151332+7h3-3mp7y-m4n@users.noreply.github.com> Date: Wed, 3 Sep 2025 03:30:58 +0530 Subject: [PATCH] Fix(cli): return non-zero exit code on `vela def render` error (#6818) * fix exit code on render error Signed-off-by: 7h3-3mp7y-m4n * minor changes Signed-off-by: 7h3-3mp7y-m4n * fix error catch logic Signed-off-by: 7h3-3mp7y-m4n --------- Signed-off-by: 7h3-3mp7y-m4n --- references/cli/def.go | 13 ++++++++++--- references/cli/def_test.go | 18 ++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/references/cli/def.go b/references/cli/def.go index 56b8b0a7b..11ff51e68 100644 --- a/references/cli/def.go +++ b/references/cli/def.go @@ -837,13 +837,20 @@ func NewDefinitionRenderCommand(c common.Args) *cobra.Command { return errors.Wrapf(err, "failed to read directory %s", args[0]) } } + var renderErrs []error for i, inputFilename := range inputFilenames { - if err = render(inputFilename, outputFilenames[i]); err != nil { - if _, err = fmt.Fprintf(cmd.ErrOrStderr(), "failed to render %s, reason: %v", inputFilename, err); err != nil { - return errors.Wrapf(err, "failed to write err") + renderErr := render(inputFilename, outputFilenames[i]) + if renderErr != nil { + wrappedRenderErr := errors.Wrapf(renderErr, "failed to render %s", inputFilename) + if _, writeErr := fmt.Fprintln(cmd.ErrOrStderr(), wrappedRenderErr); writeErr != nil { + renderErrs = append(renderErrs, errors.Wrapf(writeErr, "failed to write to stderr for %s", inputFilename)) } + renderErrs = append(renderErrs, wrappedRenderErr) } } + if len(renderErrs) > 0 { + return fmt.Errorf("rendering failed for %d file(s)", len(renderErrs)) + } return nil }, } diff --git a/references/cli/def_test.go b/references/cli/def_test.go index 31d9ab4af..098d6fcf6 100644 --- a/references/cli/def_test.go +++ b/references/cli/def_test.go @@ -543,7 +543,7 @@ func TestNewDefinitionRenderCommand(t *testing.T) { defer removeFile(traitFilename, t) cmd.SetArgs([]string{traitFilename}) if err := cmd.Execute(); err != nil { - t.Fatalf("unexpeced error when executing redner command: %v", err) + t.Fatalf("unexpected error when executing render command on single file: %v", err) } // directory read/write test _ = os.Setenv(HelmChartFormatEnvName, "system") @@ -558,16 +558,22 @@ func TestNewDefinitionRenderCommand(t *testing.T) { initCommand(cmd) cmd.SetArgs([]string{dirname, "-o", outputDir, "--message", "Author: KubeVela"}) if err := cmd.Execute(); err != nil { - t.Fatalf("unexpeced error when executing render command: %v", err) + t.Fatalf("unexpected error when executing render command on valid directory: %v", err) } // directory read/print test - _ = os.WriteFile(filepath.Join(dirname, "temp.json"), []byte("hello"), 0600) - _ = os.WriteFile(filepath.Join(dirname, "temp.cue"), []byte("hello"), 0600) + require.NoError(t, os.WriteFile(filepath.Join(dirname, "temp.json"), []byte("hello"), 0600)) // ignored + badCueFile := filepath.Join(dirname, "temp.cue") + require.NoError(t, os.WriteFile(badCueFile, []byte("hello"), 0600)) + cmd = NewDefinitionRenderCommand(c) initCommand(cmd) cmd.SetArgs([]string{dirname}) - if err := cmd.Execute(); err != nil { - t.Fatalf("unexpeced error when executing render command: %v", err) + err = cmd.Execute() + if err == nil { + t.Fatalf("expected error when executing render command with invalid CUE file, got nil") + } + if !strings.Contains(err.Error(), "rendering failed for") { + t.Fatalf("unexpected error message: %v", err) } }