github.com/andrewhsu/cli/v2@v2.0.1-0.20210910131313-d4b4061f5b89/cmd/gen-docs/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "strings" 8 9 "github.com/andrewhsu/cli/v2/internal/docs" 10 "github.com/andrewhsu/cli/v2/pkg/cmd/root" 11 "github.com/andrewhsu/cli/v2/pkg/cmdutil" 12 "github.com/andrewhsu/cli/v2/pkg/iostreams" 13 "github.com/spf13/pflag" 14 ) 15 16 func main() { 17 if err := run(os.Args); err != nil { 18 fmt.Fprintln(os.Stderr, err) 19 os.Exit(1) 20 } 21 } 22 23 func run(args []string) error { 24 flags := pflag.NewFlagSet("", pflag.ContinueOnError) 25 manPage := flags.BoolP("man-page", "", false, "Generate manual pages") 26 website := flags.BoolP("website", "", false, "Generate website pages") 27 dir := flags.StringP("doc-path", "", "", "Path directory where you want generate doc files") 28 help := flags.BoolP("help", "h", false, "Help about any command") 29 30 if err := flags.Parse(args); err != nil { 31 return err 32 } 33 34 if *help { 35 fmt.Fprintf(os.Stderr, "Usage of %s:\n\n%s", filepath.Base(args[0]), flags.FlagUsages()) 36 return nil 37 } 38 39 if *dir == "" { 40 return fmt.Errorf("error: --doc-path not set") 41 } 42 43 io, _, _, _ := iostreams.Test() 44 rootCmd := root.NewCmdRoot(&cmdutil.Factory{ 45 IOStreams: io, 46 Browser: &browser{}, 47 }, "", "") 48 rootCmd.InitDefaultHelpCmd() 49 50 if err := os.MkdirAll(*dir, 0755); err != nil { 51 return err 52 } 53 54 if *website { 55 if err := docs.GenMarkdownTreeCustom(rootCmd, *dir, filePrepender, linkHandler); err != nil { 56 return err 57 } 58 } 59 60 if *manPage { 61 header := &docs.GenManHeader{ 62 Title: "gh", 63 Section: "1", 64 Source: "", 65 Manual: "", 66 } 67 if err := docs.GenManTree(rootCmd, header, *dir); err != nil { 68 return err 69 } 70 } 71 72 return nil 73 } 74 75 func filePrepender(filename string) string { 76 return `--- 77 layout: manual 78 permalink: /:path/:basename 79 --- 80 81 ` 82 } 83 84 func linkHandler(name string) string { 85 return fmt.Sprintf("./%s", strings.TrimSuffix(name, ".md")) 86 } 87 88 type browser struct{} 89 90 func (b *browser) Browse(url string) error { 91 return nil 92 }