-
-
Notifications
You must be signed in to change notification settings - Fork 62
/
main.go
121 lines (95 loc) · 3.11 KB
/
main.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
package maven
import (
"strings"
"github.com/mitchellh/mapstructure"
"github.com/sirupsen/logrus"
"github.com/updatecli/updatecli/pkg/plugins/utils/version"
)
// Spec defines the parameters which can be provided to the Helm builder.
type Spec struct {
// RootDir defines the root directory used to recursively search for Helm Chart
RootDir string `yaml:",omitempty"`
// Ignore allows to specify rule to ignore autodiscovery a specific Helm based on a rule
Ignore MatchingRules `yaml:",omitempty"`
// Only allows to specify rule to only autodiscover manifest for a specific Helm based on a rule
Only MatchingRules `yaml:",omitempty"`
/*
versionfilter provides parameters to specify the version pattern used when generating manifest.
kind - semver
versionfilter of kind `semver` uses semantic versioning as version filtering
pattern accepts one of:
`patch` - patch only update patch version
`minor` - minor only update minor version
`major` - major only update major versions
`a version constraint` such as `>= 1.0.0`
kind - regex
versionfilter of kind `regex` uses regular expression as version filtering
pattern accepts a valid regular expression
example:
```
versionfilter:
kind: semver
pattern: minor
```
and its type like regex, semver, or just latest.
*/
VersionFilter version.Filter `yaml:",omitempty"`
}
// Maven hold all information needed to generate helm manifest.
type Maven struct {
// spec defines the settings provided via an updatecli manifest
spec Spec
// rootDir defines the root directory from where looking for Helm Chart
rootDir string
// scmID holds the scmID used by the newly generated manifest
scmID string
// versionFilter holds the "valid" version.filter, that might be different from the user-specified filter (Spec.VersionFilter)
versionFilter version.Filter
}
// New return a new valid Helm object.
func New(spec interface{}, rootDir, scmID string) (Maven, error) {
var s Spec
err := mapstructure.Decode(spec, &s)
if err != nil {
return Maven{}, err
}
dir := rootDir
if len(s.RootDir) > 0 {
dir = s.RootDir
}
if len(dir) == 0 {
logrus.Errorln("no working directory defined")
return Maven{}, err
}
newFilter := s.VersionFilter
if s.VersionFilter.IsZero() {
// By default, NPM versioning uses semantic versioning
newFilter.Kind = "latest"
newFilter.Pattern = "latest"
}
return Maven{
spec: s,
rootDir: dir,
scmID: scmID,
versionFilter: newFilter,
}, nil
}
func (m Maven) DiscoverManifests() ([][]byte, error) {
logrus.Infof("\n\n%s\n", strings.ToTitle("Maven"))
logrus.Infof("%s\n", strings.Repeat("=", len("Maven")+1))
manifests, err := m.discoverDependenciesManifests()
if err != nil {
return nil, err
}
dependencyManagementManifests, err := m.discoverDependencyManagementsManifests()
if err != nil {
return nil, err
}
manifests = append(manifests, dependencyManagementManifests...)
parentPomdependencyManifests, err := m.discoverParentPomDependencyManifests()
if err != nil {
return nil, err
}
manifests = append(manifests, parentPomdependencyManifests...)
return manifests, nil
}