-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathconfig.go
97 lines (84 loc) · 3.18 KB
/
config.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
import (
"fmt"
"github.com/charmbracelet/huh"
"github.com/charmbracelet/log"
"github.com/spf13/afero"
"github.com/stefanlogue/meteor/pkg/config"
)
const (
defaultCommitTitleCharLimit = 48
defaultMessageTemplate = "{{.Type}}{{if .Scope}}({{.Scope}}){{end}}{{if .IsBreakingChange}}!{{end}}: {{.Message}}"
defaultMessageWithTicketTemplate = "{{.TicketNumber}}{{if .Scope}}({{.Scope}}){{end}}{{if .IsBreakingChange}}!{{end}}: <{{.Type}}> {{.Message}}"
)
type LoadConfigReturn struct {
MessageTemplate string
MessageWithTicketTemplate string
Prefixes []huh.Option[string]
Coauthors []huh.Option[string]
Boards []huh.Option[string]
Scopes []huh.Option[string]
CommitTitleCharLimit int
ShowIntro bool
}
// loadConfig loads the config file from the current directory or any parent
func loadConfig(fs afero.Fs) (LoadConfigReturn, error) {
filePath, err := config.FindConfigFile(fs)
if err != nil {
log.Debug("Error finding config file", "error", err)
return LoadConfigReturn{
MessageTemplate: defaultMessageTemplate,
MessageWithTicketTemplate: defaultMessageWithTicketTemplate,
Prefixes: config.DefaultPrefixes,
CommitTitleCharLimit: defaultCommitTitleCharLimit,
ShowIntro: true,
}, nil
}
log.Debug("found config file", "path", filePath)
c := config.New()
err = c.LoadFile(filePath)
if err != nil {
return LoadConfigReturn{
MessageTemplate: defaultMessageTemplate,
MessageWithTicketTemplate: defaultMessageWithTicketTemplate,
CommitTitleCharLimit: defaultCommitTitleCharLimit,
ShowIntro: true,
}, fmt.Errorf("error parsing config file: %w", err)
}
if c.ShowIntro == nil {
showIntro := true
c.ShowIntro = &showIntro
}
if c.CommitTitleCharLimit == nil || *c.CommitTitleCharLimit < defaultCommitTitleCharLimit {
commitTitleCharLimit := defaultCommitTitleCharLimit
c.CommitTitleCharLimit = &commitTitleCharLimit
}
messageTemplate := defaultMessageTemplate
if c.MessageTemplate != nil {
messageTemplate, err = config.ConvertTemplate(*c.MessageTemplate)
if err != nil {
log.Error("Error converting message template", "error", err)
messageTemplate = defaultMessageTemplate
}
}
c.MessageTemplate = &messageTemplate
messageWithTicketTemplate := defaultMessageWithTicketTemplate
if c.MessageWithTicketTemplate != nil {
messageWithTicketTemplate, err = config.ConvertTemplate(*c.MessageWithTicketTemplate)
if err != nil {
log.Error("Error converting message with ticket template", "error", err)
messageWithTicketTemplate = defaultMessageWithTicketTemplate
}
}
c.MessageWithTicketTemplate = &messageWithTicketTemplate
return LoadConfigReturn{
MessageTemplate: messageTemplate,
MessageWithTicketTemplate: messageWithTicketTemplate,
Prefixes: c.Prefixes.Options(),
Coauthors: c.Coauthors.Options(),
Boards: c.Boards.Options(),
Scopes: c.Scopes.Options(),
CommitTitleCharLimit: *c.CommitTitleCharLimit,
ShowIntro: *c.ShowIntro,
}, nil
}