From fec92d2f22ae63025eb1fa5d44cb8a1faf3053ad Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Wed, 15 Jul 2026 19:01:03 +0200 Subject: [PATCH] fix(runtime): keep the usage block for flag errors only --- pkg/clihelper/app.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkg/clihelper/app.go b/pkg/clihelper/app.go index 2643391671..e654165d45 100644 --- a/pkg/clihelper/app.go +++ b/pkg/clihelper/app.go @@ -14,11 +14,17 @@ func DefaultApp(app *cobra.Command) *cobra.Command { // version info app.Version = fmt.Sprintf("%s (%s <%s>) (%s)", version.String, "OpenCloud GmbH", "support@opencloud.eu", version.Compiled()) - // a failing RunE is a runtime error, not a usage error: printing it here - // would put unstructured text next to the JSON log records, and the usage - // block on top of it is noise. main() reports what reaches it. + // cobra would print the error on top of what main() already prints app.SilenceErrors = true - app.SilenceUsage = true + + // keep the usage block for flag parse errors, drop it once RunE runs. + // Traversing runs the hook even below a subcommand that brings its own, + // e.g. every service below ServiceCommand. + cobra.EnableTraverseRunHooks = true + app.PersistentPreRunE = func(cmd *cobra.Command, _ []string) error { + cmd.SilenceUsage = true + return nil + } return app }