🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis →
Socket
Book a DemoInstallSign in
Socket

github.com/cbednarski/cli

Package Overview
Dependencies
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/cbednarski/cli

Source
Go Modules
Version
v0.0.0-20190623220602-6454c32505ff
Version published
Created
Source

CLI

CLI is designed to help you quickly build command interfaces like those found in git, docker, go, vagrant, and other contemporary tools.

program-name command-name arg1 arg2 arg3 ...

Design Goals

CLI includes a few built-in features that every program should have.

  • program-name --version displays the program's version
  • program-name --help displays command help (a list of available commands)
  • program-name help can be invoked to show help about commands or other topics
  • Running program-name without additional parameters will display command help

CLI's data types are designed to have valid defaults so you may safely run a program with nothing defined (though it won't do anything interesting). This facilitates prototyping and development while still producing correct behavior.

For more details, see the package documentation.

Examples

Empty Program

This is a valid CLI app (that doesn't do much)

func main() {
	commands := map[string]*cli.Command{
		"my-first-command": {},
	},

	app := &cli.CLI{
		Commands: commands,
	}

	if err := app.Run(); err != nil {
		cli.ExitWithError(err)
	}
}

You can start with this and gradually specify commands or properties as you write your application.

Defining Commands

Let's say we were building a git clone. We could start out like so:

func main() {
	commands := map[string]*cli.Command{
		"clone": {
			Summary: "Clone a repository into a new directory",
			Run: func(args []string) error {
				if len(args) != 1 {
					return errors.New("")
				}
				remote := args[0]
				// TODO implement some cloning
				return nil
			},
			Help: "Verbose documentation ..."
		},
		"init": {
			Summary:"Create an empty Git repository or reinitialize an existing one",
			Run: func(args []string) error {
				// create a new repository
				if err := os.MkdirAll(".git"); err != nil {
					return err
				}
				// TODO implement some initialization
				return nil
			},
		},
	}

	app := &cli.CLI{
		Name: "git",
		Commands: commands,
	}

	if err := app.Run(); err != nil {
		// If there is an error, write to stderr and exit(1)
		cli.ExitWithError(err)
	}
}

All Commands should be specified before calling CLI.Run().

Defining the Application

CLI will generate command help based on the list of commands specified in the program. It is also useful to specify the program name and version.

app := &cli.CLI{
	Name:     "git",
	Version:  "0.0.1",
	Header:   "the stupid content tracker",
	Footer:   "Copyright some year, some people, licensed under GPLv2",
	Commands: map[string]*cli.Command{},
}

Name is used to reference the name of the program in command help and other places. CLI will try to detect the name if you don't specify this field. Version indicates the current version of your program. If it is not specified the CLI will report undefined.

Header and Footer are used to show additional text at the top and bottom of the command help output. Typically, Header should include a brief description of the program and any essential information for first use, while Footer may be used for copyright and license information, project homepage, bug report URLs, etc.

Commands holds the map of commands that users can run. --version, --help, and help are reserved.

FAQs

Package last updated on 23 Jun 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts