urfave / cli

A simple, fast, and fun package for building command line apps in Go

Home Page:https://cli.urfave.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[v3] how to chain multible Sources?

6543 opened this issue · comments

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("...")},
commented

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

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?

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 :/

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!

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

commented

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

commented

thanks :)