/
create_readme.go
76 lines (67 loc) · 2.01 KB
/
create_readme.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//[current directory]/roles/...
package main
import (
"gopkg.in/yaml.v2"
"os"
"io/ioutil"
"github.com/kr/pretty"
"fmt"
"sort"
)
type FileInfos []os.FileInfo
type ByName struct{ FileInfos }
func (fi ByName) Len() int {
return len(fi.FileInfos)
}
func (fi ByName) Swap(i, j int) {
fi.FileInfos[i], fi.FileInfos[j] = fi.FileInfos[j], fi.FileInfos[i]
}
func (fi ByName) Less(i, j int) bool {
return fi.FileInfos[j].ModTime().Unix() < fi.FileInfos[i].ModTime().Unix()
}
func isExist(filename string) bool {
_, err := os.Stat(filename)
return err == nil
}
func main() {
var roleDir, _ = os.Getwd()
roleDir += "/roles/"
fileInfos, err := ioutil.ReadDir(roleDir)
if err != nil {
fmt.Errorf("Directory cannot read %s\n", err)
os.Exit(1)
}
var readme = ""
var readme_filepath = ""
var defaults_filepath = ""
sort.Sort(ByName{fileInfos})
for _ , fileInfo := range fileInfos {
if fileInfo.IsDir() {
readme = "#" + fileInfo.Name() + "\n\n"
readme += "## abstruct \n\n"
readme += "## variables \n\n"
defaults_filepath = roleDir + fileInfo.Name() + "/defaults/main.yml"
source,err := ioutil.ReadFile(defaults_filepath)
if err != nil {
fmt.Printf("%s\n", defaults_filepath + ":file cannot open.")
continue
}
m := make(map[interface{}]interface{})
err = yaml.Unmarshal(source, &m)
if err != nil {
fmt.Printf("%s\n", defaults_filepath + ":fail to parse yaml file.")
continue
}
readme += "|variable name|default value|\n|---|---|\n"
for index,element := range m{
readme += "|" + fmt.Sprint(index) + "|" + fmt.Sprint(element) + "| \n"
}
readme_filepath = roleDir + fileInfo.Name() + "/README.md"
err = ioutil.WriteFile(readme_filepath,[]byte(readme),0644)
if err != nil {
fmt.Printf("%s\n" , readme_filepath + ":fail to write readme.")
}
pretty.Printf("--- m:\n%# v\n\n", m)
}
}
}