/
config.go
134 lines (105 loc) · 2.66 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package config
import (
"encoding/json"
"fmt"
"os"
"strings"
"crdx.org/mission/internal/jsonc"
)
type Config struct {
Tasks []Task `json:"tasks"`
User User `json:"user"`
PassBin string `json:"passBin"`
Storage map[string]Storage `json:"storage"`
Ping Ping `json:"ping"`
Notify Notify `json:"notify"`
Mail Mail `json:"mail"`
Filters []string `json:"filters"`
}
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
type Storage struct {
Path string `json:"path"`
Commit bool `json:"commit"`
Chown bool `json:"chown"`
}
type Ping struct {
Enabled bool `json:"enabled"`
Endpoint string `json:"endpoint"`
}
type Notify struct {
Enabled bool `json:"enabled"`
}
type Mail struct {
Enabled bool `json:"enabled"`
Type string `json:"type"`
}
func (self Ping) GetEndpoint() (string, error) {
if strings.Contains(self.Endpoint, "%s") {
hostname, err := os.Hostname()
if err != nil {
return "", err
}
return fmt.Sprintf(self.Endpoint, hostname), nil
} else {
return self.Endpoint, nil
}
}
func (self Config) GetRunnableTasks(slugs []string) []Task {
if len(slugs) > 0 {
return self.getTasksBySlugs(slugs)
} else {
return self.getScheduledTasks()
}
}
func Get(path string) (config Config, err error) {
configJsonC, err := os.ReadFile(path)
if err != nil {
err = fmt.Errorf("unable to read config file: %w", err)
return
}
configJson, err := jsonc.Decode(configJsonC)
if err != nil {
err = fmt.Errorf("unable to decode jsonc: %w", err)
return
}
err = json.Unmarshal(configJson, &config)
if err != nil {
err = fmt.Errorf("unable to parse %s: %w", path, err)
return
}
err = transform(&config)
if err != nil {
err = fmt.Errorf("unable to transform %s: %w", path, err)
return
}
err = validate(config)
if err != nil {
err = fmt.Errorf("validation failure for %s: %w", path, err)
return
}
return
}
// —————————————————————————————————————————————————————————————————————————————————————————————————
func (self Config) getScheduledTasks() []Task {
var tasks []Task
for _, task := range self.Tasks {
if task.Scheduled {
tasks = append(tasks, task)
}
}
return tasks
}
func (self Config) getTasksBySlugs(slugs []string) []Task {
var tasks []Task
for _, slug := range slugs {
for _, task := range self.Tasks {
if task.Slug == slug {
tasks = append(tasks, task)
}
}
}
return tasks
}