6fe2703665
* Remove `make updatedeps` from Travis build. We'll follow up with more specific plans around dependency updating in subsequent PRs. * Update all `make` targets to set `GO15VENDOREXPERIMENT=1` and to filter out `/vendor/` from `./...` where appropriate. * Temporarily remove `vet` from the `make test` target until we can figure out how to get it to not vet `vendor/`. (Initial experimentation failed to yield the proper incantation.) Everything is pinned to current master, with the exception of: * Azure/azure-sdk-for-go which is pinned before the breaking change today * aws/aws-sdk-go which is pinned to the most recent tag The documentation still needs to be updated, which we can do in a follow up PR. The goal here is to unblock release. |
||
---|---|---|
.. | ||
.travis.yml | ||
LICENSE | ||
README.md | ||
cli.go | ||
cli_test.go | ||
command.go | ||
command_mock.go | ||
command_mock_test.go | ||
help.go | ||
ui.go | ||
ui_colored.go | ||
ui_colored_test.go | ||
ui_concurrent.go | ||
ui_concurrent_test.go | ||
ui_mock.go | ||
ui_mock_test.go | ||
ui_test.go | ||
ui_writer.go | ||
ui_writer_test.go |
README.md
Go CLI Library
cli is a library for implementing powerful command-line interfaces in Go. cli is the library that powers the CLI for Packer, Serf, and Consul.
Features
-
Easy sub-command based CLIs:
cli foo
,cli bar
, etc. -
Support for nested subcommands such as
cli foo bar
. -
Optional support for default subcommands so
cli
does something other than error. -
Automatic help generation for listing subcommands
-
Automatic help flag recognition of
-h
,--help
, etc. -
Automatic version flag recognition of
-v
,--version
. -
Helpers for interacting with the terminal, such as outputting information, asking for input, etc. These are optional, you can always interact with the terminal however you choose.
-
Use of Go interfaces/types makes augmenting various parts of the library a piece of cake.
Example
Below is a simple example of creating and running a CLI
package main
import (
"log"
"os"
"github.com/mitchellh/cli"
)
func main() {
c := cli.NewCLI("app", "1.0.0")
c.Args = os.Args[1:]
c.Commands = map[string]cli.CommandFactory{
"foo": fooCommandFactory,
"bar": barCommandFactory,
}
exitStatus, err := c.Run()
if err != nil {
log.Println(err)
}
os.Exit(exitStatus)
}