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 d7e68a7175cfbfa9c6a22dd1c7504f2b750158ea Author: Tadayoshi Sato <[email protected]> AuthorDate: Thu Jul 28 15:35:34 2022 +0900 chore(cli): further refactor kamel local cmds --- pkg/cmd/local.go | 3 +- pkg/cmd/local_build.go | 37 +++--- pkg/cmd/local_run.go | 6 +- pkg/cmd/local_util.go | 121 +++++++++++++++++- ...containerization.go => local_util_container.go} | 24 ++-- pkg/util/util.go | 141 ++------------------- 6 files changed, 160 insertions(+), 172 deletions(-) diff --git a/pkg/cmd/local.go b/pkg/cmd/local.go index 1a480490f..65163bfa5 100644 --- a/pkg/cmd/local.go +++ b/pkg/cmd/local.go @@ -75,6 +75,7 @@ func (o *LocalCmdOptions) persistentPreRun(cmd *cobra.Command, args []string) er func warnTraitUsages(cmd *cobra.Command, traits []string) { if len(traits) > 0 { - fmt.Fprintf(cmd.OutOrStdout(), "Warning: traits are specified but don't take effect for local run: %v\n", traits) + fmt.Fprintf(cmd.OutOrStdout(), + "Warning: traits are specified but don't take effect for local run: %v\n", traits) } } diff --git a/pkg/cmd/local_build.go b/pkg/cmd/local_build.go index 2bbb4b3f5..079bf0dc3 100644 --- a/pkg/cmd/local_build.go +++ b/pkg/cmd/local_build.go @@ -129,29 +129,27 @@ func (o *localBuildCmdOptions) validate(args []string) error { func (o *localBuildCmdOptions) init(args []string) error { // Create integration directory if one is provided. - err := util.CreateDirectory(o.IntegrationDirectory) - if err != nil { - return err + if o.IntegrationDirectory != "" { + if err := util.CreateDirectory(o.IntegrationDirectory); err != nil { + return err + } } if o.BaseImage || o.Image != "" { // If base image construction is enabled create a directory for it. - err := createDockerBaseWorkingDirectory() - if err != nil { + if err := createDockerBaseWorkingDirectory(); err != nil { return err } // If integration image construction is enabled, an integration image will be built. if o.Image != "" { - err := createDockerWorkingDirectory() - if err != nil { + if err := createDockerWorkingDirectory(); err != nil { return err } } } - err = createMavenWorkingDirectory() - if err != nil { + if err := createMavenWorkingDirectory(); err != nil { return err } @@ -178,13 +176,12 @@ func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error { dependenciesList = dependencies propertyFilesList = propertyFiles - hasIntegrationDir := o.IntegrationDirectory != "" - if hasIntegrationDir { + if o.IntegrationDirectory != "" { // Create dependencies subdirectory. localDependenciesDirectory := getCustomDependenciesDir(o.IntegrationDirectory) // Copy dependencies in persistent IntegrationDirectory/dependencies - dependenciesList, err = util.CopyIntegrationFilesToDirectory(dependencies, localDependenciesDirectory) + dependenciesList, err = CopyIntegrationFilesToDirectory(dependencies, localDependenciesDirectory) if err != nil { return err } @@ -198,7 +195,7 @@ func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error { localPropertiesDirectory := getCustomPropertiesDir(o.IntegrationDirectory) // Copy dependencies in persistent IntegrationDirectory/dependencies - propertyFilesList, err = util.CopyIntegrationFilesToDirectory(propertyFiles, localPropertiesDirectory) + propertyFilesList, err = CopyIntegrationFilesToDirectory(propertyFiles, localPropertiesDirectory) if err != nil { return err } @@ -207,7 +204,7 @@ func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error { localRoutesDirectory := getCustomRoutesDir(o.IntegrationDirectory) // Copy routes in persistent IntegrationDirectory/dependencies - routeFiles, err = util.CopyIntegrationFilesToDirectory(args, localRoutesDirectory) + routeFiles, err = CopyIntegrationFilesToDirectory(args, localRoutesDirectory) if err != nil { return err } @@ -226,7 +223,8 @@ func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error { // Create and build integration image. err := createAndBuildIntegrationImage(o.Context, o.ContainerRegistry, o.BaseImage, - o.Image, propertyFilesList, dependenciesList, routeFiles, false, cmd.OutOrStdout(), cmd.ErrOrStderr()) + o.Image, propertyFilesList, dependenciesList, routeFiles, false, + cmd.OutOrStdout(), cmd.ErrOrStderr()) if err != nil { return err } @@ -236,19 +234,16 @@ func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error { func (o *localBuildCmdOptions) deinit() error { // If base image construction is enabled delete the directory for it. - err := deleteDockerBaseWorkingDirectory() - if err != nil { + if err := deleteDockerBaseWorkingDirectory(); err != nil { return err } // If integration files are provided delete the maven project folder. if !o.BaseImage { - err = deleteDockerWorkingDirectory() - if err != nil { + if err := deleteDockerWorkingDirectory(); err != nil { return err } - err = deleteMavenWorkingDirectory() - if err != nil { + if err := deleteMavenWorkingDirectory(); err != nil { return err } } diff --git a/pkg/cmd/local_run.go b/pkg/cmd/local_run.go index 024a361a3..ad6f77ce3 100644 --- a/pkg/cmd/local_run.go +++ b/pkg/cmd/local_run.go @@ -171,7 +171,7 @@ func (o *localRunCmdOptions) run(cmd *cobra.Command, args []string) error { // <integration_directory>/../quarkus/quarkus-application.dat // <integration_directory>/../quarkus/generated-bytecode.jar localQuarkusDir := getCustomQuarkusDir(o.IntegrationDirectory) - err = util.CopyQuarkusAppFiles(localDependenciesDirectory, localQuarkusDir) + err = CopyQuarkusAppFiles(localDependenciesDirectory, localQuarkusDir) if err != nil { return err } @@ -179,7 +179,7 @@ func (o *localRunCmdOptions) run(cmd *cobra.Command, args []string) error { // The dependency jar files need to be at a specific location i.e.: // <integration_directory>/../lib/main/*.jar localLibDirectory := getCustomLibDir(o.IntegrationDirectory) - err = util.CopyLibFiles(localDependenciesDirectory, localLibDirectory) + err = CopyLibFiles(localDependenciesDirectory, localLibDirectory) if err != nil { return err } @@ -187,7 +187,7 @@ func (o *localRunCmdOptions) run(cmd *cobra.Command, args []string) error { // The Camel K jar file needs to be at a specific location i.e.: // <integration_directory>/../app/camel-k-integration-X.X.X{-SNAPSHOT}.jar localAppDirectory := getCustomAppDir(o.IntegrationDirectory) - err = util.CopyAppFile(localDependenciesDirectory, localAppDirectory) + err = CopyAppFile(localDependenciesDirectory, localAppDirectory) if err != nil { return err } diff --git a/pkg/cmd/local_util.go b/pkg/cmd/local_util.go index 75837d85f..3ecd9adc7 100644 --- a/pkg/cmd/local_util.go +++ b/pkg/cmd/local_util.go @@ -427,7 +427,7 @@ func updateQuarkusDirectory() error { } // ignore error if custom dir doesn't exist - _ = util.CopyQuarkusAppFiles(util.CustomQuarkusDirectoryName, util.GetLocalQuarkusDir()) + _ = CopyQuarkusAppFiles(util.CustomQuarkusDirectoryName, util.GetLocalQuarkusDir()) return nil } @@ -439,7 +439,7 @@ func updateAppDirectory() error { } // ignore error if custom dir doesn't exist - _ = util.CopyAppFile(util.CustomAppDirectoryName, util.GetLocalAppDir()) + _ = CopyAppFile(util.CustomAppDirectoryName, util.GetLocalAppDir()) return nil } @@ -451,7 +451,7 @@ func updateLibDirectory() error { } // ignore error if custom dir doesn't exist - _ = util.CopyLibFiles(util.CustomLibDirectoryName, util.GetLocalLibDir()) + _ = CopyLibFiles(util.CustomLibDirectoryName, util.GetLocalLibDir()) return nil } @@ -517,3 +517,118 @@ func deleteLocalIntegrationDirs(integrationDirectory string) error { return nil } + +func CopyIntegrationFilesToDirectory(files []string, directory string) ([]string, error) { + // Create directory if one does not already exist + if err := util.CreateDirectory(directory); err != nil { + return nil, err + } + + // 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)) + _, err := util.CopyFile(filePath, newFilePath) + if err != nil { + return relocatedFilesList, err + } + relocatedFilesList = append(relocatedFilesList, newFilePath) + } + + return relocatedFilesList, nil +} + +func CopyQuarkusAppFiles(localDependenciesDirectory string, localQuarkusDir string) error { + // Create directory if one does not already exist + err := util.CreateDirectory(localQuarkusDir) + if err != nil { + return err + } + + // Transfer all files with a .dat extension and all files with a *-bytecode.jar suffix. + files, err := getRegularFileNamesInDir(localDependenciesDirectory) + if err != nil { + return err + } + for _, file := range files { + if strings.HasSuffix(file, ".dat") || strings.HasSuffix(file, "-bytecode.jar") { + source := path.Join(localDependenciesDirectory, file) + destination := path.Join(localQuarkusDir, file) + _, err = util.CopyFile(source, destination) + if err != nil { + return err + } + } + } + + return nil +} + +func CopyLibFiles(localDependenciesDirectory string, localLibDirectory string) error { + // Create directory if one does not already exist + err := util.CreateDirectory(localLibDirectory) + if err != nil { + return err + } + + fileNames, err := getRegularFileNamesInDir(localDependenciesDirectory) + if err != nil { + return err + } + + for _, dependencyJar := range fileNames { + source := path.Join(localDependenciesDirectory, dependencyJar) + destination := path.Join(localLibDirectory, dependencyJar) + _, err = util.CopyFile(source, destination) + if err != nil { + return err + } + } + + return nil +} + +func CopyAppFile(localDependenciesDirectory string, localAppDirectory string) error { + // Create directory if one does not already exist + err := util.CreateDirectory(localAppDirectory) + if err != nil { + return err + } + + fileNames, err := getRegularFileNamesInDir(localDependenciesDirectory) + if err != nil { + return err + } + + for _, dependencyJar := range fileNames { + if strings.HasPrefix(dependencyJar, "camel-k-integration-") { + source := path.Join(localDependenciesDirectory, dependencyJar) + destination := path.Join(localAppDirectory, dependencyJar) + _, err = util.CopyFile(source, destination) + if err != nil { + return err + } + } + } + + return nil +} + +func getRegularFileNamesInDir(directory string) ([]string, error) { + var dirFiles []string + files, err := ioutil.ReadDir(directory) + for _, file := range files { + fileName := file.Name() + + // Do not include hidden files or sub-directories. + if !file.IsDir() && !strings.HasPrefix(fileName, ".") { + dirFiles = append(dirFiles, fileName) + } + } + + if err != nil { + return nil, err + } + + return dirFiles, nil +} diff --git a/pkg/cmd/util_containerization.go b/pkg/cmd/local_util_container.go similarity index 92% rename from pkg/cmd/util_containerization.go rename to pkg/cmd/local_util_container.go index ec1c2e932..64e9dd886 100644 --- a/pkg/cmd/util_containerization.go +++ b/pkg/cmd/local_util_container.go @@ -85,8 +85,7 @@ func setDockerEnvVars(envVars []string) { func createAndBuildBaseImage(ctx context.Context, stdout, stderr io.Writer) error { // Create the base image Docker file. - err := docker.CreateBaseImageDockerFile() - if err != nil { + if err := docker.CreateBaseImageDockerFile(); err != nil { return err } @@ -130,8 +129,7 @@ func createAndBuildIntegrationImage(ctx context.Context, containerRegistry strin } // Create the Dockerfile and build the base image. - err := createAndBuildBaseImage(ctx, stdout, stderr) - if err != nil { + if err := createAndBuildBaseImage(ctx, stdout, stderr); err != nil { return err } @@ -145,32 +143,27 @@ func createAndBuildIntegrationImage(ctx context.Context, containerRegistry strin // Create integration image if integration files were provided. // Copy dependencies to a dependencies folder under a local directory. - err = updateIntegrationDependencies(dependencies) - if err != nil { + if err := updateIntegrationDependencies(dependencies); err != nil { return err } // Copy routes to a routes folder under a local directory. - err = updateIntegrationRoutes(routes) - if err != nil { + if err := updateIntegrationRoutes(routes); err != nil { return err } // Copy quarkus files in maven subdirectory - err = updateQuarkusDirectory() - if err != nil { + if err := updateQuarkusDirectory(); err != nil { return err } // Copy app files in maven subdirectory - err = updateAppDirectory() - if err != nil { + if err := updateAppDirectory(); err != nil { return err } // Copy lib files in maven subdirectory - err = updateLibDirectory() - if err != nil { + if err := updateLibDirectory(); err != nil { return err } @@ -182,8 +175,7 @@ func createAndBuildIntegrationImage(ctx context.Context, containerRegistry strin } // Create the integration image Docker file. - err = docker.CreateIntegrationImageDockerFile(containerCmd, startsFromLocalFolder) - if err != nil { + if err := docker.CreateIntegrationImageDockerFile(containerCmd, startsFromLocalFolder); err != nil { return err } diff --git a/pkg/util/util.go b/pkg/util/util.go index c68f27717..45e02c0b9 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -368,20 +368,21 @@ func DirectoryEmpty(directory string) (bool, error) { return ok, err } +// CreateDirectory creates a directory if it does not exist. func CreateDirectory(directory string) error { - if directory != "" { - // If directory does not exist, create it - directoryExists, err := DirectoryExists(directory) - if err != nil { - return err - } + if directory == "" { + return errors.New("directory name must not be empty") + } - if !directoryExists { - // #nosec G301 - err := os.MkdirAll(directory, 0o755) - if err != nil { - return err - } + directoryExists, err := DirectoryExists(directory) + if err != nil { + return err + } + + if !directoryExists { + // #nosec G301 + if err := os.MkdirAll(directory, 0o755); err != nil { + return err } } @@ -682,122 +683,6 @@ func EvaluateCLIAndLazyEnvVars() ([]string, error) { return evaluatedEnvVars, nil } -func CopyIntegrationFilesToDirectory(files []string, directory string) ([]string, error) { - // Create directory if one does not already exist - err := CreateDirectory(directory) - if err != nil { - return nil, err - } - - // 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)) - _, err := CopyFile(filePath, newFilePath) - if err != nil { - return relocatedFilesList, err - } - relocatedFilesList = append(relocatedFilesList, newFilePath) - } - - return relocatedFilesList, nil -} - -func CopyQuarkusAppFiles(localDependenciesDirectory string, localQuarkusDir string) error { - // Create directory if one does not already exist - err := CreateDirectory(localQuarkusDir) - if err != nil { - return err - } - - // Transfer all files with a .dat extension and all files with a *-bytecode.jar suffix. - files, err := getRegularFileNamesInDir(localDependenciesDirectory) - if err != nil { - return err - } - for _, file := range files { - if strings.HasSuffix(file, ".dat") || strings.HasSuffix(file, "-bytecode.jar") { - source := path.Join(localDependenciesDirectory, file) - destination := path.Join(localQuarkusDir, file) - _, err = CopyFile(source, destination) - if err != nil { - return err - } - } - } - - return nil -} - -func getRegularFileNamesInDir(directory string) ([]string, error) { - var dirFiles []string - files, err := ioutil.ReadDir(directory) - for _, file := range files { - fileName := file.Name() - - // Do not include hidden files or sub-directories. - if !file.IsDir() && !strings.HasPrefix(fileName, ".") { - dirFiles = append(dirFiles, fileName) - } - } - - if err != nil { - return nil, err - } - - return dirFiles, nil -} - -func CopyLibFiles(localDependenciesDirectory string, localLibDirectory string) error { - // Create directory if one does not already exist - err := CreateDirectory(localLibDirectory) - if err != nil { - return err - } - - fileNames, err := getRegularFileNamesInDir(localDependenciesDirectory) - if err != nil { - return err - } - - for _, dependencyJar := range fileNames { - source := path.Join(localDependenciesDirectory, dependencyJar) - destination := path.Join(localLibDirectory, dependencyJar) - _, err = CopyFile(source, destination) - if err != nil { - return err - } - } - - return nil -} - -func CopyAppFile(localDependenciesDirectory string, localAppDirectory string) error { - // Create directory if one does not already exist - err := CreateDirectory(localAppDirectory) - if err != nil { - return err - } - - fileNames, err := getRegularFileNamesInDir(localDependenciesDirectory) - if err != nil { - return err - } - - for _, dependencyJar := range fileNames { - if strings.HasPrefix(dependencyJar, "camel-k-integration-") { - source := path.Join(localDependenciesDirectory, dependencyJar) - destination := path.Join(localAppDirectory, dependencyJar) - _, err = CopyFile(source, destination) - if err != nil { - return err - } - } - } - - return nil -} - // Open a safe wrapper of os.Open. func Open(name string) (*os.File, error) { return os.Open(filepath.Clean(name))
