Skip to content

Commit f235e40

Browse files
authored
Use builders linter if release has charts only (#335)
1 parent 9cff251 commit f235e40

File tree

1 file changed

+40
-6
lines changed

1 file changed

+40
-6
lines changed

cli/cmd/release_lint.go

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cmd
22

33
import (
4-
"io/ioutil"
4+
"io/fs"
55
"os"
66
"path/filepath"
77

@@ -10,6 +10,7 @@ import (
1010
"github.com/replicatedhq/replicated/cli/print"
1111
"github.com/replicatedhq/replicated/pkg/types"
1212
"github.com/spf13/cobra"
13+
"helm.sh/helm/v3/pkg/chart/loader"
1314
)
1415

1516
var (
@@ -46,16 +47,19 @@ func (r *runners) releaseLint(cmd *cobra.Command, args []string) error {
4647
var lintReleaseData []byte
4748
var contentType string
4849
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+
}
4954
data, err := tarYAMLDir(r.args.lintReleaseYamlDir)
5055
if err != nil {
5156
return errors.Wrap(err, "failed to read yaml dir")
5257
}
5358
lintReleaseData = data
54-
// TODO: all specfiles are charts => isBuildersRelease
55-
isBuildersRelease = false
59+
isBuildersRelease = isHelmChartsOnly
5660
contentType = "application/tar"
5761
} else if r.args.lintReleaseChart != "" {
58-
data, err := ioutil.ReadFile(r.args.lintReleaseChart)
62+
data, err := os.ReadFile(r.args.lintReleaseChart)
5963
if err != nil {
6064
return errors.Wrap(err, "failed to read chart file")
6165
}
@@ -111,7 +115,7 @@ func shouldFail(lintResult []types.LintMessage, failOn string) bool {
111115
}
112116

113117
func tarYAMLDir(yamlDir string) ([]byte, error) {
114-
archiveDir, err := ioutil.TempDir("", "replicated")
118+
archiveDir, err := os.MkdirTemp("", "replicated")
115119
if err != nil {
116120
return nil, errors.Wrap(err, "failed to create temp dir for archive")
117121
}
@@ -127,10 +131,40 @@ func tarYAMLDir(yamlDir string) ([]byte, error) {
127131
return nil, errors.Wrap(err, "failed to archive")
128132
}
129133

130-
data, err := ioutil.ReadFile(archiveFile)
134+
data, err := os.ReadFile(archiveFile)
131135
if err != nil {
132136
return nil, errors.Wrap(err, "failed to read archive file")
133137
}
134138

135139
return data, nil
136140
}
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

Comments
 (0)