1
1
package cmd
2
2
3
3
import (
4
- "io/ioutil "
4
+ "io/fs "
5
5
"os"
6
6
"path/filepath"
7
7
@@ -10,6 +10,7 @@ import (
10
10
"github.com/replicatedhq/replicated/cli/print"
11
11
"github.com/replicatedhq/replicated/pkg/types"
12
12
"github.com/spf13/cobra"
13
+ "helm.sh/helm/v3/pkg/chart/loader"
13
14
)
14
15
15
16
var (
@@ -46,16 +47,19 @@ func (r *runners) releaseLint(cmd *cobra.Command, args []string) error {
46
47
var lintReleaseData []byte
47
48
var contentType string
48
49
if r .args .lintReleaseYamlDir != "" {
50
+ isHelmChartsOnly , err := isHelmChartsOnly (r .args .lintReleaseYamlDir )
51
+ if err != nil {
52
+ return errors .Wrap (err , "failed to check if yaml dir is helm charts only" )
53
+ }
49
54
data , err := tarYAMLDir (r .args .lintReleaseYamlDir )
50
55
if err != nil {
51
56
return errors .Wrap (err , "failed to read yaml dir" )
52
57
}
53
58
lintReleaseData = data
54
- // TODO: all specfiles are charts => isBuildersRelease
55
- isBuildersRelease = false
59
+ isBuildersRelease = isHelmChartsOnly
56
60
contentType = "application/tar"
57
61
} else if r .args .lintReleaseChart != "" {
58
- data , err := ioutil .ReadFile (r .args .lintReleaseChart )
62
+ data , err := os .ReadFile (r .args .lintReleaseChart )
59
63
if err != nil {
60
64
return errors .Wrap (err , "failed to read chart file" )
61
65
}
@@ -111,7 +115,7 @@ func shouldFail(lintResult []types.LintMessage, failOn string) bool {
111
115
}
112
116
113
117
func tarYAMLDir (yamlDir string ) ([]byte , error ) {
114
- archiveDir , err := ioutil . TempDir ("" , "replicated" )
118
+ archiveDir , err := os . MkdirTemp ("" , "replicated" )
115
119
if err != nil {
116
120
return nil , errors .Wrap (err , "failed to create temp dir for archive" )
117
121
}
@@ -127,10 +131,40 @@ func tarYAMLDir(yamlDir string) ([]byte, error) {
127
131
return nil , errors .Wrap (err , "failed to archive" )
128
132
}
129
133
130
- data , err := ioutil .ReadFile (archiveFile )
134
+ data , err := os .ReadFile (archiveFile )
131
135
if err != nil {
132
136
return nil , errors .Wrap (err , "failed to read archive file" )
133
137
}
134
138
135
139
return data , nil
136
140
}
141
+
142
+ func isHelmChartsOnly (yamlDir string ) (bool , error ) {
143
+ helmError := errors .New ("helm error" )
144
+ err := filepath .Walk (yamlDir , func (path string , info fs.FileInfo , err error ) error {
145
+ if err != nil {
146
+ return err
147
+ }
148
+
149
+ if info .IsDir () {
150
+ return nil
151
+ }
152
+
153
+ _ , err = loader .LoadFile (path )
154
+ if err != nil {
155
+ return helmError
156
+ }
157
+
158
+ return nil
159
+ })
160
+
161
+ if err == helmError {
162
+ return false , nil
163
+ }
164
+
165
+ if err == nil {
166
+ return true , nil
167
+ }
168
+
169
+ return false , errors .Wrap (err , "failed to walk yaml dir" )
170
+ }
0 commit comments