From d13e567c9ceeb8eab3f0f6f93cb9f0a8e4179dc8 Mon Sep 17 00:00:00 2001 From: Stephanie Cao Date: Tue, 22 Aug 2023 17:10:17 -0400 Subject: [PATCH] [DEVHAS-418]add dockerfile as an alternate name for Dockerfile (#382) * add dockerfile as an alternate name for Dockerfile Signed-off-by: Stephanie * convert to lowercase when look for filenames in cdq analysis Signed-off-by: Stephanie --------- Signed-off-by: Stephanie --- cdq-analysis/pkg/detect.go | 18 +++++++----- cdq-analysis/pkg/devfile.go | 29 +++++++++++-------- ...componentdetectionquery_controller_test.go | 2 +- pkg/devfile/devfile.go | 1 + pkg/devfile/devfile_test.go | 5 ++++ 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/cdq-analysis/pkg/detect.go b/cdq-analysis/pkg/detect.go index 117b189f..f2965623 100644 --- a/cdq-analysis/pkg/detect.go +++ b/cdq-analysis/pkg/detect.go @@ -68,7 +68,8 @@ func search(log logr.Logger, a Alizer, localpath string, devfileRegistryURL stri return nil, nil, nil, nil, err } for _, f := range files { - if f.Name() == DevfileName || f.Name() == HiddenDevfileName { + lowerCaseFileName := strings.ToLower(f.Name()) + if lowerCaseFileName == DevfileName || lowerCaseFileName == HiddenDevfileName { // Check for devfile.yaml or .devfile.yaml /* #nosec G304 -- false positive, filename is not based on user input*/ devfilePath := path.Join(curPath, f.Name()) @@ -98,7 +99,8 @@ func search(log logr.Logger, a Alizer, localpath string, devfileRegistryURL stri return nil, nil, nil, nil, err } for _, f := range hiddenfiles { - if f.Name() == DevfileName || f.Name() == HiddenDevfileName { + lowerCaseFileName := strings.ToLower(f.Name()) + if lowerCaseFileName == DevfileName || lowerCaseFileName == HiddenDevfileName { // Check for devfile.yaml or .devfile.yaml /* #nosec G304 -- false positive, filename is not based on user input*/ devfilePath := path.Join(hiddenDirPath, f.Name()) @@ -122,21 +124,22 @@ func search(log logr.Logger, a Alizer, localpath string, devfileRegistryURL stri } } } - } else if f.Name() == DockerfileName { - // Check for Dockerfile + } else if lowerCaseFileName == strings.ToLower(DockerfileName) { + // Check for Dockerfile or dockerfile // NOTE: if a Dockerfile is named differently, for example, Dockerfile.jvm; // thats ok. As we finish iterating through all the files in the localpath // we will read the devfile to ensure a Dockerfile has been referenced. // However, if a Dockerfile is named differently and not referenced in the devfile // it will go undetected - dockerfileContextMapFromRepo[context] = DockerfileName + dockerfileContextMapFromRepo[context] = f.Name() isDockerfilePresent = true - } else if f.Name() == ContainerfileName { + } else if lowerCaseFileName == strings.ToLower(ContainerfileName) { // Check for Containerfile dockerfileContextMapFromRepo[context] = ContainerfileName isDockerfilePresent = true } else if f.IsDir() && (f.Name() == DockerDir || f.Name() == HiddenDockerDir || f.Name() == BuildDir) { // Check for docker/Dockerfile, .docker/Dockerfile and build/Dockerfile + // OR docker/dockerfile, .docker/dockerfile and build/dockerfile // OR docker/Containerfile, .docker/Containerfile and build/Containerfile dirName := f.Name() dirPath := path.Join(curPath, dirName) @@ -145,7 +148,8 @@ func search(log logr.Logger, a Alizer, localpath string, devfileRegistryURL stri return nil, nil, nil, nil, err } for _, f := range files { - if f.Name() == DockerfileName || f.Name() == ContainerfileName { + lowerCaseFileName := strings.ToLower(f.Name()) + if lowerCaseFileName == strings.ToLower(DockerfileName) || lowerCaseFileName == strings.ToLower(ContainerfileName) { dockerfileContextMapFromRepo[context] = path.Join(dirName, f.Name()) isDockerfilePresent = true } diff --git a/cdq-analysis/pkg/devfile.go b/cdq-analysis/pkg/devfile.go index 125e460e..b9faaaa2 100644 --- a/cdq-analysis/pkg/devfile.go +++ b/cdq-analysis/pkg/devfile.go @@ -34,24 +34,29 @@ import ( ) const ( - DevfileName = "devfile.yaml" - HiddenDevfileName = ".devfile.yaml" - HiddenDevfileDir = ".devfile" - DockerfileName = "Dockerfile" - ContainerfileName = "Containerfile" - HiddenDockerDir = ".docker" - DockerDir = "docker" - BuildDir = "build" + DevfileName = "devfile.yaml" + HiddenDevfileName = ".devfile.yaml" + HiddenDevfileDir = ".devfile" + DockerfileName = "Dockerfile" + AlternateDockerfileName = "dockerfile" + ContainerfileName = "Containerfile" + HiddenDockerDir = ".docker" + DockerDir = "docker" + BuildDir = "build" Devfile = DevfileName // devfile.yaml HiddenDevfile = HiddenDevfileName // .devfile.yaml HiddenDirDevfile = HiddenDevfileDir + "/" + DevfileName // .devfile/devfile.yaml HiddenDirHiddenDevfile = HiddenDevfileDir + "/" + HiddenDevfileName // .devfile/.devfile.yaml - Dockerfile = DockerfileName // Dockerfile - HiddenDirDockerfile = HiddenDockerDir + "/" + DockerfileName // .docker/Dockerfile - DockerDirDockerfile = DockerDir + "/" + DockerfileName // docker/Dockerfile - BuildDirDockerfile = BuildDir + "/" + DockerfileName // build/Dockerfile + Dockerfile = DockerfileName // Dockerfile + HiddenDirDockerfile = HiddenDockerDir + "/" + DockerfileName // .docker/Dockerfile + DockerDirDockerfile = DockerDir + "/" + DockerfileName // docker/Dockerfile + BuildDirDockerfile = BuildDir + "/" + DockerfileName // build/Dockerfile + AlternateDockerfile = AlternateDockerfileName // dockerfile + HiddenDirAlternateDockerfile = HiddenDockerDir + "/" + AlternateDockerfileName // .docker/dockerfile + DockerDirAlternateDockerfile = DockerDir + "/" + AlternateDockerfileName // docker/dockerfile + BuildDirAlternateDockerfile = BuildDir + "/" + AlternateDockerfileName // build/dockerfile Containerfile = ContainerfileName // Containerfile HiddenDirContainerfile = HiddenDockerDir + "/" + ContainerfileName // .docker/Containerfile diff --git a/controllers/componentdetectionquery_controller_test.go b/controllers/componentdetectionquery_controller_test.go index 965a3f47..35377220 100644 --- a/controllers/componentdetectionquery_controller_test.go +++ b/controllers/componentdetectionquery_controller_test.go @@ -1443,7 +1443,7 @@ var _ = Describe("Component Detection Query controller", func() { Expect(component.ComponentStub.Source.GitSource.Revision).Should(Equal("main")) } - // Make sure the devfiles are detected + // Make sure the components are detected Expect(len(createdHasCompDetectionQuery.Status.ComponentDetected)).Should(Equal(3)) // mocked, not accurate. check unit test for accurate detection that uses the alizer client instead of the mock client. for _, componentDesc := range createdHasCompDetectionQuery.Status.ComponentDetected { Expect(componentDesc.ComponentStub.Source.GitSource).ShouldNot(BeNil()) diff --git a/pkg/devfile/devfile.go b/pkg/devfile/devfile.go index 5e60ef87..623fad49 100644 --- a/pkg/devfile/devfile.go +++ b/pkg/devfile/devfile.go @@ -744,6 +744,7 @@ func FindAndDownloadDockerfile(dir string) ([]byte, string, error) { var err error // Containerfile is an alternate name for Dockerfile validDockerfileLocations := []string{cdqanalysis.Dockerfile, cdqanalysis.DockerDirDockerfile, cdqanalysis.HiddenDirDockerfile, cdqanalysis.BuildDirDockerfile, + cdqanalysis.AlternateDockerfile, cdqanalysis.DockerDirAlternateDockerfile, cdqanalysis.HiddenDirAlternateDockerfile, cdqanalysis.BuildDirAlternateDockerfile, cdqanalysis.Containerfile, cdqanalysis.DockerDirContainerfile, cdqanalysis.HiddenDirContainerfile, cdqanalysis.BuildDirContainerfile} for _, path := range validDockerfileLocations { diff --git a/pkg/devfile/devfile_test.go b/pkg/devfile/devfile_test.go index 418f955c..a000be28 100644 --- a/pkg/devfile/devfile_test.go +++ b/pkg/devfile/devfile_test.go @@ -288,6 +288,11 @@ func TestFindAndDownloadDockerfile(t *testing.T) { url: "https://raw.githubusercontent.com/yangcao77/dockerfile-priority/main/case8", wantDockerfileContext: "build/Containerfile", }, + { + name: "Curl dockerfile", + url: "https://raw.githubusercontent.com/yangcao77/dockerfile-priority/main/case9", + wantDockerfileContext: "dockerfile", + }, { name: "Cannot curl for a Dockerfile or a Containerfile", url: "https://github.com/octocat/Hello-World",