From 2a6b8019f3296d9924fa74e99e70abf69f2ef2b4 Mon Sep 17 00:00:00 2001 From: Colin Adler Date: Thu, 15 Feb 2024 23:14:52 +0000 Subject: [PATCH] fix(cli/clibase): don't error on required flags with `--help` --- cli/clibase/cmd.go | 3 ++- cli/clibase/cmd_test.go | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cli/clibase/cmd.go b/cli/clibase/cmd.go index c21bc38684618..1830d75059460 100644 --- a/cli/clibase/cmd.go +++ b/cli/clibase/cmd.go @@ -383,7 +383,8 @@ func (inv *Invocation) run(state *runState) error { missing = append(missing, opt.Flag) } } - if len(missing) > 0 { + // Don't error for missing flags if `--help` was supplied. + if len(missing) > 0 && !errors.Is(state.flagParseErr, pflag.ErrHelp) { return xerrors.Errorf("Missing values for the required flags: %s", strings.Join(missing, ", ")) } diff --git a/cli/clibase/cmd_test.go b/cli/clibase/cmd_test.go index f0c21dd0b0bbb..4381971c4149f 100644 --- a/cli/clibase/cmd_test.go +++ b/cli/clibase/cmd_test.go @@ -79,6 +79,10 @@ func TestCommand(t *testing.T) { Required: true, }, }, + HelpHandler: func(i *clibase.Invocation) error { + _, _ = i.Stdout.Write([]byte("help text.png")) + return nil + }, Handler: func(i *clibase.Invocation) error { _, _ = i.Stdout.Write([]byte(fmt.Sprintf("%s-%t", reqStr, reqBool))) return nil @@ -255,6 +259,18 @@ func TestCommand(t *testing.T) { require.ErrorContains(t, err, "Missing values") }) + t.Run("RequiredFlagsMissingWithHelp", func(t *testing.T) { + t.Parallel() + i := cmd().Invoke( + "required-flag", + "--help", + ) + fio := fakeIO(i) + err := i.Run() + require.NoError(t, err) + require.Contains(t, fio.Stdout.String(), "help text.png") + }) + t.Run("RequiredFlagsMissingBool", func(t *testing.T) { t.Parallel() i := cmd().Invoke(