flags4urfavecli

Extends the github.com/urfave/cli/v2 CLI package for golang with some useful flags and values you might want to use with your CLI.
Note: This package is intended to be used with v2 only!
Usage
import (
"fmt"
"log"
"os"
"github.com/romnn/flags4urfavecli/values"
"github.com/urfave/cli/v2"
)
func main() {
app := &cli.App{
Name: "sample CLI app",
Usage: "This demonstrates the usage of additional flags",
Flags: []cli.Flag{
&cli.GenericFlag{
Name: "format",
Value: &values.EnumValue{
Enum: []string{"json", "xml", "csv"},
Default: "xml",
},
EnvVars: []string{"FILEFORMAT"},
Usage: "input file format",
},
},
Action: func(ctx *cli.Context) error {
fmt.Printf("Format is: %s\n", ctx.String("format"))
return nil
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
For more examples, see examples/. You can try the example above with:
go run github.com/romnn/flags4urfavecli/examples/readme --format json
Extensions
As of now, the following generic value wrappers are implemented:
Also, there are some commonly used pre-configured generic flags:
If you wrote your own, please feel free to share and submit a pull request!
Development
Prerequisites
Before you get started, make sure you have installed the following tools::
$ python3 -m pip install -U cookiecutter>=1.4.0
$ python3 -m pip install pre-commit bump2version invoke ruamel.yaml halo
$ go get -u golang.org/x/tools/cmd/goimports
$ go get -u golang.org/x/lint/golint
$ go get -u github.com/fzipp/gocyclo
$ go get -u github.com/mitchellh/gox # if you want to test building on different architectures
Remember: To be able to excecute the tools downloaded with go get,
make sure to include $GOPATH/bin in your $PATH.
If echo $GOPATH does not give you a path make sure to run
(export GOPATH="$HOME/go" to set it). In order for your changes to persist,
do not forget to add these to your shells .bashrc.
With the tools in place, it is strongly advised to install the git commit hooks to make sure checks are passing in CI:
invoke install-hooks
You can check if all checks pass at any time:
invoke pre-commit
Note for Maintainers: After merging changes, tag your commits with a new version and push to GitHub to create a release:
bump2version (major | minor | patch)
git push --follow-tags
Note
This project is still in the alpha stage and should not be considered production ready.