urfave/cli

[v3] how to chain multible Sources?

6543 opened this issue · 11 comments

6543 commented

I did expect something like:

cli.StringFlag{
        Sources: EnvVars("APP_LANG").Or(Files("/path/to/foo")),
}

or

cli.StringFlag{
        Sources: EnvVars("APP_LANG").Chain(Files("/path/to/foo")),
}

as this is not practicable:

	&cli.StringFlag{
		Name:    "grpc-token",
		Usage:   "server-agent shared token",
		Sources: cli.ValueSourceChain{Chain: append(cli.Files(os.Getenv("WOODPECKER_AGENT_SECRET_FILE")).Chain,cli.EnvVars("WOODPECKER_AGENT_SECRET").Chain...)} ,
	},

or did I miss something ?

&cli.StringFlag{
		Name:    "grpc-token",
		Usage:   "server-agent shared token",
		Sources: cli.ValueSourceChain{Chain: {cli.EnvVars("...."), cli.FileVars("...")},
6543 commented

hmm in this regards could we make this issue a feature request to add an function to .Chain() Sources ?

6543 commented

if you move it behind an interface you can refactor things more easy ...
e.g. the internal Chain field don't have to be exported ...

or what take do you have on this matter?

6543 commented
&cli.StringFlag{
		Name:    "grpc-token",
		Usage:   "server-agent shared token",
		Sources: cli.ValueSourceChain{Chain: {cli.EnvVars("...."), cli.FileVars("...")},

this does not work as SourceChain gen func to return slices ... witch need to be append to return a slice
else you get a slice of slices :/

6543 commented
&cli.StringFlag{
		Name:    "grpc-token",
		Usage:   "server-agent shared token",
		Sources: cli.ValueSourceChain{Chain: []cli.ValueSource{cli.Files("...").Chain[0], cli.EnvVars("...").Chain[0]}},

this works but I would call it an hack!

6543 commented

would be a pull welcome to address this?

@6543 Sure that would be fine.

@6543 This PR fix should allow you to do

&cli.StringFlag{
		Name:    "grpc-token",
		Usage:   "server-agent shared token",
		Sources: cli.ValueSourceChain{Chain: []cli.ValueSource{cli.Files("..."), cli.EnvVars("...")}},

@6543 I had to withdraw the PR to think a bit more about this

6543 commented

I might have time and submit some pull just as draft to get some ideas going :)

6543 commented

thanks :)