This is an automated email from the ASF dual-hosted git repository. tsato pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 0b8a1fe6a720830e2f578ed0011ff9a622073f6e Author: phantomjinx <p.g.richard...@phantomjinx.co.uk> AuthorDate: Thu Dec 1 18:42:27 2022 +0000 (e2e): make the use of paths os independent * Uses FromSlash in tests to ensure comparisons on Windows are not affected by direction of slashes * Uses filepath.Base as path.Base fails to return the final name when running on Windows * Uses filepath.Join as path.Join, where appropriate, to return os corrected paths * Tests / Resources * Uses filepath.ToSlash to make paths unix-like for consistent storage and easy comparison * jvm * Ensure the classpath default paths are always converted to unix-style * cmd/source/util.go * Handles difference between how linux and windows deal with an invalid path. Since a PathError is returned from the PermissionDenied test as well then handling this through the error message is the only alternative --- cmd/util/vfs-gen/main.go | 2 +- pkg/builder/image.go | 13 +++--- pkg/builder/quarkus.go | 15 +++---- pkg/builder/s2i.go | 5 +-- pkg/builder/spectrum.go | 5 +-- pkg/cmd/config_test.go | 9 ++-- pkg/cmd/local/local.go | 30 ++++++------- pkg/cmd/local/workdir.go | 25 ++++++----- pkg/cmd/modeline.go | 5 +-- pkg/cmd/modeline_test.go | 78 ++++++++++++++++----------------- pkg/cmd/run_support.go | 7 ++- pkg/cmd/source/source.go | 4 +- pkg/cmd/source/util.go | 8 ++++ pkg/cmd/source/util_test.go | 26 ++++++++++- pkg/controller/build/build_pod.go | 14 +++--- pkg/controller/build/monitor_routine.go | 6 +-- pkg/install/kamelets.go | 3 +- pkg/resources/resources_support.go | 5 ++- pkg/trait/container.go | 4 +- pkg/trait/jvm.go | 8 ++-- pkg/trait/jvm_test.go | 16 ++++--- pkg/trait/knative_service_test.go | 5 ++- pkg/trait/openapi.go | 7 ++- pkg/trait/trait_test.go | 6 +-- pkg/trait/trait_types.go | 17 +++---- pkg/util/camel/camel_dependencies.go | 3 +- pkg/util/camel/camel_util.go | 16 +++---- pkg/util/camel/catalog.go | 4 +- pkg/util/digest/digest.go | 4 +- pkg/util/docker/docker.go | 10 ++--- pkg/util/docker/docker_base.go | 4 +- pkg/util/jvm/keystore.go | 4 +- pkg/util/maven/maven_command.go | 14 +++--- pkg/util/util.go | 2 +- 34 files changed, 211 insertions(+), 173 deletions(-) diff --git a/cmd/util/vfs-gen/main.go b/cmd/util/vfs-gen/main.go index 121d3646b..df8d94e01 100644 --- a/cmd/util/vfs-gen/main.go +++ b/cmd/util/vfs-gen/main.go @@ -110,7 +110,7 @@ func main() { // err = vfsgen.Generate(fs, vfsgen.Options{ Filename: resourceFile, - PackageName: path.Base(destDir), + PackageName: filepath.Base(destDir), }) if err != nil { log.Fatalln(err) diff --git a/pkg/builder/image.go b/pkg/builder/image.go index a005f42f2..5bd5c46f0 100644 --- a/pkg/builder/image.go +++ b/pkg/builder/image.go @@ -21,6 +21,7 @@ import ( "io/ioutil" "os" "path" + "path/filepath" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" @@ -68,7 +69,7 @@ func nativeImageContext(ctx *builderContext) error { ctx.Artifacts = []v1.Artifact{ { ID: runner, - Location: path.Join(ctx.Path, "maven", "target", runner), + Location: filepath.Join(ctx.Path, "maven", "target", runner), Target: runner, }, } @@ -87,7 +88,7 @@ func executableDockerfile(ctx *builderContext) error { USER nonroot `) - err := ioutil.WriteFile(path.Join(ctx.Path, ContextDir, "Dockerfile"), dockerfile, 0o400) + err := ioutil.WriteFile(filepath.Join(ctx.Path, ContextDir, "Dockerfile"), dockerfile, 0o400) if err != nil { return err } @@ -111,7 +112,7 @@ func jvmDockerfile(ctx *builderContext) error { USER 1000 `) - err := ioutil.WriteFile(path.Join(ctx.Path, ContextDir, "Dockerfile"), dockerfile, 0o400) + err := ioutil.WriteFile(filepath.Join(ctx.Path, ContextDir, "Dockerfile"), dockerfile, 0o400) if err != nil { return err } @@ -153,7 +154,7 @@ func imageContext(ctx *builderContext, selector artifactsSelector) error { return err } - contextDir := path.Join(ctx.Path, ContextDir) + contextDir := filepath.Join(ctx.Path, ContextDir) err = os.MkdirAll(contextDir, 0o700) if err != nil { @@ -161,7 +162,7 @@ func imageContext(ctx *builderContext, selector artifactsSelector) error { } for _, entry := range ctx.SelectedArtifacts { - _, err := util.CopyFile(entry.Location, path.Join(contextDir, entry.Target)) + _, err := util.CopyFile(entry.Location, filepath.Join(contextDir, entry.Target)) if err != nil { return err } @@ -169,7 +170,7 @@ func imageContext(ctx *builderContext, selector artifactsSelector) error { for _, entry := range ctx.Resources { filePath, fileName := path.Split(entry.Target) - fullPath := path.Join(contextDir, filePath, fileName) + fullPath := filepath.Join(contextDir, filePath, fileName) if err := util.WriteFileWithContent(fullPath, entry.Content); err != nil { return err } diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go index 2061a160f..f5ad3ef79 100644 --- a/pkg/builder/quarkus.go +++ b/pkg/builder/quarkus.go @@ -21,7 +21,6 @@ import ( "context" "fmt" "os" - "path" "path/filepath" "strings" @@ -146,7 +145,7 @@ func GenerateQuarkusProjectCommon(camelQuarkusVersion string, runtimeVersion str } func buildQuarkusRunner(ctx *builderContext) error { - mc := maven.NewContext(path.Join(ctx.Path, "maven")) + mc := maven.NewContext(filepath.Join(ctx.Path, "maven")) mc.GlobalSettings = ctx.Maven.GlobalSettings mc.UserSettings = ctx.Maven.UserSettings mc.SettingsSecurity = ctx.Maven.SettingsSecurity @@ -155,7 +154,7 @@ func buildQuarkusRunner(ctx *builderContext) error { if ctx.Maven.TrustStoreName != "" { mc.ExtraMavenOpts = append(mc.ExtraMavenOpts, - "-Djavax.net.ssl.trustStore="+path.Join(ctx.Path, ctx.Maven.TrustStoreName), + "-Djavax.net.ssl.trustStore="+filepath.Join(ctx.Path, ctx.Maven.TrustStoreName), "-Djavax.net.ssl.trustStorePassword="+ctx.Maven.TrustStorePass, ) } @@ -169,7 +168,7 @@ func buildQuarkusRunner(ctx *builderContext) error { } func BuildQuarkusRunnerCommon(ctx context.Context, mc maven.Context, project maven.Project) error { - resourcesPath := path.Join(mc.Path, "src", "main", "resources") + resourcesPath := filepath.Join(mc.Path, "src", "main", "resources") if err := os.MkdirAll(resourcesPath, os.ModePerm); err != nil { return errors.Wrap(err, "failure while creating resource folder") } @@ -179,7 +178,7 @@ func BuildQuarkusRunnerCommon(ctx context.Context, mc maven.Context, project mav // may fail the build. // In the future there should be a way to provide build information from secrets, // configmap, etc. - if _, err := os.Create(path.Join(resourcesPath, "application.properties")); err != nil { + if _, err := os.Create(filepath.Join(resourcesPath, "application.properties")); err != nil { return errors.Wrap(err, "failure while creating application.properties") } @@ -194,7 +193,7 @@ func BuildQuarkusRunnerCommon(ctx context.Context, mc maven.Context, project mav } func computeQuarkusDependencies(ctx *builderContext) error { - mc := maven.NewContext(path.Join(ctx.Path, "maven")) + mc := maven.NewContext(filepath.Join(ctx.Path, "maven")) mc.GlobalSettings = ctx.Maven.GlobalSettings mc.UserSettings = ctx.Maven.UserSettings mc.SettingsSecurity = ctx.Maven.SettingsSecurity @@ -215,7 +214,7 @@ func ProcessQuarkusTransitiveDependencies(mc maven.Context) ([]v1.Artifact, erro var artifacts []v1.Artifact // Quarkus fast-jar format is split into various sub-directories in quarkus-app - quarkusAppDir := path.Join(mc.Path, "target", "quarkus-app") + quarkusAppDir := filepath.Join(mc.Path, "target", "quarkus-app") // Discover application dependencies from the Quarkus fast-jar directory tree err := filepath.Walk(quarkusAppDir, func(filePath string, info os.FileInfo, err error) error { @@ -234,7 +233,7 @@ func ProcessQuarkusTransitiveDependencies(mc maven.Context) ([]v1.Artifact, erro artifacts = append(artifacts, v1.Artifact{ ID: filepath.Base(fileRelPath), Location: filePath, - Target: path.Join(DependenciesDir, fileRelPath), + Target: filepath.Join(DependenciesDir, fileRelPath), Checksum: "sha1:" + sha1, }) } diff --git a/pkg/builder/s2i.go b/pkg/builder/s2i.go index d523e843b..140d3ad95 100644 --- a/pkg/builder/s2i.go +++ b/pkg/builder/s2i.go @@ -26,7 +26,6 @@ import ( "fmt" "io" "os" - "path" "path/filepath" "strings" "time" @@ -145,7 +144,7 @@ func (t *s2iTask) Do(ctx context.Context) v1.BuildStatus { } err = util.WithTempDir(t.build.Name+"-s2i-", func(tmpDir string) error { - archive := path.Join(tmpDir, "archive.tar.gz") + archive := filepath.Join(tmpDir, "archive.tar.gz") contextDir := t.task.ContextDir if contextDir == "" { @@ -157,7 +156,7 @@ func (t *s2iTask) Do(ctx context.Context) v1.BuildStatus { if err != nil { return err } - contextDir = path.Join(pwd, ContextDir) + contextDir = filepath.Join(pwd, ContextDir) } archiveFile, err := os.Create(archive) diff --git a/pkg/builder/spectrum.go b/pkg/builder/spectrum.go index bcfac8e3f..d43f52954 100644 --- a/pkg/builder/spectrum.go +++ b/pkg/builder/spectrum.go @@ -23,7 +23,6 @@ import ( "io" "io/ioutil" "os" - "path" "path/filepath" "runtime" "strings" @@ -67,7 +66,7 @@ func (t *spectrumTask) Do(ctx context.Context) v1.BuildStatus { if err != nil { return status.Failed(err) } - contextDir = path.Join(pwd, ContextDir) + contextDir = filepath.Join(pwd, ContextDir) } exists, err := util.DirectoryExists(contextDir) @@ -132,7 +131,7 @@ func (t *spectrumTask) Do(ctx context.Context) v1.BuildStatus { } go readSpectrumLogs(newStdR) - digest, err := spectrum.Build(options, contextDir+":"+path.Join(DeploymentDir)) + digest, err := spectrum.Build(options, contextDir+":"+filepath.Join(DeploymentDir)) //nolint if err != nil { _ = os.RemoveAll(registryConfigDir) return status.Failed(err) diff --git a/pkg/cmd/config_test.go b/pkg/cmd/config_test.go index 57d5a981e..ca299d775 100644 --- a/pkg/cmd/config_test.go +++ b/pkg/cmd/config_test.go @@ -20,6 +20,7 @@ package cmd import ( "fmt" "os" + "path/filepath" "strings" "testing" @@ -85,14 +86,14 @@ func TestConfigFolderFlagToSub(t *testing.T) { _, rootCmd, _ := initializeConfigCmdOptions(t, false) output, err := test.ExecuteCommand(rootCmd, cmdConfig, "--list", "--folder", "sub") assert.Nil(t, err) - assert.True(t, strings.Contains(output, fmt.Sprintf(" .kamel/%s", DefaultConfigLocation)), "The output is unexpected: "+output) + assert.True(t, strings.Contains(output, filepath.FromSlash(fmt.Sprintf(".kamel/%s", DefaultConfigLocation))), "The output is unexpected: "+output) } func TestConfigFolderFlagToHome(t *testing.T) { _, rootCmd, _ := initializeConfigCmdOptions(t, false) output, err := test.ExecuteCommand(rootCmd, cmdConfig, "--list", "--folder", "home") assert.Nil(t, err) - assert.True(t, strings.Contains(output, fmt.Sprintf("/.kamel/%s", DefaultConfigLocation)), "The output is unexpected: "+output) + assert.True(t, strings.Contains(output, filepath.FromSlash(fmt.Sprintf(".kamel/%s", DefaultConfigLocation))), "The output is unexpected: "+output) } func TestConfigFolderFlagToEnv(t *testing.T) { @@ -101,7 +102,7 @@ func TestConfigFolderFlagToEnv(t *testing.T) { _, rootCmd, _ := initializeConfigCmdOptions(t, false) output, err := test.ExecuteCommand(rootCmd, cmdConfig, "--list", "--folder", "env") assert.Nil(t, err) - assert.True(t, strings.Contains(output, fmt.Sprintf("/foo/bar/%s", DefaultConfigLocation)), "The output is unexpected: "+output) + assert.True(t, strings.Contains(output, filepath.FromSlash(fmt.Sprintf("foo/bar/%s", DefaultConfigLocation))), "The output is unexpected: "+output) } func TestConfigFolderFlagToEnvWithConfigName(t *testing.T) { @@ -114,7 +115,7 @@ func TestConfigFolderFlagToEnvWithConfigName(t *testing.T) { _, rootCmd, _ := initializeConfigCmdOptions(t, false) output, err := test.ExecuteCommand(rootCmd, cmdConfig, "--list", "--folder", "env") assert.Nil(t, err) - assert.True(t, strings.Contains(output, "/foo/bar/config.yaml"), "The output is unexpected: "+output) + assert.True(t, strings.Contains(output, filepath.FromSlash("/foo/bar/config.yaml")), "The output is unexpected: "+output) } func TestConfigDefaultNamespace(t *testing.T) { diff --git a/pkg/cmd/local/local.go b/pkg/cmd/local/local.go index 353e7a1f9..0032e0eee 100644 --- a/pkg/cmd/local/local.go +++ b/pkg/cmd/local/local.go @@ -23,7 +23,7 @@ import ( "fmt" "io/ioutil" "os" - "path" + "path/filepath" "sort" "strings" @@ -99,7 +99,7 @@ func getTopLevelDependencies(ctx context.Context, catalog *camel.RuntimeCatalog, sourceSpec := v1.SourceSpec{ DataSpec: v1.DataSpec{ - Name: path.Base(src), + Name: filepath.Base(src), Content: data, Compression: false, }, @@ -176,7 +176,7 @@ func getRegularFilesInDir(directory string, dirnameInPath bool) ([]string, error // Do not include hidden files or sub-directories. if !file.IsDir() && !strings.HasPrefix(fileName, ".") { if dirnameInPath { - dirFiles = append(dirFiles, path.Join(directory, fileName)) + dirFiles = append(dirFiles, filepath.Join(directory, fileName)) } else { dirFiles = append(dirFiles, fileName) } @@ -373,7 +373,7 @@ func UpdateIntegrationProperties(properties []string, propertyFiles []string, ha relocatedPropertyFiles := []string{} dir := GetLocalPropertiesDir() for _, propertyFile := range propertyFiles { - relocatedPropertyFile := path.Join(dir, path.Base(propertyFile)) + relocatedPropertyFile := filepath.Join(dir, filepath.Base(propertyFile)) if _, err := util.CopyFile(propertyFile, relocatedPropertyFile); err != nil { return nil, err } @@ -383,7 +383,7 @@ func UpdateIntegrationProperties(properties []string, propertyFiles []string, ha if !hasIntegrationDir { // Output list of properties to property file if any CLI properties were given. if len(properties) > 0 { - propertyFilePath := path.Join(dir, "CLI.properties") + propertyFilePath := filepath.Join(dir, "CLI.properties") if err := ioutil.WriteFile(propertyFilePath, []byte(strings.Join(properties, "\n")), 0o600); err != nil { return nil, err } @@ -407,9 +407,9 @@ func updateIntegrationDependencies(dependencies []string) error { var targetPath string basePath := util.SubstringFrom(dependency, util.QuarkusDependenciesBaseDirectory) if basePath != "" { - targetPath = path.Join(dir, basePath) + targetPath = filepath.Join(dir, basePath) } else { - targetPath = path.Join(dir, path.Base(dependency)) + targetPath = filepath.Join(dir, filepath.Base(dependency)) } if _, err := util.CopyFile(dependency, targetPath); err != nil { return err @@ -426,7 +426,7 @@ func updateIntegrationRoutes(routes []string) error { dir := getLocalRoutesDir() for _, route := range routes { - if _, err := util.CopyFile(route, path.Join(dir, path.Base(route))); err != nil { + if _, err := util.CopyFile(route, filepath.Join(dir, filepath.Base(route))); err != nil { return err } } @@ -476,7 +476,7 @@ func CopyIntegrationFilesToDirectory(files []string, directory string) ([]string // Copy files to new location. Also create the list with relocated files. relocatedFilesList := []string{} for _, filePath := range files { - newFilePath := path.Join(directory, path.Base(filePath)) + newFilePath := filepath.Join(directory, filepath.Base(filePath)) if _, err := util.CopyFile(filePath, newFilePath); err != nil { return relocatedFilesList, err } @@ -499,8 +499,8 @@ func CopyQuarkusAppFiles(dependenciesDir string, quarkusDir string) error { } for _, file := range files { if strings.HasSuffix(file, ".dat") || strings.HasSuffix(file, "-bytecode.jar") { - source := path.Join(dependenciesDir, file) - destination := path.Join(quarkusDir, file) + source := filepath.Join(dependenciesDir, file) + destination := filepath.Join(quarkusDir, file) if _, err = util.CopyFile(source, destination); err != nil { return err } @@ -522,8 +522,8 @@ func CopyLibFiles(dependenciesDir string, libDir string) error { } for _, dependencyJar := range fileNames { - source := path.Join(dependenciesDir, dependencyJar) - destination := path.Join(libDir, dependencyJar) + source := filepath.Join(dependenciesDir, dependencyJar) + destination := filepath.Join(libDir, dependencyJar) if _, err = util.CopyFile(source, destination); err != nil { return err } @@ -545,8 +545,8 @@ func CopyAppFile(dependenciesDir string, appDir string) error { for _, dependencyJar := range fileNames { if strings.HasPrefix(dependencyJar, "camel-k-integration-") { - source := path.Join(dependenciesDir, dependencyJar) - destination := path.Join(appDir, dependencyJar) + source := filepath.Join(dependenciesDir, dependencyJar) + destination := filepath.Join(appDir, dependencyJar) if _, err = util.CopyFile(source, destination); err != nil { return err } diff --git a/pkg/cmd/local/workdir.go b/pkg/cmd/local/workdir.go index 3ab67f5ba..1a7eecc6b 100644 --- a/pkg/cmd/local/workdir.go +++ b/pkg/cmd/local/workdir.go @@ -21,6 +21,7 @@ import ( "io/ioutil" "os" "path" + "path/filepath" "strings" "github.com/apache/camel-k/pkg/util" @@ -50,7 +51,7 @@ func DeleteMavenWorkingDirectory() error { // getLocalDependenciesDir returns <mavenWorkingDirectory>/dependencies. func getLocalDependenciesDir() string { - return path.Join(MavenWorkingDirectory, util.DefaultDependenciesDirectoryName) + return filepath.Join(MavenWorkingDirectory, util.DefaultDependenciesDirectoryName) } func createLocalDependenciesDirectory() error { @@ -75,7 +76,7 @@ func createLocalDependenciesDirectory() error { // GetLocalPropertiesDir returns <mavenWorkingDirectory>/properties. func GetLocalPropertiesDir() string { - return path.Join(MavenWorkingDirectory, util.DefaultPropertiesDirectoryName) + return filepath.Join(MavenWorkingDirectory, util.DefaultPropertiesDirectoryName) } func CreateLocalPropertiesDirectory() error { @@ -101,7 +102,7 @@ func CreateLocalPropertiesDirectory() error { // getLocalRoutesDir returns <mavenWorkingDirectory>/routes. func getLocalRoutesDir() string { - return path.Join(MavenWorkingDirectory, util.DefaultRoutesDirectoryName) + return filepath.Join(MavenWorkingDirectory, util.DefaultRoutesDirectoryName) } func createLocalRoutesDirectory() error { @@ -126,7 +127,7 @@ func createLocalRoutesDirectory() error { // getLocalQuarkusDir returns <mavenWorkingDirectory>/quarkus. func getLocalQuarkusDir() string { - return path.Join(MavenWorkingDirectory, util.CustomQuarkusDirectoryName) + return filepath.Join(MavenWorkingDirectory, util.CustomQuarkusDirectoryName) } func createLocalQuarkusDirectory() error { @@ -151,7 +152,7 @@ func createLocalQuarkusDirectory() error { // getLocalAppDir returns <mavenWorkingDirectory>/app. func getLocalAppDir() string { - return path.Join(MavenWorkingDirectory, util.CustomAppDirectoryName) + return filepath.Join(MavenWorkingDirectory, util.CustomAppDirectoryName) } func createLocalAppDirectory() error { @@ -176,7 +177,7 @@ func createLocalAppDirectory() error { // getLocalLibDir returns <mavenWorkingDirectory>/lib/main. func getLocalLibDir() string { - return path.Join(MavenWorkingDirectory, util.CustomLibDirectoryName) + return filepath.Join(MavenWorkingDirectory, util.CustomLibDirectoryName) } func createLocalLibDirectory() error { @@ -200,30 +201,30 @@ func createLocalLibDirectory() error { } func GetCustomDependenciesDir(dir string) string { - return path.Join(dir, util.DefaultDependenciesDirectoryName) + return filepath.Join(dir, util.DefaultDependenciesDirectoryName) } func GetCustomPropertiesDir(dir string) string { - return path.Join(dir, util.DefaultPropertiesDirectoryName) + return filepath.Join(dir, util.DefaultPropertiesDirectoryName) } func GetCustomRoutesDir(dir string) string { - return path.Join(dir, util.DefaultRoutesDirectoryName) + return filepath.Join(dir, util.DefaultRoutesDirectoryName) } func GetCustomQuarkusDir(dir string) string { parentDir := path.Dir(strings.TrimSuffix(dir, "/")) - return path.Join(parentDir, util.CustomQuarkusDirectoryName) + return filepath.Join(parentDir, util.CustomQuarkusDirectoryName) } func GetCustomLibDir(dir string) string { parentDir := path.Dir(strings.TrimSuffix(dir, "/")) - return path.Join(parentDir, util.CustomLibDirectoryName) + return filepath.Join(parentDir, util.CustomLibDirectoryName) } func GetCustomAppDir(dir string) string { parentDir := path.Dir(strings.TrimSuffix(dir, "/")) - return path.Join(parentDir, "app") + return filepath.Join(parentDir, "app") } func DeleteLocalIntegrationDirs(dir string) error { diff --git a/pkg/cmd/modeline.go b/pkg/cmd/modeline.go index 4ef02caa2..5a7f2a698 100644 --- a/pkg/cmd/modeline.go +++ b/pkg/cmd/modeline.go @@ -20,7 +20,6 @@ package cmd import ( "context" "fmt" - "path" "path/filepath" "strings" @@ -231,7 +230,7 @@ func extractModelineOptionsFromSource(resolvedSource source.Source) ([]modeline. baseDir := filepath.Dir(resolvedSource.Origin) refPath := o.Value if !filepath.IsAbs(refPath) { - full := path.Join(baseDir, refPath) + full := filepath.Join(baseDir, refPath) o.Value = full ops[i] = o } @@ -239,7 +238,7 @@ func extractModelineOptionsFromSource(resolvedSource source.Source) ([]modeline. baseDir := filepath.Dir(resolvedSource.Origin) refPath := getRefPathOrProperty(o.Value) if !filepath.IsAbs(refPath) { - full := getFullPathOrProperty(o.Value, path.Join(baseDir, refPath)) + full := getFullPathOrProperty(o.Value, filepath.Join(baseDir, refPath)) o.Value = full ops[i] = o } diff --git a/pkg/cmd/modeline_test.go b/pkg/cmd/modeline_test.go index 854bd52a9..f810380e9 100644 --- a/pkg/cmd/modeline_test.go +++ b/pkg/cmd/modeline_test.go @@ -22,7 +22,7 @@ import ( "fmt" "io/ioutil" "os" - "path" + "path/filepath" "testing" "github.com/apache/camel-k/pkg/util" @@ -35,7 +35,7 @@ func TestModelineRunSimple(t *testing.T) { file := ` // camel-k: dependency=mvn:org.my:lib:1.0 ` - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") err := ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -53,7 +53,7 @@ func TestModelineRunSimple(t *testing.T) { func TestModelineRunHelp(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { // no file created - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), []string{"kamel", "run", fileName, "--help"}) assert.NoError(t, err) @@ -71,7 +71,7 @@ func TestModelineRunChain(t *testing.T) { file := ` // camel-k: dependency=mvn:org.my:lib:2.0 ` - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") err := ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -91,14 +91,14 @@ func TestModelineRunMultipleFiles(t *testing.T) { file := ` // camel-k: dependency=mvn:org.my:lib1:3.0 ` - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") err := ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) file2 := ` // camel-k: dependency=mvn:org.my:lib2:3.0 ` - fileName2 := path.Join(dir, "ext.groovy") + fileName2 := filepath.Join(dir, "ext.groovy") err = ioutil.WriteFile(fileName2, []byte(file2), 0o400) assert.NoError(t, err) @@ -115,14 +115,14 @@ func TestModelineRunMultipleFiles(t *testing.T) { func TestModelineRunProperty(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: property=my-prop=my-val ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -139,7 +139,7 @@ func TestModelineRunProperty(t *testing.T) { func TestModelineRunDuplicatedProperties(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) @@ -148,7 +148,7 @@ func TestModelineRunDuplicatedProperties(t *testing.T) { // camel-k: property=prop2=false // camel-k: property=foo=bar ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -165,7 +165,7 @@ func TestModelineRunDuplicatedProperties(t *testing.T) { func TestModelineRunDuplicatedBuildProperties(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) @@ -174,7 +174,7 @@ func TestModelineRunDuplicatedBuildProperties(t *testing.T) { // camel-k: build-property=prop2=false // camel-k: build-property=foo=bar ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -197,21 +197,21 @@ func TestModelineRunDuplicatedBuildProperties(t *testing.T) { func TestModelineRunPropertyFiles(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: property=file:application.properties ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) propFile := ` a=b ` - propFileName := path.Join(subDir, "application.properties") + propFileName := filepath.Join(subDir, "application.properties") err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400) assert.NoError(t, err) @@ -228,14 +228,14 @@ func TestModelineRunPropertyFiles(t *testing.T) { func TestModelineRunBuildProperty(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: build-property=my-build-prop=my-val ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -252,21 +252,21 @@ func TestModelineRunBuildProperty(t *testing.T) { func TestModelineRunBuildPropertyFiles(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: build-property=file:application.properties ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) propFile := ` a=b ` - propFileName := path.Join(subDir, "application.properties") + propFileName := filepath.Join(subDir, "application.properties") err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400) assert.NoError(t, err) @@ -283,7 +283,7 @@ func TestModelineRunBuildPropertyFiles(t *testing.T) { func TestModelineRunDuplicateTraits(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) @@ -292,7 +292,7 @@ func TestModelineRunDuplicateTraits(t *testing.T) { // camel-k: trait=trait2=false // camel-k: trait=foo=bar ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -309,14 +309,14 @@ func TestModelineRunDuplicateTraits(t *testing.T) { func TestModelineRunConfigConfigmap(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: config=configmap:my-cm ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -333,14 +333,14 @@ func TestModelineRunConfigConfigmap(t *testing.T) { func TestModelineRunConfigSecret(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: config=secret:my-secret ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -357,21 +357,21 @@ func TestModelineRunConfigSecret(t *testing.T) { func TestModelineRunConfigFile(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: config=file:application.properties ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) propFile := ` a=b ` - propFileName := path.Join(subDir, "application.properties") + propFileName := filepath.Join(subDir, "application.properties") err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400) assert.NoError(t, err) @@ -388,14 +388,14 @@ func TestModelineRunConfigFile(t *testing.T) { func TestModelineRunResourceConfigmap(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: resource=configmap:my-cm ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -412,14 +412,14 @@ func TestModelineRunResourceConfigmap(t *testing.T) { func TestModelineRunResourceSecret(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: resource=secret:my-secret ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -436,21 +436,21 @@ func TestModelineRunResourceSecret(t *testing.T) { func TestModelineRunResourceFile(t *testing.T) { err := util.WithTempDir("camel-k-test-", func(dir string) error { - subDir := path.Join(dir, "sub") + subDir := filepath.Join(dir, "sub") err := os.Mkdir(subDir, 0o700) assert.NoError(t, err) file := ` // camel-k: resource=file:application.properties ` - fileName := path.Join(subDir, "simple.groovy") + fileName := filepath.Join(subDir, "simple.groovy") err = ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) propFile := ` a=b ` - propFileName := path.Join(subDir, "application.properties") + propFileName := filepath.Join(subDir, "application.properties") err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400) assert.NoError(t, err) @@ -471,7 +471,7 @@ func TestModelineInspectSimple(t *testing.T) { file := ` // camel-k: dependency=mvn:org.my:lib:1.0 ` - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") err := ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -493,7 +493,7 @@ func TestModelineInspectMultipleDeps(t *testing.T) { // camel-k: dependency=mvn:org.my:lib:1.0 // camel-k: dependency=camel-k:camel-dep ` - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") err := ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) @@ -514,7 +514,7 @@ func TestModelineQuotedPodTemplate(t *testing.T) { file := ` // camel-k: pod-template='{ "containers": [], "securityContext": { "supplementalGroups": [ 553 ] }, "volumes": [] } }' ` - fileName := path.Join(dir, "simple.groovy") + fileName := filepath.Join(dir, "simple.groovy") err := ioutil.WriteFile(fileName, []byte(file), 0o400) assert.NoError(t, err) diff --git a/pkg/cmd/run_support.go b/pkg/cmd/run_support.go index e929a67f3..812c7d326 100644 --- a/pkg/cmd/run_support.go +++ b/pkg/cmd/run_support.go @@ -24,7 +24,6 @@ import ( "net/http" "net/url" "os" - "path" "path/filepath" "reflect" "strings" @@ -74,7 +73,7 @@ func parseConfigAndGenCm(ctx context.Context, cmd *cobra.Command, c client.Clien if config.ContentType() == resource.ContentTypeText { resourceType = v1.ResourceTypeConfig } - resourceSpec, err := binaryOrTextResource(path.Base(config.Name()), rawData, contentType, enableCompression, resourceType, config.DestinationPath()) + resourceSpec, err := binaryOrTextResource(filepath.Base(config.Name()), rawData, contentType, enableCompression, resourceType, config.DestinationPath()) if err != nil { return nil, err } @@ -189,9 +188,9 @@ func downloadDependency(ctx context.Context, url url.URL) (string, error) { return "", err } defer res.Body.Close() - base := path.Base(url.Path) + base := filepath.Base(url.Path) if base == "." || base == "/" || filepath.Ext(base) == "" { - base = path.Base(url.String()) + base = filepath.Base(url.String()) if base == "." || base == "/" { base = "tmp" } diff --git a/pkg/cmd/source/source.go b/pkg/cmd/source/source.go index 4daeb89c2..3f04d0061 100644 --- a/pkg/cmd/source/source.go +++ b/pkg/cmd/source/source.go @@ -23,7 +23,7 @@ import ( "net/http" "net/url" "os" - "path" + "path/filepath" "strings" "github.com/apache/camel-k/pkg/util" @@ -53,7 +53,7 @@ func newSource(location string, compress bool, loadContent func() ([]byte, error locPath = location } src := Source{ - Name: path.Base(locPath), + Name: filepath.Base(locPath), Origin: location, Location: location, Compress: compress, diff --git a/pkg/cmd/source/util.go b/pkg/cmd/source/util.go index 3e2b6a787..3ad2dc9ed 100644 --- a/pkg/cmd/source/util.go +++ b/pkg/cmd/source/util.go @@ -19,7 +19,9 @@ package source import ( "fmt" + "io/fs" "os" + "runtime" "strings" "github.com/pkg/errors" @@ -43,6 +45,12 @@ func IsLocalAndFileExists(uri string) (bool, error) { if os.IsNotExist(err) { return false, nil } + + if _, ok := err.(*fs.PathError); ok && runtime.GOOS == "windows" { // nolint + // Windows returns a PathError rather than NotExist is path is invalid + return false, nil + } + // If it is a different error (ie, permission denied) we should report it back return false, errors.Wrap(err, fmt.Sprintf("file system error while looking for %s", uri)) } diff --git a/pkg/cmd/source/util_test.go b/pkg/cmd/source/util_test.go index 53de90c9b..586743d2b 100644 --- a/pkg/cmd/source/util_test.go +++ b/pkg/cmd/source/util_test.go @@ -21,6 +21,9 @@ limitations under the License. package source import ( + "os" + "path/filepath" + "runtime" "testing" "github.com/stretchr/testify/assert" @@ -37,8 +40,29 @@ func TestCorrectFileValuesButNotFound(t *testing.T) { assert.False(t, value2) } +func isWindows() bool { + return runtime.GOOS == "windows" +} + func TestPermissionDenied(t *testing.T) { - value, err := IsLocalAndFileExists("/root/test") + dir := "/tmp/filedir" + + if isWindows() { + t.Skip("Test not reliably producing a result on a windows OS") + } + + err := os.Mkdir(dir, 0700) + assert.Nil(t, err) + + filename := filepath.Join(dir, "file.txt") + f, err := os.Create(filename) + assert.Nil(t, err) + defer f.Close() + + err = os.Chmod(dir, 0000) + assert.Nil(t, err) + + value, err := IsLocalAndFileExists(filename) // must not panic because a permission error assert.NotNil(t, err) assert.False(t, value) diff --git a/pkg/controller/build/build_pod.go b/pkg/controller/build/build_pod.go index 42385d95c..257405928 100644 --- a/pkg/controller/build/build_pod.go +++ b/pkg/controller/build/build_pod.go @@ -21,7 +21,7 @@ import ( "context" "fmt" "os" - "path" + "path/filepath" "strconv" "strings" @@ -230,7 +230,7 @@ func addBuildTaskToPod(build *v1.Build, taskName string, pod *corev1.Pod) { "--task-name", taskName, }, - WorkingDir: path.Join(builderDir, build.Name), + WorkingDir: filepath.Join(builderDir, build.Name), Env: proxyFromEnvironment(), } @@ -336,7 +336,7 @@ func addBuildahTaskToPod(ctx context.Context, c ctrl.Reader, build *v1.Build, ta Command: []string{"/bin/sh", "-c"}, Args: []string{strings.Join(args, " && ")}, Env: env, - WorkingDir: path.Join(builderDir, build.Name, builder.ContextDir), + WorkingDir: filepath.Join(builderDir, build.Name, builder.ContextDir), VolumeMounts: volumeMounts, } @@ -355,7 +355,7 @@ func addKanikoTaskToPod(ctx context.Context, c ctrl.Reader, build *v1.Build, tas args := []string{ "--dockerfile=Dockerfile", - "--context=" + path.Join(builderDir, build.Name, builder.ContextDir), + "--context=" + filepath.Join(builderDir, build.Name, builder.ContextDir), "--destination=" + task.Image, "--cache=" + strconv.FormatBool(cache), "--cache-dir=" + builder.KanikoCacheDir, @@ -452,7 +452,7 @@ func addKanikoTaskToPod(ctx context.Context, c ctrl.Reader, build *v1.Build, tas ImagePullPolicy: corev1.PullIfNotPresent, Args: args, Env: env, - WorkingDir: path.Join(builderDir, build.Name, builder.ContextDir), + WorkingDir: filepath.Join(builderDir, build.Name, builder.ContextDir), VolumeMounts: volumeMounts, } @@ -469,7 +469,7 @@ func addContainerToPod(build *v1.Build, container corev1.Container, pod *corev1. if hasBuilderVolume(pod) { container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{ Name: builderVolume, - MountPath: path.Join(builderDir, build.Name), + MountPath: filepath.Join(builderDir, build.Name), }) } @@ -563,7 +563,7 @@ func addRegistrySecret(name string, secret registrySecret, volumes *[]corev1.Vol if secret.refEnv != "" { *env = append(*env, corev1.EnvVar{ Name: secret.refEnv, - Value: path.Join(secret.mountPath, secret.destination), + Value: filepath.Join(secret.mountPath, secret.destination), }) } } diff --git a/pkg/controller/build/monitor_routine.go b/pkg/controller/build/monitor_routine.go index 42f5a7902..2820c8a70 100644 --- a/pkg/controller/build/monitor_routine.go +++ b/pkg/controller/build/monitor_routine.go @@ -23,7 +23,7 @@ import ( "fmt" "io/ioutil" "os" - "path" + "path/filepath" "sync" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -137,13 +137,13 @@ tasks: status.Failed(fmt.Errorf("cannot determine context directory for task %s", t.Name)) break tasks } - t.ContextDir = path.Join(buildDir, builder.ContextDir) + t.ContextDir = filepath.Join(buildDir, builder.ContextDir) } else if t := task.S2i; t != nil && t.ContextDir == "" { if buildDir == "" { status.Failed(fmt.Errorf("cannot determine context directory for task %s", t.Name)) break tasks } - t.ContextDir = path.Join(buildDir, builder.ContextDir) + t.ContextDir = filepath.Join(buildDir, builder.ContextDir) } // Execute the task diff --git a/pkg/install/kamelets.go b/pkg/install/kamelets.go index 569453734..4f8102a85 100644 --- a/pkg/install/kamelets.go +++ b/pkg/install/kamelets.go @@ -25,7 +25,6 @@ import ( "io/fs" "net/http" "os" - "path" "path/filepath" "strings" "sync" @@ -90,7 +89,7 @@ func KameletCatalog(ctx context.Context, c client.Client, namespace string) erro } // We may want to throttle the creation of Go routines if the number of bundled Kamelets increases. g.Go(func() error { - kamelet, err := loadKamelet(path.Join(kameletDir, f.Name()), namespace) + kamelet, err := loadKamelet(filepath.Join(kameletDir, f.Name()), namespace) if err != nil { return err } diff --git a/pkg/resources/resources_support.go b/pkg/resources/resources_support.go index 28fa9ab4f..85774a3a0 100644 --- a/pkg/resources/resources_support.go +++ b/pkg/resources/resources_support.go @@ -22,6 +22,7 @@ import ( "io/ioutil" "net/http" "os" + "path" "path/filepath" "strings" "text/template" @@ -43,6 +44,7 @@ func ResourceAsString(name string) (string, error) { // Resource provides an easy way to access to embedded assets. func Resource(name string) ([]byte, error) { name = strings.Trim(name, " ") + name = filepath.ToSlash(name) if !strings.HasPrefix(name, "/") { name = "/" + name } @@ -115,6 +117,7 @@ func WithPrefix(pathPrefix string) ([]string, error) { // Resources lists all file names in the given path (starts with '/'). func Resources(dirName string) ([]string, error) { + dirName = filepath.ToSlash(dirName) dir, err := openAsset(dirName) if err != nil { if os.IsNotExist(err) { @@ -142,7 +145,7 @@ func Resources(dirName string) ([]string, error) { var res []string for _, f := range files { if !f.IsDir() { - res = append(res, filepath.Join(dirName, f.Name())) + res = append(res, path.Join(dirName, f.Name())) } } diff --git a/pkg/trait/container.go b/pkg/trait/container.go index bf2205473..b42f1e2df 100644 --- a/pkg/trait/container.go +++ b/pkg/trait/container.go @@ -19,7 +19,7 @@ package trait import ( "fmt" - "path" + "path/filepath" appsv1 "k8s.io/api/apps/v1" batchv1 "k8s.io/api/batch/v1" @@ -162,7 +162,7 @@ func (t *containerTrait) configureContainer(e *Environment) error { } envvar.SetVal(&container.Env, digest.IntegrationDigestEnvVar, e.Integration.Status.Digest) - envvar.SetVal(&container.Env, "CAMEL_K_CONF", path.Join(camel.BasePath, "application.properties")) + envvar.SetVal(&container.Env, "CAMEL_K_CONF", filepath.Join(camel.BasePath, "application.properties")) envvar.SetVal(&container.Env, "CAMEL_K_CONF_D", camel.ConfDPath) e.addSourcesProperties() diff --git a/pkg/trait/jvm.go b/pkg/trait/jvm.go index 05609ff9e..60a4fbac2 100644 --- a/pkg/trait/jvm.go +++ b/pkg/trait/jvm.go @@ -20,7 +20,7 @@ package trait import ( "fmt" "net/url" - "path" + "path/filepath" "sort" "strings" @@ -102,8 +102,8 @@ func (t *jvmTrait) Apply(e *Environment) error { classpath := strset.New() classpath.Add("./resources") - classpath.Add(camel.ConfigResourcesMountPath) - classpath.Add(camel.ResourcesDefaultMountPath) + classpath.Add(filepath.ToSlash(camel.ConfigResourcesMountPath)) + classpath.Add(filepath.ToSlash(camel.ResourcesDefaultMountPath)) if t.Classpath != "" { classpath.Add(strings.Split(t.Classpath, ":")...) } @@ -116,7 +116,7 @@ func (t *jvmTrait) Apply(e *Environment) error { // In case of an external created kit, we do not have any information about // the classpath, so we assume the all jars in /deployments/dependencies/ have // to be taken into account. - dependencies := path.Join(builder.DeploymentDir, builder.DependenciesDir) + dependencies := filepath.Join(builder.DeploymentDir, builder.DependenciesDir) classpath.Add( dependencies+"/*", dependencies+"/app/*", diff --git a/pkg/trait/jvm_test.go b/pkg/trait/jvm_test.go index 8fe4b772f..ad2d750f2 100644 --- a/pkg/trait/jvm_test.go +++ b/pkg/trait/jvm_test.go @@ -19,6 +19,7 @@ package trait import ( "fmt" + "path/filepath" "sort" "strings" "testing" @@ -40,6 +41,11 @@ import ( "github.com/apache/camel-k/pkg/util/test" ) +var ( + crMountPath = filepath.ToSlash(camel.ConfigResourcesMountPath) + rdMountPath = filepath.ToSlash(camel.ResourcesDefaultMountPath) +) + func TestConfigureJvmTraitInRightPhasesDoesSucceed(t *testing.T) { trait, environment := createNominalJvmTest(v1.IntegrationKitTypePlatform) @@ -103,12 +109,12 @@ func TestApplyJvmTraitWithDeploymentResource(t *testing.T) { assert.Nil(t, err) - cp := strset.New("./resources", camel.ConfigResourcesMountPath, camel.ResourcesDefaultMountPath, "/mount/path").List() + cp := strset.New("./resources", crMountPath, rdMountPath, "/mount/path").List() sort.Strings(cp) assert.Equal(t, []string{ "-cp", - fmt.Sprintf("./resources:%s:%s:/mount/path", camel.ConfigResourcesMountPath, camel.ResourcesDefaultMountPath), + fmt.Sprintf("./resources:%s:%s:/mount/path", crMountPath, rdMountPath), "io.quarkus.bootstrap.runner.QuarkusEntryPoint", }, d.Spec.Template.Spec.Containers[0].Args) } @@ -135,12 +141,12 @@ func TestApplyJvmTraitWithKNativeResource(t *testing.T) { assert.Nil(t, err) - cp := strset.New("./resources", camel.ConfigResourcesMountPath, camel.ResourcesDefaultMountPath, "/mount/path").List() + cp := strset.New("./resources", crMountPath, rdMountPath, "/mount/path").List() sort.Strings(cp) assert.Equal(t, []string{ "-cp", - fmt.Sprintf("./resources:%s:%s:/mount/path", camel.ConfigResourcesMountPath, camel.ResourcesDefaultMountPath), + fmt.Sprintf("./resources:%s:%s:/mount/path", crMountPath, rdMountPath), "io.quarkus.bootstrap.runner.QuarkusEntryPoint", }, s.Spec.Template.Spec.Containers[0].Args) } @@ -244,7 +250,7 @@ func TestApplyJvmTraitWithClasspath(t *testing.T) { assert.Nil(t, err) assert.Equal(t, []string{ "-cp", - fmt.Sprintf("./resources:%s:%s:/mount/path:%s:%s", camel.ConfigResourcesMountPath, camel.ResourcesDefaultMountPath, + fmt.Sprintf("./resources:%s:%s:/mount/path:%s:%s", crMountPath, rdMountPath, "/path/to/another/dep.jar", "/path/to/my-dep.jar"), "io.quarkus.bootstrap.runner.QuarkusEntryPoint", }, d.Spec.Template.Spec.Containers[0].Args) diff --git a/pkg/trait/knative_service_test.go b/pkg/trait/knative_service_test.go index d2f42e0aa..7f59faf74 100644 --- a/pkg/trait/knative_service_test.go +++ b/pkg/trait/knative_service_test.go @@ -18,6 +18,7 @@ limitations under the License. package trait import ( + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -175,8 +176,8 @@ func TestKnativeService(t *testing.T) { assert.Equal(t, "file:/etc/camel/sources/routes.js", environment.ApplicationProperties["camel.k.sources[0].location"]) assert.Equal(t, "js", environment.ApplicationProperties["camel.k.sources[0].language"]) assert.Equal(t, "true", environment.ApplicationProperties["camel.k.sources[0].compressed"]) - test.EnvVarHasValue(t, spec.Containers[0].Env, "CAMEL_K_CONF", "/etc/camel/application.properties") - test.EnvVarHasValue(t, spec.Containers[0].Env, "CAMEL_K_CONF_D", "/etc/camel/conf.d") + test.EnvVarHasValue(t, spec.Containers[0].Env, "CAMEL_K_CONF", filepath.FromSlash("/etc/camel/application.properties")) + test.EnvVarHasValue(t, spec.Containers[0].Env, "CAMEL_K_CONF_D", filepath.FromSlash("/etc/camel/conf.d")) } func TestKnativeServiceWithCustomContainerName(t *testing.T) { diff --git a/pkg/trait/openapi.go b/pkg/trait/openapi.go index 8615b1b07..f34589c5b 100644 --- a/pkg/trait/openapi.go +++ b/pkg/trait/openapi.go @@ -22,7 +22,6 @@ import ( "fmt" "io/ioutil" "os" - "path" "path/filepath" "strconv" "strings" @@ -194,7 +193,7 @@ func (t *openAPITrait) generateOpenAPIConfigMap(e *Environment, resource v1.Data } func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.DataSpec, tmpDir, generatedContentName string) error { - tmpDir = path.Join(tmpDir, generatedContentName) + tmpDir = filepath.Join(tmpDir, generatedContentName) err := os.MkdirAll(tmpDir, os.ModePerm) if err != nil { return err @@ -208,8 +207,8 @@ func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.Dat } } - in := path.Join(tmpDir, resource.Name) - out := path.Join(tmpDir, "openapi-dsl.xml") + in := filepath.Join(tmpDir, resource.Name) + out := filepath.Join(tmpDir, "openapi-dsl.xml") err = ioutil.WriteFile(in, content, 0o400) if err != nil { diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go index 114c6fe00..63fcb07d0 100644 --- a/pkg/trait/trait_test.go +++ b/pkg/trait/trait_test.go @@ -18,7 +18,7 @@ limitations under the License. package trait import ( - "path" + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -233,7 +233,7 @@ func TestConfigureVolumesAndMountsTextResourcesAndProperties(t *testing.T) { m := findVVolumeMount(mnts, func(m corev1.VolumeMount) bool { return m.Name == "test-configmap" }) assert.NotNil(t, m) - assert.Equal(t, path.Join(camel.ConfigConfigmapsMountPath, "test-configmap"), m.MountPath) + assert.Equal(t, filepath.Join(camel.ConfigConfigmapsMountPath, "test-configmap"), m.MountPath) v = findVolume(vols, func(v corev1.Volume) bool { return v.Name == "test-secret" }) assert.NotNil(t, v) @@ -242,7 +242,7 @@ func TestConfigureVolumesAndMountsTextResourcesAndProperties(t *testing.T) { m = findVVolumeMount(mnts, func(m corev1.VolumeMount) bool { return m.Name == "test-secret" }) assert.NotNil(t, m) - assert.Equal(t, path.Join(camel.ConfigSecretsMountPath, "test-secret"), m.MountPath) + assert.Equal(t, filepath.Join(camel.ConfigSecretsMountPath, "test-secret"), m.MountPath) v = findVolume(vols, func(v corev1.Volume) bool { return v.Name == "testvolume-data" }) assert.NotNil(t, v) diff --git a/pkg/trait/trait_types.go b/pkg/trait/trait_types.go index 39c800077..b38b9a7d8 100644 --- a/pkg/trait/trait_types.go +++ b/pkg/trait/trait_types.go @@ -21,6 +21,7 @@ import ( "context" "fmt" "path" + "path/filepath" "sort" "strings" @@ -405,8 +406,8 @@ func (e *Environment) addSourcesProperties() { e.ApplicationProperties = make(map[string]string) } for i, s := range e.Integration.Sources() { - srcName := strings.TrimPrefix(s.Name, "/") - src := "file:" + path.Join(camel.SourcesMountPath, srcName) + srcName := strings.TrimPrefix(filepath.ToSlash(s.Name), "/") + src := "file:" + path.Join(filepath.ToSlash(camel.SourcesMountPath), srcName) e.ApplicationProperties[fmt.Sprintf("camel.k.sources[%d].location", i)] = src simpleName := srcName @@ -460,7 +461,7 @@ func (e *Environment) configureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c } resName := strings.TrimPrefix(s.Name, "/") refName := fmt.Sprintf("i-source-%03d", i) - resPath := path.Join(camel.SourcesMountPath, resName) + resPath := filepath.Join(camel.SourcesMountPath, resName) vol := getVolume(refName, "configmap", cmName, cmKey, resName) mnt := getMount(refName, resPath, resName, true) @@ -476,9 +477,9 @@ func (e *Environment) configureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c var mountPath string switch propertiesType { case "application": - mountPath = path.Join(camel.BasePath, resName) + mountPath = filepath.Join(camel.BasePath, resName) case "user": - mountPath = path.Join(camel.ConfDPath, resName) + mountPath = filepath.Join(camel.ConfDPath, resName) } if propertiesType != "" { @@ -521,7 +522,7 @@ func (e *Environment) configureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c if len(e.ServiceBindingSecret) > 0 { secret := e.ServiceBindingSecret refName := kubernetes.SanitizeLabel(secret) - mountPath := path.Join(camel.ServiceBindingsMountPath, strings.ToLower(secret)) + mountPath := filepath.Join(camel.ServiceBindingsMountPath, strings.ToLower(secret)) vol := getVolume(refName, "secret", secret, "", "") mnt := getMount(refName, mountPath, "", true) @@ -613,14 +614,14 @@ func getMountPoint(resourceName string, mountPoint string, storagetype, resource return mountPoint } if resourceType == "data" { - return path.Join(camel.ResourcesDefaultMountPath, resourceName) + return filepath.Join(camel.ResourcesDefaultMountPath, resourceName) } defaultMountPoint := camel.ConfigConfigmapsMountPath if storagetype == "secret" { defaultMountPoint = camel.ConfigSecretsMountPath } - return path.Join(defaultMountPoint, resourceName) + return filepath.Join(defaultMountPoint, resourceName) } func (e *Environment) collectConfigurationValues(configurationType string) []string { diff --git a/pkg/util/camel/camel_dependencies.go b/pkg/util/camel/camel_dependencies.go index abe230f08..7ef91d326 100644 --- a/pkg/util/camel/camel_dependencies.go +++ b/pkg/util/camel/camel_dependencies.go @@ -20,7 +20,6 @@ package camel import ( "fmt" "io" - "path" "path/filepath" "strings" @@ -221,7 +220,7 @@ func addRegistryMavenDependency(project *maven.Project, dependency string) error "artifact", }, Configuration: map[string]string{ - "outputDirectory": path.Join(outputDirectory, filepath.Dir(outputFileRelativePath)), + "outputDirectory": filepath.Join(outputDirectory, filepath.Dir(outputFileRelativePath)), "outputFileName": filepath.Base(outputFileRelativePath), "groupId": gav.GroupID, "artifactId": gav.ArtifactID, diff --git a/pkg/util/camel/camel_util.go b/pkg/util/camel/camel_util.go index 7b6215881..4e252c906 100644 --- a/pkg/util/camel/camel_util.go +++ b/pkg/util/camel/camel_util.go @@ -18,7 +18,7 @@ limitations under the License. package camel import ( - "path" + "path/filepath" "sort" "strings" @@ -30,13 +30,13 @@ import ( var ( BasePath = "/etc/camel" - ConfDPath = path.Join(BasePath, "conf.d") - SourcesMountPath = path.Join(BasePath, "sources") - ResourcesDefaultMountPath = path.Join(BasePath, "resources") - ConfigResourcesMountPath = path.Join(ConfDPath, "_resources") - ConfigConfigmapsMountPath = path.Join(ConfDPath, "_configmaps") - ConfigSecretsMountPath = path.Join(ConfDPath, "_secrets") - ServiceBindingsMountPath = path.Join(ConfDPath, "_servicebindings") + ConfDPath = filepath.Join(BasePath, "conf.d") + SourcesMountPath = filepath.Join(BasePath, "sources") + ResourcesDefaultMountPath = filepath.Join(BasePath, "resources") + ConfigResourcesMountPath = filepath.Join(ConfDPath, "_resources") + ConfigConfigmapsMountPath = filepath.Join(ConfDPath, "_configmaps") + ConfigSecretsMountPath = filepath.Join(ConfDPath, "_secrets") + ServiceBindingsMountPath = filepath.Join(ConfDPath, "_servicebindings") ) func findBestMatch(catalogs []v1.CamelCatalog, runtime v1.RuntimeSpec) (*RuntimeCatalog, error) { diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go index 360f5ed12..7918fd775 100644 --- a/pkg/util/camel/catalog.go +++ b/pkg/util/camel/catalog.go @@ -19,7 +19,7 @@ package camel import ( "context" - "path" + "path/filepath" yaml2 "gopkg.in/yaml.v2" @@ -148,7 +148,7 @@ func GenerateCatalogCommon( return err } - content, err := util.ReadFile(path.Join(tmpDir, "catalog.yaml")) + content, err := util.ReadFile(filepath.Join(tmpDir, "catalog.yaml")) if err != nil { return err } diff --git a/pkg/util/digest/digest.go b/pkg/util/digest/digest.go index ee119a452..ddadc615b 100644 --- a/pkg/util/digest/digest.go +++ b/pkg/util/digest/digest.go @@ -27,7 +27,7 @@ import ( "fmt" "hash" "io" - "path" + "path/filepath" "sort" "strconv" "strings" @@ -311,7 +311,7 @@ func sortedTraitAnnotationsKeys(it *v1.Integration) []string { } func ComputeSHA1(elem ...string) (string, error) { - file := path.Join(elem...) + file := filepath.Join(elem...) // #nosec G401 h := sha1.New() diff --git a/pkg/util/docker/docker.go b/pkg/util/docker/docker.go index eca77307f..37d298190 100644 --- a/pkg/util/docker/docker.go +++ b/pkg/util/docker/docker.go @@ -19,7 +19,7 @@ package docker import ( "os/exec" - "path" + "path/filepath" "strings" "github.com/apache/camel-k/pkg/util" @@ -38,7 +38,7 @@ func CreateBaseImageDockerFile() error { dockerFile = append(dockerFile, RUNMavenInstall()) // Write <BaseWorkingDirectory>/Dockerfile - baseDockerFilePath := path.Join(BaseWorkingDirectory, "Dockerfile") + baseDockerFilePath := filepath.Join(BaseWorkingDirectory, "Dockerfile") if err := util.WriteToFile(baseDockerFilePath, strings.Join(dockerFile, "\n")); err != nil { return err } @@ -82,7 +82,7 @@ func CreateIntegrationImageDockerFile(integrationRunCmd *exec.Cmd, startsFromLoc dockerFile = append(dockerFile, CMDShellWrap(strings.Join(integrationRunCmd.Args, " "))) // Write <IntegrationWorkingDirectory>/Dockerfile - integrationDockerFilePath := path.Join(IntegrationWorkingDirectory, "Dockerfile") + integrationDockerFilePath := filepath.Join(IntegrationWorkingDirectory, "Dockerfile") err := util.WriteToFile(integrationDockerFilePath, strings.Join(dockerFile, "\n")) if err != nil { return err @@ -139,7 +139,7 @@ func GetContainerRoutesDir() string { func ContainerizeFilePaths(currentFilePaths []string, newDir string) []string { newFilePaths := []string{} for _, currentFilePath := range currentFilePaths { - newFilePaths = append(newFilePaths, newDir+containerFileSeparator+path.Base(currentFilePath)) + newFilePaths = append(newFilePaths, newDir+containerFileSeparator+filepath.Base(currentFilePath)) } return newFilePaths @@ -153,7 +153,7 @@ func ContainerizeDependencyPaths(dependencyPaths []string, newDir string) []stri if newDependencyPath != "" { newDependencyPaths = append(newDependencyPaths, newDir+newDependencyPath) } else { - newDependencyPaths = append(newDependencyPaths, newDir+containerFileSeparator+path.Base(currentDependencyPath)) + newDependencyPaths = append(newDependencyPaths, newDir+containerFileSeparator+filepath.Base(currentDependencyPath)) } } return newDependencyPaths diff --git a/pkg/util/docker/docker_base.go b/pkg/util/docker/docker_base.go index 5fba82e95..f91f60bc1 100644 --- a/pkg/util/docker/docker_base.go +++ b/pkg/util/docker/docker_base.go @@ -18,7 +18,7 @@ limitations under the License. package docker import ( - "path" + "path/filepath" "strings" "github.com/apache/camel-k/pkg/util" @@ -56,7 +56,7 @@ func BuildImageArgs(dockerFileDir string, imageName string, sourceDir string) [] args = append(args, "build") // Add path to Dockerfile: - dockerFile := path.Join(dockerFileDir, "Dockerfile") + dockerFile := filepath.Join(dockerFileDir, "Dockerfile") args = append(args, DockerfilePathArg(dockerFile)...) diff --git a/pkg/util/jvm/keystore.go b/pkg/util/jvm/keystore.go index 9788fa362..1721227b9 100644 --- a/pkg/util/jvm/keystore.go +++ b/pkg/util/jvm/keystore.go @@ -23,7 +23,7 @@ import ( "fmt" "os" "os/exec" - "path" + "path/filepath" "strings" "github.com/apache/camel-k/pkg/util" @@ -56,7 +56,7 @@ func GenerateKeystore(ctx context.Context, keystoreDir, keystoreName, keystorePa // JVM truststore. javaHome, ok := os.LookupEnv("JAVA_HOME") if ok { - caCertsPath := path.Join(javaHome, "lib/security/cacerts") + caCertsPath := filepath.Join(javaHome, "lib/security/cacerts") args := strings.Fields(fmt.Sprintf("-importkeystore -noprompt -srckeystore %s -srcstorepass %s -destkeystore %s -deststorepass %s", caCertsPath, "changeit", keystoreName, keystorePass)) cmd := exec.CommandContext(ctx, "keytool", args...) cmd.Dir = keystoreDir diff --git a/pkg/util/maven/maven_command.go b/pkg/util/maven/maven_command.go index 2440a4328..c0cc4d764 100644 --- a/pkg/util/maven/maven_command.go +++ b/pkg/util/maven/maven_command.go @@ -24,7 +24,7 @@ import ( "io/ioutil" "os" "os/exec" - "path" + "path/filepath" "regexp" "runtime" "strconv" @@ -62,14 +62,14 @@ func (c *Command) Do(ctx context.Context) error { } } - settingsPath := path.Join(c.context.Path, "settings.xml") + settingsPath := filepath.Join(c.context.Path, "settings.xml") if settingsExists, err := util.FileExists(settingsPath); err != nil { return err } else if settingsExists { args = append(args, "--global-settings", settingsPath) } - settingsPath = path.Join(c.context.Path, "user-settings.xml") + settingsPath = filepath.Join(c.context.Path, "user-settings.xml") if settingsExists, err := util.FileExists(settingsPath); err != nil { return err } else if settingsExists { @@ -183,19 +183,19 @@ func generateProjectStructure(context Context, project Project) error { } if context.GlobalSettings != nil { - if err := util.WriteFileWithContent(path.Join(context.Path, "settings.xml"), context.GlobalSettings); err != nil { + if err := util.WriteFileWithContent(filepath.Join(context.Path, "settings.xml"), context.GlobalSettings); err != nil { return err } } if context.UserSettings != nil { - if err := util.WriteFileWithContent(path.Join(context.Path, "user-settings.xml"), context.UserSettings); err != nil { + if err := util.WriteFileWithContent(filepath.Join(context.Path, "user-settings.xml"), context.UserSettings); err != nil { return err } } if context.SettingsSecurity != nil { - if err := util.WriteFileWithContent(path.Join(context.Path, "settings-security.xml"), context.SettingsSecurity); err != nil { + if err := util.WriteFileWithContent(filepath.Join(context.Path, "settings-security.xml"), context.SettingsSecurity); err != nil { return err } } @@ -218,7 +218,7 @@ func generateProjectStructure(context Context, project Project) error { if len(bytes) > 0 { Log.Infof("write entry: %s (%d bytes)", k, len(bytes)) - err = util.WriteFileWithContent(path.Join(context.Path, k), bytes) + err = util.WriteFileWithContent(filepath.Join(context.Path, k), bytes) if err != nil { return err } diff --git a/pkg/util/util.go b/pkg/util/util.go index 80fb19910..750aada65 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -330,7 +330,7 @@ func WriteFileWithBytesMarshallerContent(basePath string, filePath string, conte return err } - return WriteFileWithContent(path.Join(basePath, filePath), data) + return WriteFileWithContent(filepath.Join(basePath, filePath), data) } func FindAllDistinctStringSubmatch(data string, regexps ...*regexp.Regexp) []string {