talm

Форк
0
/
generate_presets.go 
113 строк · 2.3 Кб
1
package main
2

3
import (
4
	"fmt"
5
	"go/format"
6
	"io/ioutil"
7
	"log"
8
	"os"
9
	"path/filepath"
10
	"regexp"
11
	"sort"
12
	"strings"
13
)
14

15
const chartsDir = "charts"
16
const outputFile = "pkg/generated/presets.go"
17

18
func main() {
19
	filesMap := make(map[string]string)
20
	var chartNames []string
21

22
	err := filepath.Walk(chartsDir, func(path string, info os.FileInfo, err error) error {
23
		if err != nil {
24
			return err
25
		}
26

27
		if info.Mode()&os.ModeSymlink != 0 {
28
			return filepath.SkipDir
29
		}
30

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())
35
			}
36
			return nil
37
		}
38

39
		if info.IsDir() {
40
			return nil
41
		}
42

43
		relPath, err := filepath.Rel(chartsDir, path)
44
		if err != nil {
45
			return err
46
		}
47
		content, err := ioutil.ReadFile(path)
48
		if err != nil {
49
			return err
50
		}
51

52
		if filepath.Base(path) == "Chart.yaml" {
53
			regex := regexp.MustCompile(`(name|version): \S+`)
54
			content = regex.ReplaceAll(content, []byte("$1: %s"))
55
		}
56

57
		filesMap[relPath] = string(content)
58

59
		return nil
60
	})
61

62
	if err != nil {
63
		log.Fatal(err)
64
	}
65

66
	generateCode(filesMap, chartNames)
67
}
68

69
func generateCode(filesMap map[string]string, chartNames []string) {
70
	var builder strings.Builder
71

72
	// Sort keys
73
	keys := make([]string, 0, len(filesMap))
74
	for k := range filesMap {
75
		keys = append(keys, k)
76
	}
77
	sort.Strings(keys)
78

79
	builder.WriteString("package generated\n\n")
80

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")
86
	}
87
	builder.WriteString("}\n\n")
88

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")
94
		}
95
	}
96
	for _, name := range chartNames {
97
		if name != "generic" {
98
			builder.WriteString(`    "` + name + `",` + "\n")
99
		}
100
	}
101
	builder.WriteString("}\n")
102

103
	formattedSource, err := format.Source([]byte(builder.String()))
104
	if err != nil {
105
		log.Fatal(err)
106
	}
107

108
	err = ioutil.WriteFile(outputFile, []byte(formattedSource), 0644)
109
	if err != nil {
110
		log.Fatal(err)
111
	}
112
	fmt.Printf("written: %s\n", outputFile)
113
}
114

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.