From 4827785a733b2b6630afc04ad77edb6ebe60d3ae Mon Sep 17 00:00:00 2001 From: Vijayan T Date: Wed, 19 Jun 2024 12:52:03 +0530 Subject: [PATCH] support for sub-module in maven build (#4950) * support for sub-module in maven build * fixed test-cases Signed-off-by: Vijayan T * fixed test-cases Signed-off-by: Vijayan T * changed the function name --------- Signed-off-by: Vijayan T Co-authored-by: Vyacheslav Starostin <32613074+vstarostin@users.noreply.github.com> --- cmd/codeqlExecuteScan_test.go | 79 +++++++++++++++++++++++----- cmd/detectExecuteScan_test.go | 6 ++- cmd/nexusUpload_test.go | 13 +++-- pkg/maven/maven_test.go | 38 ++++++++----- pkg/maven/settings.go | 20 +++++-- pkg/whitesource/configHelper_test.go | 7 ++- 6 files changed, 124 insertions(+), 39 deletions(-) diff --git a/cmd/codeqlExecuteScan_test.go b/cmd/codeqlExecuteScan_test.go index 2270c6b106..1d1a3db1a5 100644 --- a/cmd/codeqlExecuteScan_test.go +++ b/cmd/codeqlExecuteScan_test.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "os" + "path/filepath" "strings" "testing" @@ -53,7 +54,10 @@ func TestGetMavenSettings(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", ProjectSettingsFile: "test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --settings=test.xml", params) + dir, _ := os.Getwd() + projectSettingsPath := filepath.Join(dir, "test.xml") + expectedCommand := fmt.Sprintf(" --settings=%s", projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("Skip Project Settings file in case already used", func(t *testing.T) { @@ -67,84 +71,127 @@ func TestGetMavenSettings(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "global.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=global.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s", globalSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("Project and Global Settings file", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", ProjectSettingsFile: "test.xml", GlobalSettingsFile: "global.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=global.xml --settings=test.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global.xml") + projectSettingsPath := filepath.Join(dir, "test.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile https url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", ProjectSettingsFile: "https://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --settings=.pipeline/mavenProjectSettings.xml", params) + dir, _ := os.Getwd() + projectSettingsPath := filepath.Join(dir, ".pipeline/mavenProjectSettings.xml") + expectedCommand := fmt.Sprintf(" --settings=%s", projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile http url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", ProjectSettingsFile: "http://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --settings=.pipeline/mavenProjectSettings.xml", params) + dir, _ := os.Getwd() + projectSettingsPath := filepath.Join(dir, ".pipeline/mavenProjectSettings.xml") + expectedCommand := fmt.Sprintf(" --settings=%s", projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("GlobalSettingsFile https url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "https://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=.pipeline/mavenGlobalSettings.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline/mavenGlobalSettings.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s", globalSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("GlobalSettingsFile http url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "http://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=.pipeline/mavenGlobalSettings.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline/mavenGlobalSettings.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s", globalSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile and GlobalSettingsFile https url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "https://jenkins-sap-test.com/test.xml", ProjectSettingsFile: "http://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=.pipeline/mavenGlobalSettings.xml --settings=.pipeline/mavenProjectSettings.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline/mavenGlobalSettings.xml") + projectSettingsPath := filepath.Join(dir, ".pipeline/mavenProjectSettings.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile and GlobalSettingsFile http url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "http://jenkins-sap-test.com/test.xml", ProjectSettingsFile: "http://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=.pipeline/mavenGlobalSettings.xml --settings=.pipeline/mavenProjectSettings.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline/mavenGlobalSettings.xml") + projectSettingsPath := filepath.Join(dir, ".pipeline/mavenProjectSettings.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile file and GlobalSettingsFile https url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "https://jenkins-sap-test.com/test.xml", ProjectSettingsFile: "test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=.pipeline/mavenGlobalSettings.xml --settings=test.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline/mavenGlobalSettings.xml") + projectSettingsPath := filepath.Join(dir, "test.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile file and GlobalSettingsFile https url", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "http://jenkins-sap-test.com/test.xml", ProjectSettingsFile: "test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=.pipeline/mavenGlobalSettings.xml --settings=test.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline/mavenGlobalSettings.xml") + projectSettingsPath := filepath.Join(dir, "test.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile https url and GlobalSettingsFile file", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "global.xml", ProjectSettingsFile: "http://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=global.xml --settings=.pipeline/mavenProjectSettings.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global.xml") + projectSettingsPath := filepath.Join(dir, ".pipeline/mavenProjectSettings.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) t.Run("ProjectSettingsFile http url and GlobalSettingsFile file", func(t *testing.T) { config := codeqlExecuteScanOptions{BuildTool: "maven", GlobalSettingsFile: "global.xml", ProjectSettingsFile: "http://jenkins-sap-test.com/test.xml"} buildCmd := "mvn clean install" params := getMavenSettings(buildCmd, &config, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, " --global-settings=global.xml --settings=.pipeline/mavenProjectSettings.xml", params) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global.xml") + projectSettingsPath := filepath.Join(dir, ".pipeline/mavenProjectSettings.xml") + expectedCommand := fmt.Sprintf(" --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, params) }) } @@ -196,7 +243,11 @@ func TestUpdateCmdFlag(t *testing.T) { "--command": "mvn clean install", } updateCmdFlag(&config, customFlags, newCodeqlExecuteScanTestsUtils()) - assert.Equal(t, "mvn clean install --global-settings=global.xml --settings=test.xml", customFlags["--command"]) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global.xml") + projectSettingsPath := filepath.Join(dir, "test.xml") + expectedCommand := fmt.Sprintf("mvn clean install --global-settings=%s --settings=%s", globalSettingsPath, projectSettingsPath) + assert.Equal(t, expectedCommand, customFlags["--command"]) assert.Equal(t, "", customFlags["-c"]) }) diff --git a/cmd/detectExecuteScan_test.go b/cmd/detectExecuteScan_test.go index d6288fd53d..9625a51293 100644 --- a/cmd/detectExecuteScan_test.go +++ b/cmd/detectExecuteScan_test.go @@ -348,8 +348,10 @@ func TestRunDetect(t *testing.T) { assert.Equal(t, ".", utilsMock.Dir, "Wrong execution directory used") assert.Equal(t, "/bin/bash", utilsMock.Shell[0], "Bash shell expected") absoluteLocalPath := string(os.PathSeparator) + filepath.Join("root_folder", ".pipeline", "local_repo") - - expectedParam := "\"--detect.maven.build.command=--global-settings global-settings.xml --settings project-settings.xml -Dmaven.repo.local=" + absoluteLocalPath + "\"" + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global-settings.xml") + projectSettingsPath := filepath.Join(dir, "project-settings.xml") + expectedParam := "\"--detect.maven.build.command=--global-settings " + globalSettingsPath + " --settings " + projectSettingsPath + " -Dmaven.repo.local=" + absoluteLocalPath + "\"" assert.Contains(t, utilsMock.Calls[0], expectedParam) }) diff --git a/cmd/nexusUpload_test.go b/cmd/nexusUpload_test.go index 7b2cee9f32..d112898534 100644 --- a/cmd/nexusUpload_test.go +++ b/cmd/nexusUpload_test.go @@ -6,15 +6,16 @@ package cmd import ( "errors" "fmt" - "github.com/SAP/jenkins-library/pkg/maven" - "github.com/SAP/jenkins-library/pkg/mock" - "github.com/SAP/jenkins-library/pkg/nexus" - "github.com/stretchr/testify/assert" "net/http" "os" "path/filepath" "strings" "testing" + + "github.com/SAP/jenkins-library/pkg/maven" + "github.com/SAP/jenkins-library/pkg/mock" + "github.com/SAP/jenkins-library/pkg/nexus" + "github.com/stretchr/testify/assert" ) type mockUtilsBundle struct { @@ -679,9 +680,11 @@ func TestUploadMavenProjects(t *testing.T) { assert.NoError(t, err, "expected Maven upload to work") assert.Equal(t, 1, len(utils.Calls)) + dir, _ := os.Getwd() + absoluteSettingsPath := filepath.Join(dir, settingsPath) expectedParameters1 := []string{ "--settings", - settingsPath, + absoluteSettingsPath, "-Durl=http://localhost:8081/repository/maven-releases/", "-DgroupId=com.mycompany.app", "-Dversion=1.0", diff --git a/pkg/maven/maven_test.go b/pkg/maven/maven_test.go index ecfa97ff50..e194331471 100644 --- a/pkg/maven/maven_test.go +++ b/pkg/maven/maven_test.go @@ -5,9 +5,11 @@ package maven import ( "errors" - "github.com/SAP/jenkins-library/pkg/mock" + "os" "path/filepath" + "github.com/SAP/jenkins-library/pkg/mock" + "net/http" "testing" @@ -78,7 +80,10 @@ func TestExecute(t *testing.T) { Goals: []string{"flatten", "install"}, Defines: []string{"-Da=b"}, Flags: []string{"-q"}, LogSuccessfulMavenTransfers: true, ReturnStdout: false} - expectedParameters := []string{"--global-settings", "anotherSettings.xml", "--settings", "settings.xml", + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "anotherSettings.xml") + projectSettingsPath := filepath.Join(dir, "settings.xml") + expectedParameters := []string{"--global-settings", globalSettingsPath, "--settings", projectSettingsPath, "-Dmaven.repo.local=.m2/", "--file", "pom.xml", "-q", "-Da=b", "--batch-mode", "flatten", "install"} @@ -115,9 +120,12 @@ func TestGetParameters(t *testing.T) { t.Run("should resolve configured parameters and download the settings files", func(t *testing.T) { utils := NewMockUtils(false) opts := ExecuteOptions{PomPath: "pom.xml", GlobalSettingsFile: "https://mysettings.com", ProjectSettingsFile: "http://myprojectsettings.com", ReturnStdout: false} + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline", "mavenGlobalSettings.xml") + projectSettingsPath := filepath.Join(dir, ".pipeline", "mavenProjectSettings.xml") expectedParameters := []string{ - "--global-settings", ".pipeline/mavenGlobalSettings.xml", - "--settings", ".pipeline/mavenProjectSettings.xml", + "--global-settings", globalSettingsPath, + "--settings", projectSettingsPath, "--file", "pom.xml", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode"} @@ -139,9 +147,12 @@ func TestGetParameters(t *testing.T) { utils.AddFile(".pipeline/mavenGlobalSettings.xml", []byte("dummyContent")) utils.AddFile(".pipeline/mavenProjectSettings.xml", []byte("dummyContent")) opts := ExecuteOptions{PomPath: "pom.xml", GlobalSettingsFile: "https://mysettings.com", ProjectSettingsFile: "http://myprojectsettings.com", ReturnStdout: false} + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, ".pipeline", "mavenGlobalSettings.xml") + projectSettingsPath := filepath.Join(dir, ".pipeline", "mavenProjectSettings.xml") expectedParameters := []string{ - "--global-settings", ".pipeline/mavenGlobalSettings.xml", - "--settings", ".pipeline/mavenProjectSettings.xml", + "--global-settings", globalSettingsPath, + "--settings", projectSettingsPath, "--file", "pom.xml", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode"} @@ -207,16 +218,17 @@ func TestMavenInstall(t *testing.T) { options := EvaluateOptions{} options.ProjectSettingsFile = "settings.xml" - utils.StdoutReturn = map[string]string{"mvn --settings settings.xml --file pom.xml -Dexpression=project.build.finalName -DforceStdout -q -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn --batch-mode org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate": "foo"} + dir, _ := os.Getwd() + projectSettingsPath := filepath.Join(dir, "settings.xml") + utils.StdoutReturn = map[string]string{"mvn --settings " + projectSettingsPath + " --file pom.xml -Dexpression=project.build.finalName -DforceStdout -q -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn --batch-mode org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate": "foo"} err := doInstallMavenArtifacts(&options, &utils) - assert.NoError(t, err) if assert.Equal(t, 5, len(utils.Calls)) { - assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", "settings.xml", "-Dflatten.mode=resolveCiFriendliesOnly", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "flatten:flatten"}}, utils.Calls[0]) - assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", "settings.xml", "--file", "pom.xml", "-Dexpression=project.packaging", "-DforceStdout", "-q", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate"}}, utils.Calls[1]) - assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", "settings.xml", "--file", "pom.xml", "-Dexpression=project.build.finalName", "-DforceStdout", "-q", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate"}}, utils.Calls[2]) - assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", "settings.xml", "-Dfile=" + filepath.Join(".", "target", "foo.jar"), "-Dpackaging=jar", "-DpomFile=pom.xml", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "install:install-file"}}, utils.Calls[3]) - assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", "settings.xml", "-Dfile=" + filepath.Join(".", "target", "foo.war"), "-DpomFile=pom.xml", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "install:install-file"}}, utils.Calls[4]) + assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", projectSettingsPath, "-Dflatten.mode=resolveCiFriendliesOnly", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "flatten:flatten"}}, utils.Calls[0]) + assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", projectSettingsPath, "--file", "pom.xml", "-Dexpression=project.packaging", "-DforceStdout", "-q", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate"}}, utils.Calls[1]) + assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", projectSettingsPath, "--file", "pom.xml", "-Dexpression=project.build.finalName", "-DforceStdout", "-q", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate"}}, utils.Calls[2]) + assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", projectSettingsPath, "-Dfile=" + filepath.Join(".", "target", "foo.jar"), "-Dpackaging=jar", "-DpomFile=pom.xml", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "install:install-file"}}, utils.Calls[3]) + assert.Equal(t, mock.ExecCall{Exec: "mvn", Params: []string{"--settings", projectSettingsPath, "-Dfile=" + filepath.Join(".", "target", "foo.war"), "-DpomFile=pom.xml", "-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn", "--batch-mode", "install:install-file"}}, utils.Calls[4]) } }) diff --git a/pkg/maven/settings.go b/pkg/maven/settings.go index 5db677131e..151b516ca9 100644 --- a/pkg/maven/settings.go +++ b/pkg/maven/settings.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "os" + "path" "path/filepath" "strings" @@ -28,7 +29,7 @@ type SettingsDownloadUtils interface { func DownloadAndGetMavenParameters(globalSettingsFile string, projectSettingsFile string, utils SettingsDownloadUtils) ([]string, error) { mavenArgs := []string{} if len(globalSettingsFile) > 0 { - globalSettingsFileName, err := downloadSettingsIfURL(globalSettingsFile, ".pipeline/mavenGlobalSettings.xml", utils, false) + globalSettingsFileName, err := getSettingsFilePath(globalSettingsFile, ".pipeline/mavenGlobalSettings.xml", utils, false) if err != nil { return nil, err } @@ -39,7 +40,7 @@ func DownloadAndGetMavenParameters(globalSettingsFile string, projectSettingsFil } if len(projectSettingsFile) > 0 { - projectSettingsFileName, err := downloadSettingsIfURL(projectSettingsFile, ".pipeline/mavenProjectSettings.xml", utils, false) + projectSettingsFileName, err := getSettingsFilePath(projectSettingsFile, ".pipeline/mavenProjectSettings.xml", utils, false) if err != nil { return nil, err } @@ -276,8 +277,9 @@ func downloadAndCopySettingsFile(src string, dest string, utils SettingsDownload return nil } -func downloadSettingsIfURL(settingsFileOption, settingsFile string, utils SettingsDownloadUtils, overwrite bool) (string, error) { +func getSettingsFilePath(settingsFileOption, settingsFile string, utils SettingsDownloadUtils, overwrite bool) (string, error) { result := settingsFileOption + var absoluteFilePath string if strings.HasPrefix(settingsFileOption, "http:") || strings.HasPrefix(settingsFileOption, "https:") { err := downloadSettingsFromURL(settingsFileOption, settingsFile, utils, overwrite) if err != nil { @@ -285,7 +287,17 @@ func downloadSettingsIfURL(settingsFileOption, settingsFile string, utils Settin } result = settingsFile } - return result, nil + //Added support for sub-mobules in maven build by providing absolute path + if filepath.IsAbs(result) { + absoluteFilePath = result + } else { + dir, err := os.Getwd() + if err != nil { + return "", fmt.Errorf("failed to get current working directory: %w", err) + } + absoluteFilePath = path.Join(dir, result) + } + return absoluteFilePath, nil } func downloadSettingsFromURL(url, filename string, utils SettingsDownloadUtils, overwrite bool) error { diff --git a/pkg/whitesource/configHelper_test.go b/pkg/whitesource/configHelper_test.go index b4c9bc79bd..7d3b244a6f 100644 --- a/pkg/whitesource/configHelper_test.go +++ b/pkg/whitesource/configHelper_test.go @@ -5,6 +5,8 @@ package whitesource import ( "fmt" + "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -231,7 +233,10 @@ func TestAddBuildToolDefaults(t *testing.T) { } utilsMock.AddFile("unit-tests/pom.xml", []byte("dummy")) testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock) - assert.Contains(t, testConfig, ConfigOption{Name: "maven.additionalArguments", Value: "--global-settings global-settings.xml --settings project-settings.xml --projects !unit-tests", Append: true}) + dir, _ := os.Getwd() + globalSettingsPath := filepath.Join(dir, "global-settings.xml") + projectSettingsPath := filepath.Join(dir, "project-settings.xml") + assert.Contains(t, testConfig, ConfigOption{Name: "maven.additionalArguments", Value: "--global-settings " + globalSettingsPath + " --settings " + projectSettingsPath + " --projects !unit-tests", Append: true}) }) t.Run("Docker - default", func(t *testing.T) {