-
Notifications
You must be signed in to change notification settings - Fork 1
/
templates.go
78 lines (62 loc) · 1.52 KB
/
templates.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
76
77
78
package templates
import (
"embed"
"os"
"path/filepath"
"text/template"
"time"
"github.com/Masterminds/sprig/v3"
"github.com/rs/zerolog/log"
"github.com/thegeeklab/git-sv/sv"
)
//go:embed assets
var templateFs embed.FS
// New loads the template to make it parseable.
func New(configDir string) *template.Template {
workDir, err := os.Getwd()
if err != nil {
log.Fatal().Err(err).Msg("error while retrieving working directory")
}
tplsDir := filepath.Join(workDir, configDir, "templates")
tpls, err := template.New("templates").Funcs(Funcs()).ParseFS(templateFs, "**/*.tpl")
if err != nil {
log.Warn().
Err(err).
Msg("Failed to parse builtin templates")
}
custom, _ := filepath.Glob(filepath.Join(tplsDir, "*.tpl"))
if len(custom) == 0 {
return tpls
}
for _, v := range custom {
tpls, err = template.New("templates").Funcs(Funcs()).ParseFiles(v)
if err != nil {
log.Warn().
Err(err).
Str("filename", v).
Msg("Failed to parse custom template")
}
}
return tpls
}
// Funcs provides some general usefule template helpers.
func Funcs() template.FuncMap {
functs := sprig.FuncMap()
functs["date"] = zeroDate
// functs["getsection"] = getSection
return functs
}
func zeroDate(fmt string, date time.Time) string {
if date.IsZero() {
return ""
}
return date.Format(fmt)
}
func getSection(name string, sections []sv.ReleaseNoteSection) sv.ReleaseNoteSection { //nolint:ireturn
for _, section := range sections {
if section.SectionName() == name {
return section
}
}
return nil
}