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