gen_docs.go

 1package main
 2
 3import (
 4	"fmt"
 5	"os"
 6	"path/filepath"
 7	"sync"
 8	"time"
 9
10	"github.com/spf13/cobra"
11	"github.com/spf13/cobra/doc"
12
13	"github.com/MichaelMure/git-bug/commands"
14)
15
16func main() {
17	fmt.Println("Generating documentation ...")
18
19	tasks := map[string]func(*cobra.Command) error{
20		"ManPage":  genManPage,
21		"Markdown": genMarkdown,
22	}
23
24	var wg sync.WaitGroup
25	for name, f := range tasks {
26		wg.Add(1)
27		go func(name string, f func(*cobra.Command) error) {
28			defer wg.Done()
29			root := commands.NewRootCommand()
30			err := f(root)
31			if err != nil {
32				fmt.Printf("  - %s: %v\n", name, err)
33				return
34			}
35			fmt.Printf("  - %s: ok\n", name)
36		}(name, f)
37	}
38
39	wg.Wait()
40}
41
42func genManPage(root *cobra.Command) error {
43	cwd, _ := os.Getwd()
44	dir := filepath.Join(cwd, "doc", "man")
45
46	// fixed date to avoid having to commit each month
47	date := time.Date(2019, 4, 1, 12, 0, 0, 0, time.UTC)
48
49	header := &doc.GenManHeader{
50		Title:   "GIT-BUG",
51		Section: "1",
52		Date:    &date,
53		Source:  "Generated from git-bug's source code",
54	}
55
56	files, err := filepath.Glob(dir + "/*.1")
57	if err != nil {
58		return err
59	}
60	for _, f := range files {
61		if err := os.Remove(f); err != nil {
62			return err
63		}
64	}
65
66	return doc.GenManTree(root, header, dir)
67}
68
69func genMarkdown(root *cobra.Command) error {
70	cwd, _ := os.Getwd()
71	dir := filepath.Join(cwd, "doc", "md")
72
73	files, err := filepath.Glob(dir + "/*.md")
74	if err != nil {
75		return err
76	}
77	for _, f := range files {
78		if err := os.Remove(f); err != nil {
79			return err
80		}
81	}
82
83	return doc.GenMarkdownTree(root, dir)
84}