From 3e9e74079c229ebd5a7bc42ecf419f6cdb67c310 Mon Sep 17 00:00:00 2001 From: Tommy Graves Date: Tue, 3 Sep 2024 11:29:03 -0400 Subject: [PATCH] Don't validate YAML (#104) --- go.mod | 2 +- internal/cli/service.go | 23 ----- internal/cli/service_test.go | 164 ----------------------------------- 3 files changed, 1 insertion(+), 188 deletions(-) diff --git a/go.mod b/go.mod index 6b8f383..3a9536a 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,6 @@ require ( github.com/spf13/cobra v1.8.1 golang.org/x/crypto v0.25.0 golang.org/x/term v0.22.0 - gopkg.in/yaml.v3 v3.0.1 ) require github.com/mattn/go-isatty v0.0.20 // indirect @@ -25,6 +24,7 @@ require ( github.com/mattn/go-colorable v0.1.2 // indirect github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( diff --git a/internal/cli/service.go b/internal/cli/service.go index a888ef9..000e68a 100644 --- a/internal/cli/service.go +++ b/internal/cli/service.go @@ -19,7 +19,6 @@ import ( "github.com/briandowns/spinner" "golang.org/x/crypto/ssh" - "gopkg.in/yaml.v3" ) // Service holds the main business logic of the CLI. @@ -129,18 +128,6 @@ func (s Service) InitiateRun(cfg InitiateRunConfig) (*api.InitiateRunResult, err return nil, errors.Wrap(err, "unable to read provided files") } - for _, taskDefinition := range mintDirectory { - if err := validateYAML(taskDefinition.FileContents); err != nil { - return nil, errors.Wrapf(err, "unable to parse %q", taskDefinition.Path) - } - } - - for _, taskDefinition := range taskDefinitions { - if err := validateYAML(taskDefinition.FileContents); err != nil { - return nil, errors.Wrapf(err, "unable to parse %q", taskDefinition.Path) - } - } - // mintDirectory task definitions must have their paths relative to the .mint directory for i, taskDefinition := range mintDirectory { relPath, err := filepath.Rel(mintDirectoryPath, taskDefinition.Path) @@ -718,16 +705,6 @@ func (s Service) findMintDirectoryPath(configuredDirectory string) (string, erro } } -// validateYAML checks whether a string can be parsed as YAML -func validateYAML(body string) error { - contentMap := make(map[string]any) - if err := yaml.Unmarshal([]byte(body), &contentMap); err != nil { - return errors.WithStack(err) - } - - return nil -} - func PickLatestMajorVersion(versions api.LeafVersionsResult, leaf string, _ string) (string, error) { latestVersion, ok := versions.LatestMajor[leaf] if !ok { diff --git a/internal/cli/service_test.go b/internal/cli/service_test.go index 09a7769..a529c0d 100644 --- a/internal/cli/service_test.go +++ b/internal/cli/service_test.go @@ -126,94 +126,6 @@ var _ = Describe("CLI Service", func() { }) }) - Context("when the specified file is invalid", func() { - var originalSpecifiedFileContent string - var originalMintDirFileContent string - - BeforeEach(func() { - originalSpecifiedFileContent = "NOT YAML!!!" - originalMintDirFileContent = "tasks:\n - key: mintdir\n run: echo 'mintdir'\n" - runConfig.MintFilePath = "mint.yml" - runConfig.MintDirectory = "" - - mockFS.MockGetwd = func() (string, error) { - return "/some/path/to/working/directory", nil - } - mockFS.MockExists = func(name string) (bool, error) { - return name == "/some/path/to/.mint", nil - } - mockFS.MockReadDir = func(name string) ([]fs.DirEntry, error) { - Expect(name).To(Equal("/some/path/to/.mint")) - return []fs.DirEntry{ - mocks.DirEntry{FileName: "mintdir-tasks.yml"}, - mocks.DirEntry{FileName: "mintdir-tasks.json"}, - }, nil - } - mockFS.MockOpen = func(name string) (fs.File, error) { - if name == "mint.yml" { - file := mocks.NewFile(originalSpecifiedFileContent) - return file, nil - } else if name == "/some/path/to/.mint/mintdir-tasks.yml" { - file := mocks.NewFile(originalMintDirFileContent) - return file, nil - } else { - Expect(name).To(BeNil()) - return nil, errors.New("file does not exist") - } - } - }) - - It("returns an error", func() { - _, err := service.InitiateRun(runConfig) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("unable to parse")) - }) - }) - - Context("when a directory with invalid files is found", func() { - var originalSpecifiedFileContent string - var originalMintDirFileContent string - - BeforeEach(func() { - originalSpecifiedFileContent = "tasks:\n - key: foo\n run: echo 'bar'\n" - originalMintDirFileContent = "NOT YAML!!!!!!!!" - runConfig.MintFilePath = "mint.yml" - runConfig.MintDirectory = "" - - mockFS.MockGetwd = func() (string, error) { - return "/some/path/to/working/directory", nil - } - mockFS.MockExists = func(name string) (bool, error) { - return name == "/some/path/to/.mint", nil - } - mockFS.MockReadDir = func(name string) ([]fs.DirEntry, error) { - Expect(name).To(Equal("/some/path/to/.mint")) - return []fs.DirEntry{ - mocks.DirEntry{FileName: "mintdir-tasks.yml"}, - mocks.DirEntry{FileName: "mintdir-tasks.json"}, - }, nil - } - mockFS.MockOpen = func(name string) (fs.File, error) { - if name == "mint.yml" { - file := mocks.NewFile(originalSpecifiedFileContent) - return file, nil - } else if name == "/some/path/to/.mint/mintdir-tasks.yml" { - file := mocks.NewFile(originalMintDirFileContent) - return file, nil - } else { - Expect(name).To(BeNil()) - return nil, errors.New("file does not exist") - } - } - }) - - It("returns an error", func() { - _, err := service.InitiateRun(runConfig) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("unable to parse")) - }) - }) - Context("when an empty directory is found", func() { var originalSpecifiedFileContent string var receivedSpecifiedFileContent string @@ -394,82 +306,6 @@ var _ = Describe("CLI Service", func() { }) }) - Context("when the specified file is invalid", func() { - var originalSpecifiedFileContent string - var originalMintDirFileContent string - - BeforeEach(func() { - originalSpecifiedFileContent = "NOT YAML!!!" - originalMintDirFileContent = "tasks:\n - key: mintdir\n run: echo 'mintdir'\n" - runConfig.MintFilePath = "mint.yml" - runConfig.MintDirectory = "some-dir" - - mockFS.MockReadDir = func(name string) ([]fs.DirEntry, error) { - Expect(name).To(Equal("some-dir")) - return []fs.DirEntry{ - mocks.DirEntry{FileName: "mintdir-tasks.yml"}, - mocks.DirEntry{FileName: "mintdir-tasks.json"}, - }, nil - } - mockFS.MockOpen = func(name string) (fs.File, error) { - if name == "mint.yml" { - file := mocks.NewFile(originalSpecifiedFileContent) - return file, nil - } else if name == "some-dir/mintdir-tasks.yml" { - file := mocks.NewFile(originalMintDirFileContent) - return file, nil - } else { - Expect(name).To(BeNil()) - return nil, errors.New("file does not exist") - } - } - }) - - It("returns an error", func() { - _, err := service.InitiateRun(runConfig) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("unable to parse")) - }) - }) - - Context("when a directory with invalid files is found", func() { - var originalSpecifiedFileContent string - var originalMintDirFileContent string - - BeforeEach(func() { - originalSpecifiedFileContent = "tasks:\n - key: foo\n run: echo 'bar'\n" - originalMintDirFileContent = "NOT YAML!!!!!!!!" - runConfig.MintFilePath = "mint.yml" - runConfig.MintDirectory = "some-dir" - - mockFS.MockReadDir = func(name string) ([]fs.DirEntry, error) { - Expect(name).To(Equal("some-dir")) - return []fs.DirEntry{ - mocks.DirEntry{FileName: "mintdir-tasks.yml"}, - mocks.DirEntry{FileName: "mintdir-tasks.json"}, - }, nil - } - mockFS.MockOpen = func(name string) (fs.File, error) { - if name == "mint.yml" { - file := mocks.NewFile(originalSpecifiedFileContent) - return file, nil - } else if name == "some-dir/mintdir-tasks.yml" { - file := mocks.NewFile(originalMintDirFileContent) - return file, nil - } else { - Expect(name).To(BeNil()) - return nil, errors.New("file does not exist") - } - } - }) - - It("returns an error", func() { - _, err := service.InitiateRun(runConfig) - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("unable to parse")) - }) - }) - Context("when an empty directory is found", func() { var originalSpecifiedFileContent string var receivedSpecifiedFileContent string