gcli generates the codes and its directory structure you need to start building CLI tool by Golang right out of the box. You can use your favorite framework.
To start new command line tool, run the following command. It generates new cli skeleton project. At least, you must provide executable name. You can go build && go test it from beginning.
$ gcli new [options] NAMETo see available frameworks,
$ gcli listSee more usage,
$ gcli helpYou can generate CLI project from design template file (.toml). You can define command name, its description, commands there.
First, you can create default toml file via design command,
$ gcli design <NAME>Then, edit design file by your favorite $EDITOR. You can see sample template file sample.toml,
$ $EDITOR <NAME>-design.tomlYou can validate design by validate command to check it has required fields,
$ gcli validate <NAME>-design.tomlTo generate CLI project, use apply command,
$ gcli apply <NAME>-desigon.tomlgcli can generate two types of CLI,
Flag pattern is the pattern which executable has only flag options like below (e.g., grep),
$ grep —i -C 4 "some string" /tmp
│ │ │
│ │ `--------- Arguments
│ │
│ `------------------------ Option flags
│
`------------------------------ Executable To generate above CLI application with flag fraemwork,
$ cd $GOPATH/src/github.com/YOUR_NAME
$ gcli new -F flag -flag=i:Bool -flag=C:Int grep
Created grep/main.go
Created grep/CHANGELOG.md
Created grep/cli_test.go
Created grep/README.md
Created grep/version.go
Created grep/cli.go
====> Successfully generated grepFor this flag pattern, gcli supports below packages,
Command pattern is the pattern which executable has command for change its behavior. For example, todo CLI application which has add (Add new task), list (List all tasks) and delete(Delete a task) command.
$ todo add 'Buy a milk'
│ │ │
│ │ `---------- Arguments
│ │
│ `----------------- Command
│
`---------------------- ExecutableTo generate above CLI application with mitchellh/cli framework,
$ cd $GOPATH/src/github.com/YOUR_NAME
$ gcli new -F mitchellh_cli -c add -c list -c delete todo
Created todo/main.go
Created todo/command/meta.go
Created todo/cli.go
Created todo/CHANGELOG.md
Created todo/version.go
Created todo/commands.go
Created todo/command/add.go
Created todo/command/list.go
Created todo/command/delete.go
Created todo/README.md
Created todo/command/add_test.go
Created todo/command/list_test.go
Created todo/command/delete_test.go
====> Successfully generated todoFor this flag pattern, gcli supports below packages,
- codegangsta_cli
- mitchellh_cli
- go_cmd (without 3rd party framework, same as
gocommand)
To install, use go get and make install. We tag versions so feel free to checkout that tag and compile.
$ go get -d github.com/tcnksm/gcli
$ cd $GOPATH/src/github.com/tcnksm/gcli
$ make install - Fork (https://github.com/tcnksm/gcli/fork)
- Create a feature branch
- Commit your changes
- Rebase your local changes against the master branch
- Run test suite with the
make testcommand and confirm that it passes - Run
gofmt -s - Create a new Pull Request