github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/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/ungtb10d/cli/v2/internal/docs" 10 "github.com/ungtb10d/cli/v2/pkg/cmd/root" 11 "github.com/ungtb10d/cli/v2/pkg/cmdutil" 12 "github.com/ungtb10d/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 ios, _, _, _ := iostreams.Test() 44 rootCmd := root.NewCmdRoot(&cmdutil.Factory{ 45 IOStreams: ios, 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 if err := docs.GenManTree(rootCmd, *dir); err != nil { 62 return err 63 } 64 } 65 66 return nil 67 } 68 69 func filePrepender(filename string) string { 70 return `--- 71 layout: manual 72 permalink: /:path/:basename 73 --- 74 75 ` 76 } 77 78 func linkHandler(name string) string { 79 return fmt.Sprintf("./%s", strings.TrimSuffix(name, ".md")) 80 } 81 82 type browser struct{} 83 84 func (b *browser) Browse(url string) error { 85 return nil 86 }