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  }