-
Notifications
You must be signed in to change notification settings - Fork 3
/
lint.go
52 lines (48 loc) · 1.65 KB
/
lint.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
/*
* Copyright 2024 Marc Nuri
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package helm
import (
"fmt"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/lint/support"
)
type LintOptions struct {
Path string
Strict bool
Quiet bool
}
func Lint(options *LintOptions) ([]string, bool) {
lintClient := action.NewLint()
lintClient.Strict = options.Strict
lintClient.Quiet = options.Quiet
result := lintClient.Run([]string{options.Path}, make(map[string]interface{}))
var messages []string
// From upstream https://github.com/helm/helm/blob/33ab3519849a90549f734fbbbc0aecb7f37f7570/cmd/helm/lint.go#L108-L111
// All Errors that are generated by a chart with failed lint will be included in the result.Messages too
// Only consider them if Messages is empty
if len(result.Messages) == 0 {
for _, err := range result.Errors {
messages = append(messages, fmt.Sprintf("Error %s", err.Error()))
}
}
for _, msg := range result.Messages {
// In strict mode, msg with low severity will be ignored
if !options.Quiet || msg.Severity > support.InfoSev {
messages = append(messages, fmt.Sprintf("%s", msg))
}
}
return messages, len(result.Errors) > 0
}