urfave / cli

A simple, fast, and fun package for building command line apps in Go
https://cli.urfave.org
MIT License
22.22k stars 1.7k forks source link

No commands listed when only one subcommand #1787

Closed Kyrremann closed 1 year ago

Kyrremann commented 1 year ago

My urfave/cli version is

v2.25.7

Checklist

Dependency Management

Describe the bug

When I make a command with only one subcommand and hide the help command my subcommand is not displayed. My guess is that since a command and a subcommand is the "same", it always hide the command list when it's fewer than one item there, because it assumes it is the help-command.

To reproduce

package main

import (
    "log"
    "os"

    "github.com/urfave/cli/v2"
)

func main() {
    app := &cli.App{
        Name: "hello",
        Commands: []*cli.Command{
            {
                Name: "world",
                HideHelpCommand: true,
                Subcommands: []*cli.Command{
                    {
                        Name: "welcome",
                    },  
                },
            },
        },
    }

    if err := app.Run(os.Args); err != nil {
        log.Fatal(err)
    }
}

Observed behavior

./nais p password -h
NAME:
   nais postgres password - Administrate Postgres password

USAGE:
   nais postgres password [command options] [arguments...]

OPTIONS:
   --help, -h  show help

Expected behavior

./nais p password -h
NAME:
   nais postgres password - Administrate Postgres password

USAGE:
   nais postgres password command [command options] [arguments...]

COMMANDS:
   rotate

OPTIONS:
   --help, -h  show help

Additional context

If I enable HideHelpCommand for the specific command (not the subcommand) it works.

Run go version and paste its output here

go version go1.20.5 darwin/arm64

Run go env and paste its output here

GO111MODULE=""
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/user/Library/Caches/go-build"
GOENV="/Users/user/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/user/workspace/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/user/workspace/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/opt/homebrew/Cellar/go/1.20.5/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/opt/homebrew/Cellar/go/1.20.5/libexec/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.20.5"
GCCGO="gccgo"
AR="ar"
CC="cc"
CXX="c++"
CGO_ENABLED="1"
GOMOD="/Users/user/workspace/company/cli/go.mod"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/1v/j4d_bg_j4bs119btmjh244lw0000gn/T/go-build274875656=/tmp/go-build -gno-record-gcc-switches -fno-common"
dearchap commented 1 year ago

@Kyrremann Thanks for reporting this. Can you set HideHelpCommand at the App level and see if that works for you ?

Kyrremann commented 1 year ago

I have already set that value to true at the App level, no change for me in my original code (did not try it in the reproduce example).

For now my solution is just to show the help-command, it's not a big deal for us.

PS: This is my code where I'm using this library, it's a big PR where I change from cobra/viper to this one: https://github.com/nais/cli/pull/209

dearchap commented 1 year ago

@Kyrremann Can you try the fix in the PR ? Thanks

Kyrremann commented 1 year ago

That fixed it!

$ ./nais postgres password
NAME:
   nais postgres password - Administrate Postgres password

USAGE:
   nais postgres password command [command options] [arguments...]

COMMANDS:
   rotate  Rotate the Postgres database password

OPTIONS:
   --help, -h  show help