15
const chartsDir = "charts"
16
const outputFile = "pkg/generated/presets.go"
19
filesMap := make(map[string]string)
20
var chartNames []string
22
err := filepath.Walk(chartsDir, func(path string, info os.FileInfo, err error) error {
27
if info.Mode()&os.ModeSymlink != 0 {
28
return filepath.SkipDir
31
if info.IsDir() && path != chartsDir && filepath.Dir(path) == chartsDir {
32
fmt.Printf("read: %s\n", path)
33
if info.Name() != "talm" {
34
chartNames = append(chartNames, info.Name())
43
relPath, err := filepath.Rel(chartsDir, path)
47
content, err := ioutil.ReadFile(path)
52
if filepath.Base(path) == "Chart.yaml" {
53
regex := regexp.MustCompile(`(name|version): \S+`)
54
content = regex.ReplaceAll(content, []byte("$1: %s"))
57
filesMap[relPath] = string(content)
66
generateCode(filesMap, chartNames)
69
func generateCode(filesMap map[string]string, chartNames []string) {
70
var builder strings.Builder
73
keys := make([]string, 0, len(filesMap))
74
for k := range filesMap {
75
keys = append(keys, k)
79
builder.WriteString("package generated\n\n")
81
builder.WriteString("var PresetFiles = map[string]string{\n")
82
for _, key := range keys {
83
content := filesMap[key]
84
escapedContent := strings.ReplaceAll(content, "`", "` + \"`\" + `")
85
builder.WriteString(` "` + key + `": ` + "`" + escapedContent + "`,\n")
87
builder.WriteString("}\n\n")
89
builder.WriteString("var AvailablePresets = []string{\n")
90
// Generic chart should be first
91
for _, name := range chartNames {
92
if name == "generic" {
93
builder.WriteString(` "` + name + `",` + "\n")
96
for _, name := range chartNames {
97
if name != "generic" {
98
builder.WriteString(` "` + name + `",` + "\n")
101
builder.WriteString("}\n")
103
formattedSource, err := format.Source([]byte(builder.String()))
108
err = ioutil.WriteFile(outputFile, []byte(formattedSource), 0644)
112
fmt.Printf("written: %s\n", outputFile)