github.com/hazelops/ize@v1.1.12-0.20230915191306-97d7c0e48f11/internal/commands/doc.go (about) 1 package commands 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 "text/template" 8 9 "github.com/hazelops/ize/internal/config" 10 "github.com/hazelops/ize/internal/schema" 11 "github.com/pterm/pterm" 12 "github.com/spf13/cobra" 13 "github.com/spf13/cobra/doc" 14 "golang.org/x/text/cases" 15 "golang.org/x/text/language" 16 ) 17 18 func NewCmdDoc() *cobra.Command { 19 cmd := &cobra.Command{ 20 Use: "doc", 21 Short: "Create docs", 22 DisableFlagsInUseLine: true, 23 Long: "Create docs with ize commands description", 24 RunE: func(cmd *cobra.Command, args []string) error { 25 cmd.SilenceUsage = true 26 err := os.MkdirAll("./website/commands", 0777) 27 if err != nil { 28 return err 29 } 30 31 pterm.DisableStyling() 32 pterm.DisableColor() 33 34 err = doc.GenMarkdownTree(newRootCmd(new(config.Project)), "./website/commands") 35 if err != nil { 36 return err 37 } 38 39 sections := []string{"main", "terraform", "ecs", "alias", "serverless", "tunnel"} 40 41 err = os.MkdirAll("./website/schema", 0777) 42 if err != nil { 43 return err 44 } 45 46 t := template.New("schema") 47 t, err = t.Parse(sectionTmpl) 48 if err != nil { 49 return err 50 } 51 52 for _, s := range sections { 53 err := generateSection(s, t) 54 if err != nil { 55 return err 56 } 57 } 58 59 pterm.EnableColor() 60 pterm.EnableStyling() 61 62 pterm.Success.Printfln("Docs generated") 63 64 return nil 65 }, 66 } 67 68 return cmd 69 } 70 71 func generateSection(name string, t *template.Template) error { 72 s := schema.GetSchema() 73 filename := "README.md" 74 if name != "main" { 75 filename = strings.ToUpper(name) + ".md" 76 s = schema.GetSchema()[name].Items 77 } 78 f, err := os.Create(filepath.Join(".", "website", "schema", filename)) 79 if err != nil { 80 return err 81 } 82 83 err = t.Execute(f, Section{ 84 Name: cases.Title(language.Und).String(name), 85 Items: s, 86 }) 87 if err != nil { 88 return err 89 } 90 err = f.Close() 91 if err != nil { 92 return err 93 } 94 95 return nil 96 } 97 98 type Section struct { 99 Name string 100 schema.Items 101 } 102 103 var sectionTmpl = `# {{.Name}} Section 104 | Parameter | Required | Description | 105 | --- | --- | --- | 106 {{range $k, $v := .Items}}| {{$k}} | {{if $v.Required}}yes{{else}}no{{end}}| {{$v.Description}} | 107 {{end}} 108 `