83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/cobra/doc"
|
|
)
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(docsCmd)
|
|
docsCmd.Flags().String("out", "www/docs/cli", "directory to write the docs to")
|
|
}
|
|
|
|
var docsCmd = &cobra.Command{
|
|
Use: "docs",
|
|
Hidden: true,
|
|
Args: cobra.NoArgs,
|
|
RunE: func(cmd *cobra.Command, _ []string) error {
|
|
outputDir, err := cmd.Flags().GetString("out")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tempDir, err := os.MkdirTemp(os.TempDir(), "filebrowser-docs-")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer os.RemoveAll(tempDir)
|
|
|
|
rootCmd.Root().DisableAutoGenTag = true
|
|
|
|
err = doc.GenMarkdownTreeCustom(cmd.Root(), tempDir, func(f string) string {
|
|
return ""
|
|
}, func(s string) string {
|
|
return s
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
entries, err := os.ReadDir(tempDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
headerRegex := regexp.MustCompile(`(?m)^(##)(.*)$`)
|
|
linkRegex := regexp.MustCompile(`\(filebrowser(.*)\.md\)`)
|
|
|
|
fmt.Println("Generated Documents:")
|
|
|
|
for _, entry := range entries {
|
|
srcPath := path.Join(tempDir, entry.Name())
|
|
dstPath := path.Join(outputDir, strings.ReplaceAll(entry.Name(), "_", "-"))
|
|
|
|
data, err := os.ReadFile(srcPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data = headerRegex.ReplaceAll(data, []byte("#$2"))
|
|
data = linkRegex.ReplaceAllFunc(data, func(b []byte) []byte {
|
|
return bytes.ReplaceAll(b, []byte("_"), []byte("-"))
|
|
})
|
|
data = bytes.ReplaceAll(data, []byte("## SEE ALSO"), []byte("## See Also"))
|
|
|
|
err = os.WriteFile(dstPath, data, 0666)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println("- " + dstPath)
|
|
}
|
|
|
|
return nil
|
|
},
|
|
}
|