/
appspec.go
39 lines (33 loc) · 1 KB
/
appspec.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
package configmanager
import (
"github.com/imdario/mergo"
"github.com/devstream-io/devstream/pkg/util/log"
"github.com/devstream-io/devstream/pkg/util/mapz"
)
// appSpec is app special options
type appSpec struct {
// language config
Language string `yaml:"language" mapstructure:"language" validate:"required"`
FrameWork string `yaml:"framework" mapstructure:"framework" validate:"required"`
}
// merge will merge vars and appSpec
func (s *appSpec) merge(vars map[string]any) map[string]any {
specMap, err := mapz.DecodeStructToMap(s)
if err != nil {
log.Warnf("appspec %+v decode failed: %+v", s, err)
return map[string]any{}
}
_ = mergo.Merge(&specMap, vars)
return specMap
}
func (s *appSpec) updatePiplineOption(options RawOptions) {
if _, exist := options["language"]; !exist && s.hasLanguageConfig() {
options["language"] = RawOptions{
"name": s.Language,
"framework": s.FrameWork,
}
}
}
func (s *appSpec) hasLanguageConfig() bool {
return s.Language != "" || s.FrameWork != ""
}