Move documentation sources to site/content (#1428)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							cbe4865373
						
					
				
				
					commit
					dcb405a939
				
			
							
								
								
									
										17
									
								
								site/content/docgen/_index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								site/content/docgen/_index.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
# Documentation generation
 | 
			
		||||
 | 
			
		||||
- [Man page docs](man.md)
 | 
			
		||||
- [Markdown docs](md.md)
 | 
			
		||||
- [Rest docs](rest.md)
 | 
			
		||||
- [Yaml docs](yaml.md)
 | 
			
		||||
 | 
			
		||||
## Options
 | 
			
		||||
### `DisableAutoGenTag`
 | 
			
		||||
 | 
			
		||||
You may set `cmd.DisableAutoGenTag = true`
 | 
			
		||||
to _entirely_ remove the auto generated string "Auto generated by spf13/cobra..."
 | 
			
		||||
from any documentation source.
 | 
			
		||||
 | 
			
		||||
### `InitDefaultCompletionCmd`
 | 
			
		||||
 | 
			
		||||
You may call `cmd.InitDefaultCompletionCmd()` to document the default autocompletion command.
 | 
			
		||||
							
								
								
									
										31
									
								
								site/content/docgen/man.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								site/content/docgen/man.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
# Generating Man Pages For Your Own cobra.Command
 | 
			
		||||
 | 
			
		||||
Generating man pages from a cobra command is incredibly easy. An example is as follows:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "test",
 | 
			
		||||
		Short: "my test program",
 | 
			
		||||
	}
 | 
			
		||||
	header := &doc.GenManHeader{
 | 
			
		||||
		Title: "MINE",
 | 
			
		||||
		Section: "3",
 | 
			
		||||
	}
 | 
			
		||||
	err := doc.GenManTree(cmd, header, "/tmp")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
That will get you a man page `/tmp/test.3`
 | 
			
		||||
							
								
								
									
										115
									
								
								site/content/docgen/md.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								site/content/docgen/md.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,115 @@
 | 
			
		||||
# Generating Markdown Docs For Your Own cobra.Command
 | 
			
		||||
 | 
			
		||||
Generating Markdown pages from a cobra command is incredibly easy. An example is as follows:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "test",
 | 
			
		||||
		Short: "my test program",
 | 
			
		||||
	}
 | 
			
		||||
	err := doc.GenMarkdownTree(cmd, "/tmp")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
That will get you a Markdown document `/tmp/test.md`
 | 
			
		||||
 | 
			
		||||
## Generate markdown docs for the entire command tree
 | 
			
		||||
 | 
			
		||||
This program can actually generate docs for the kubectl command in the kubernetes project
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/cmd"
 | 
			
		||||
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	kubectl := cmd.NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
 | 
			
		||||
	err := doc.GenMarkdownTree(kubectl, "./")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will generate a whole series of files, one for each command in the tree, in the directory specified (in this case "./")
 | 
			
		||||
 | 
			
		||||
## Generate markdown docs for a single command
 | 
			
		||||
 | 
			
		||||
You may wish to have more control over the output, or only generate for a single command, instead of the entire command tree. If this is the case you may prefer to `GenMarkdown` instead of `GenMarkdownTree`
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
	out := new(bytes.Buffer)
 | 
			
		||||
	err := doc.GenMarkdown(cmd, out)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will write the markdown doc for ONLY "cmd" into the out, buffer.
 | 
			
		||||
 | 
			
		||||
## Customize the output
 | 
			
		||||
 | 
			
		||||
Both `GenMarkdown` and `GenMarkdownTree` have alternate versions with callbacks to get some control of the output:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
func GenMarkdownTreeCustom(cmd *Command, dir string, filePrepender, linkHandler func(string) string) error {
 | 
			
		||||
	//...
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
func GenMarkdownCustom(cmd *Command, out *bytes.Buffer, linkHandler func(string) string) error {
 | 
			
		||||
	//...
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `filePrepender` will prepend the return value given the full filepath to the rendered Markdown file. A common use case is to add front matter to use the generated documentation with [Hugo](https://gohugo.io/):
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
const fmTemplate = `---
 | 
			
		||||
date: %s
 | 
			
		||||
title: "%s"
 | 
			
		||||
slug: %s
 | 
			
		||||
url: %s
 | 
			
		||||
---
 | 
			
		||||
`
 | 
			
		||||
 | 
			
		||||
filePrepender := func(filename string) string {
 | 
			
		||||
	now := time.Now().Format(time.RFC3339)
 | 
			
		||||
	name := filepath.Base(filename)
 | 
			
		||||
	base := strings.TrimSuffix(name, path.Ext(name))
 | 
			
		||||
	url := "/commands/" + strings.ToLower(base) + "/"
 | 
			
		||||
	return fmt.Sprintf(fmTemplate, now, strings.Replace(base, "_", " ", -1), base, url)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `linkHandler` can be used to customize the rendered internal links to the commands, given a filename:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
linkHandler := func(name string) string {
 | 
			
		||||
	base := strings.TrimSuffix(name, path.Ext(name))
 | 
			
		||||
	return "/commands/" + strings.ToLower(base) + "/"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										114
									
								
								site/content/docgen/rest.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								site/content/docgen/rest.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,114 @@
 | 
			
		||||
# Generating ReStructured Text Docs For Your Own cobra.Command
 | 
			
		||||
 | 
			
		||||
Generating ReST pages from a cobra command is incredibly easy. An example is as follows:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "test",
 | 
			
		||||
		Short: "my test program",
 | 
			
		||||
	}
 | 
			
		||||
	err := doc.GenReSTTree(cmd, "/tmp")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
That will get you a ReST document `/tmp/test.rst`
 | 
			
		||||
 | 
			
		||||
## Generate ReST docs for the entire command tree
 | 
			
		||||
 | 
			
		||||
This program can actually generate docs for the kubectl command in the kubernetes project
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/cmd"
 | 
			
		||||
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	kubectl := cmd.NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
 | 
			
		||||
	err := doc.GenReSTTree(kubectl, "./")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will generate a whole series of files, one for each command in the tree, in the directory specified (in this case "./")
 | 
			
		||||
 | 
			
		||||
## Generate ReST docs for a single command
 | 
			
		||||
 | 
			
		||||
You may wish to have more control over the output, or only generate for a single command, instead of the entire command tree. If this is the case you may prefer to `GenReST` instead of `GenReSTTree`
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
	out := new(bytes.Buffer)
 | 
			
		||||
	err := doc.GenReST(cmd, out)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will write the ReST doc for ONLY "cmd" into the out, buffer.
 | 
			
		||||
 | 
			
		||||
## Customize the output
 | 
			
		||||
 | 
			
		||||
Both `GenReST` and `GenReSTTree` have alternate versions with callbacks to get some control of the output:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
func GenReSTTreeCustom(cmd *Command, dir string, filePrepender func(string) string, linkHandler func(string, string) string) error {
 | 
			
		||||
	//...
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
func GenReSTCustom(cmd *Command, out *bytes.Buffer, linkHandler func(string, string) string) error {
 | 
			
		||||
	//...
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `filePrepender` will prepend the return value given the full filepath to the rendered ReST file. A common use case is to add front matter to use the generated documentation with [Hugo](https://gohugo.io/):
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
const fmTemplate = `---
 | 
			
		||||
date: %s
 | 
			
		||||
title: "%s"
 | 
			
		||||
slug: %s
 | 
			
		||||
url: %s
 | 
			
		||||
---
 | 
			
		||||
`
 | 
			
		||||
filePrepender := func(filename string) string {
 | 
			
		||||
	now := time.Now().Format(time.RFC3339)
 | 
			
		||||
	name := filepath.Base(filename)
 | 
			
		||||
	base := strings.TrimSuffix(name, path.Ext(name))
 | 
			
		||||
	url := "/commands/" + strings.ToLower(base) + "/"
 | 
			
		||||
	return fmt.Sprintf(fmTemplate, now, strings.Replace(base, "_", " ", -1), base, url)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `linkHandler` can be used to customize the rendered links to the commands, given a command name and reference. This is useful while converting rst to html or while generating documentation with tools like Sphinx where `:ref:` is used:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
// Sphinx cross-referencing format
 | 
			
		||||
linkHandler := func(name, ref string) string {
 | 
			
		||||
    return fmt.Sprintf(":ref:`%s <%s>`", name, ref)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										112
									
								
								site/content/docgen/yaml.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								site/content/docgen/yaml.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,112 @@
 | 
			
		||||
# Generating Yaml Docs For Your Own cobra.Command
 | 
			
		||||
 | 
			
		||||
Generating yaml files from a cobra command is incredibly easy. An example is as follows:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"log"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use:   "test",
 | 
			
		||||
		Short: "my test program",
 | 
			
		||||
	}
 | 
			
		||||
	err := doc.GenYamlTree(cmd, "/tmp")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
That will get you a Yaml document `/tmp/test.yaml`
 | 
			
		||||
 | 
			
		||||
## Generate yaml docs for the entire command tree
 | 
			
		||||
 | 
			
		||||
This program can actually generate docs for the kubectl command in the kubernetes project
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/cmd"
 | 
			
		||||
	cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra/doc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	kubectl := cmd.NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, ioutil.Discard, ioutil.Discard)
 | 
			
		||||
	err := doc.GenYamlTree(kubectl, "./")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will generate a whole series of files, one for each command in the tree, in the directory specified (in this case "./")
 | 
			
		||||
 | 
			
		||||
## Generate yaml docs for a single command
 | 
			
		||||
 | 
			
		||||
You may wish to have more control over the output, or only generate for a single command, instead of the entire command tree. If this is the case you may prefer to `GenYaml` instead of `GenYamlTree`
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
	out := new(bytes.Buffer)
 | 
			
		||||
	doc.GenYaml(cmd, out)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This will write the yaml doc for ONLY "cmd" into the out, buffer.
 | 
			
		||||
 | 
			
		||||
## Customize the output
 | 
			
		||||
 | 
			
		||||
Both `GenYaml` and `GenYamlTree` have alternate versions with callbacks to get some control of the output:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
func GenYamlTreeCustom(cmd *Command, dir string, filePrepender, linkHandler func(string) string) error {
 | 
			
		||||
	//...
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
func GenYamlCustom(cmd *Command, out *bytes.Buffer, linkHandler func(string) string) error {
 | 
			
		||||
	//...
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `filePrepender` will prepend the return value given the full filepath to the rendered Yaml file. A common use case is to add front matter to use the generated documentation with [Hugo](https://gohugo.io/):
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
const fmTemplate = `---
 | 
			
		||||
date: %s
 | 
			
		||||
title: "%s"
 | 
			
		||||
slug: %s
 | 
			
		||||
url: %s
 | 
			
		||||
---
 | 
			
		||||
`
 | 
			
		||||
 | 
			
		||||
filePrepender := func(filename string) string {
 | 
			
		||||
	now := time.Now().Format(time.RFC3339)
 | 
			
		||||
	name := filepath.Base(filename)
 | 
			
		||||
	base := strings.TrimSuffix(name, path.Ext(name))
 | 
			
		||||
	url := "/commands/" + strings.ToLower(base) + "/"
 | 
			
		||||
	return fmt.Sprintf(fmTemplate, now, strings.Replace(base, "_", " ", -1), base, url)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `linkHandler` can be used to customize the rendered internal links to the commands, given a filename:
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
linkHandler := func(name string) string {
 | 
			
		||||
	base := strings.TrimSuffix(name, path.Ext(name))
 | 
			
		||||
	return "/commands/" + strings.ToLower(base) + "/"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
		Reference in New Issue
	
	Block a user