2.2 KiB
2.2 KiB
Cobra Documentation and Scaffolding Generators
Doc generation
Cobra can generate documentation from your command tree in multiple formats. Import the cobra/doc sub-package:
go get github.com/spf13/cobra/doc
Markdown
import "github.com/spf13/cobra/doc"
err := doc.GenMarkdownTree(rootCmd, "/tmp/docs/")
// generates /tmp/docs/myapp.md, /tmp/docs/myapp_serve.md, etc.
// Single command
var buf bytes.Buffer
doc.GenMarkdown(rootCmd, &buf)
Man pages
header := &doc.GenManHeader{
Title: "MYAPP",
Section: "1",
Date: &time.Time{},
Source: "myapp v1.0.0",
Manual: "User Commands",
}
err := doc.GenManTree(rootCmd, header, "/usr/local/share/man/man1/")
YAML
err := doc.GenYamlTree(rootCmd, "/tmp/docs/")
RST (reStructuredText)
err := doc.GenReSTTree(rootCmd, "/tmp/docs/")
cobra-cli scaffolder
cobra-cli generates command files and wires them into your project:
go get -tool github.com/spf13/cobra-cli@latest
# Initialize a new cobra project
go tool cobra-cli init myapp
# Add a subcommand
go tool cobra-cli add serve
go tool cobra-cli add migrate
# Add with a parent other than root
cobra-cli add list --parent serve
Generated files follow the standard pattern:
// cmd/serve.go
var serveCmd = &cobra.Command{
Use: "serve",
Short: "A brief description of your command",
RunE: func(cmd *cobra.Command, args []string) error {
return nil
},
}
func init() {
rootCmd.AddCommand(serveCmd)
}
cobra-cli is optional — many teams write command files by hand following the same pattern.
Help and usage template customization
Override the default help template:
rootCmd.SetHelpTemplate(`
Usage: {{.UseLine}}
{{if .HasAvailableSubCommands}}
Commands:
{{range .Commands}}{{if .IsAvailableCommand}} {{rpad .Name .NamePadding }} {{.Short}}
{{end}}{{end}}{{end}}
Flags:
{{.LocalFlags.FlagUsages | trimRightSpace}}
`)
Override the usage function entirely:
rootCmd.SetUsageFunc(func(cmd *cobra.Command) error {
fmt.Fprintf(cmd.OutOrStdout(), "Custom usage for %s\n", cmd.Name())
return nil
})
Common template functions available: rpad, trimRightSpace, gt, eq.