You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ts...@apache.org on 2022/08/07 13:01:34 UTC

[camel-k] 04/09: chore(cli): further refactor kamel local cmds

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 eca1ef38efe62191036d362e2b674cdcca47c00f
Author: Tadayoshi Sato <sa...@gmail.com>
AuthorDate: Thu Jul 28 22:46:16 2022 +0900

    chore(cli): further refactor kamel local cmds
---
 pkg/cmd/local_build.go          | 51 ++++++++++++++++-------------------------
 pkg/cmd/local_run.go            |  6 ++---
 pkg/cmd/local_util.go           | 44 +++++++++++++++--------------------
 pkg/cmd/local_util_container.go | 34 +++++++++++++++++++--------
 pkg/util/docker/docker.go       |  3 +--
 pkg/util/docker/docker_base.go  |  4 ++--
 6 files changed, 69 insertions(+), 73 deletions(-)

diff --git a/pkg/cmd/local_build.go b/pkg/cmd/local_build.go
index 181f58979..bc506c27b 100644
--- a/pkg/cmd/local_build.go
+++ b/pkg/cmd/local_build.go
@@ -159,6 +159,7 @@ func (o *localBuildCmdOptions) init(args []string) error {
 func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error {
 	var dependenciesList, propertyFilesList []string
 	routeFiles := args
+
 	if !o.BaseImage {
 		dependencies, err := getDependencies(o.Context, args, o.Dependencies, o.MavenRepositories, true)
 		if err != nil {
@@ -177,56 +178,44 @@ func (o *localBuildCmdOptions) run(cmd *cobra.Command, args []string) error {
 		dependenciesList = dependencies
 		propertyFilesList = propertyFiles
 
+		// Integration directory can only be used when building an integration image or when we just
+		// build the integration without also building the image. A local build of the integration is
+		// represented by all the files that define the integration: dependencies, properties, and routes.
 		if o.IntegrationDirectory != "" {
-			// Create dependencies subdirectory.
-			localDependenciesDirectory := getCustomDependenciesDir(o.IntegrationDirectory)
-
-			// Copy dependencies in persistent IntegrationDirectory/dependencies
-			dependenciesList, err = copyIntegrationFilesToDirectory(dependencies, localDependenciesDirectory)
+			localDependenciesDir := getCustomDependenciesDir(o.IntegrationDirectory)
+			dependenciesList, err = copyIntegrationFilesToDirectory(dependencies, localDependenciesDir)
 			if err != nil {
 				return err
 			}
 
-			// Once dependencies have been copied to local folder, we can exit.
 			if o.DependenciesOnly {
+				// Once dependencies have been copied to local folder, we can exit.
 				return nil
 			}
 
-			// Create dependencies subdirectory.
-			localPropertiesDirectory := getCustomPropertiesDir(o.IntegrationDirectory)
-
-			// Copy dependencies in persistent IntegrationDirectory/dependencies
-			propertyFilesList, err = copyIntegrationFilesToDirectory(propertyFiles, localPropertiesDirectory)
+			localPropertiesDir := getCustomPropertiesDir(o.IntegrationDirectory)
+			propertyFilesList, err = copyIntegrationFilesToDirectory(propertyFiles, localPropertiesDir)
 			if err != nil {
 				return err
 			}
 
-			// Save routes.
-			localRoutesDirectory := getCustomRoutesDir(o.IntegrationDirectory)
-
-			// Copy routes in persistent IntegrationDirectory/dependencies
-			routeFiles, err = copyIntegrationFilesToDirectory(args, localRoutesDirectory)
+			localRoutesDir := getCustomRoutesDir(o.IntegrationDirectory)
+			routeFiles, err = copyIntegrationFilesToDirectory(args, localRoutesDir)
 			if err != nil {
 				return err
 			}
-		}
-	}
-
-	// Integration directory can only be used when building an integration image or when we just
-	// build the integration without also building the image. A local build of the integration is
-	// represented by all the files that define the integration: dependencies, properties and routes.
 
-	// The only case in which we should not execute the integration image creation is when we want to
-	// just output the files that comprise the integration locally.
-	if o.IntegrationDirectory != "" && o.Image == "" {
-		return nil
+			// The only case in which we should not execute the integration image creation is when we want to
+			// just output the files that comprise the integration locally.
+			if o.Image == "" {
+				return nil
+			}
+		}
 	}
 
-	// Create and build integration image.
-	err := createAndBuildIntegrationImage(o.Context, o.ContainerRegistry, o.BaseImage,
-		o.Image, propertyFilesList, dependenciesList, routeFiles, false,
-		cmd.OutOrStdout(), cmd.ErrOrStderr())
-	if err != nil {
+	if err := createAndBuildIntegrationImage(o.Context, o.ContainerRegistry, o.BaseImage, o.Image,
+		propertyFilesList, dependenciesList, routeFiles, false,
+		cmd.OutOrStdout(), cmd.ErrOrStderr()); err != nil {
 		return err
 	}
 
diff --git a/pkg/cmd/local_run.go b/pkg/cmd/local_run.go
index 951e455f3..62e53205a 100644
--- a/pkg/cmd/local_run.go
+++ b/pkg/cmd/local_run.go
@@ -224,9 +224,9 @@ func (o *localRunCmdOptions) run(cmd *cobra.Command, args []string) error {
 
 	// If this is a containerized local run, create, build and run the container image.
 	if o.Containerize {
-		// Create and build integration image.
-		err := createAndBuildIntegrationImage(o.Context, "", false, o.Image, propertyFiles, dependencies, routes, hasIntegrationDir, cmd.OutOrStdout(), cmd.ErrOrStderr())
-		if err != nil {
+		if err := createAndBuildIntegrationImage(o.Context, "", false, o.Image,
+			propertyFiles, dependencies, routes, hasIntegrationDir,
+			cmd.OutOrStdout(), cmd.ErrOrStderr()); err != nil {
 			return err
 		}
 
diff --git a/pkg/cmd/local_util.go b/pkg/cmd/local_util.go
index 67ea7f905..bc0d26619 100644
--- a/pkg/cmd/local_util.go
+++ b/pkg/cmd/local_util.go
@@ -357,8 +357,9 @@ func updateIntegrationProperties(properties []string, propertyFiles []string, ha
 
 	// Relocate properties files to this integration's property directory.
 	relocatedPropertyFiles := []string{}
+	dir := getLocalPropertiesDir()
 	for _, propertyFile := range propertyFiles {
-		relocatedPropertyFile := path.Join(getLocalPropertiesDir(), path.Base(propertyFile))
+		relocatedPropertyFile := path.Join(dir, path.Base(propertyFile))
 		if _, err := util.CopyFile(propertyFile, relocatedPropertyFile); err != nil {
 			return nil, err
 		}
@@ -368,7 +369,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(getLocalPropertiesDir(), "CLI.properties")
+			propertyFilePath := path.Join(dir, "CLI.properties")
 			if err := ioutil.WriteFile(propertyFilePath, []byte(strings.Join(properties, "\n")), 0o600); err != nil {
 				return nil, err
 			}
@@ -382,22 +383,21 @@ func updateIntegrationProperties(properties []string, propertyFiles []string, ha
 func updateIntegrationDependencies(dependencies []string) error {
 	// Create dependencies directory under Maven working directory.
 	// This ensures that dependencies will be removed after they are not needed.
-	err := createLocalDependenciesDirectory()
-	if err != nil {
+	if err := createLocalDependenciesDirectory(); err != nil {
 		return err
 	}
 
 	// Relocate dependencies files to this integration's dependencies directory
+	dir := getLocalDependenciesDir()
 	for _, dependency := range dependencies {
 		var targetPath string
 		basePath := util.SubstringFrom(dependency, util.QuarkusDependenciesBaseDirectory)
 		if basePath != "" {
-			targetPath = path.Join(getLocalDependenciesDir(), basePath)
+			targetPath = path.Join(dir, basePath)
 		} else {
-			targetPath = path.Join(getLocalDependenciesDir(), path.Base(dependency))
+			targetPath = path.Join(dir, path.Base(dependency))
 		}
-		_, err = util.CopyFile(dependency, targetPath)
-		if err != nil {
+		if _, err := util.CopyFile(dependency, targetPath); err != nil {
 			return err
 		}
 	}
@@ -406,14 +406,13 @@ func updateIntegrationDependencies(dependencies []string) error {
 }
 
 func updateIntegrationRoutes(routes []string) error {
-	err := createLocalRoutesDirectory()
-	if err != nil {
+	if err := createLocalRoutesDirectory(); err != nil {
 		return err
 	}
 
+	dir := getLocalRoutesDir()
 	for _, route := range routes {
-		_, err = util.CopyFile(route, path.Join(getLocalRoutesDir(), path.Base(route)))
-		if err != nil {
+		if _, err := util.CopyFile(route, path.Join(dir, path.Base(route))); err != nil {
 			return err
 		}
 	}
@@ -422,8 +421,7 @@ func updateIntegrationRoutes(routes []string) error {
 }
 
 func updateQuarkusDirectory() error {
-	err := createLocalQuarkusDirectory()
-	if err != nil {
+	if err := createLocalQuarkusDirectory(); err != nil {
 		return err
 	}
 
@@ -434,8 +432,7 @@ func updateQuarkusDirectory() error {
 }
 
 func updateAppDirectory() error {
-	err := createLocalAppDirectory()
-	if err != nil {
+	if err := createLocalAppDirectory(); err != nil {
 		return err
 	}
 
@@ -446,8 +443,7 @@ func updateAppDirectory() error {
 }
 
 func updateLibDirectory() error {
-	err := createLocalLibDirectory()
-	if err != nil {
+	if err := createLocalLibDirectory(); err != nil {
 		return err
 	}
 
@@ -467,8 +463,7 @@ func copyIntegrationFilesToDirectory(files []string, directory string) ([]string
 	relocatedFilesList := []string{}
 	for _, filePath := range files {
 		newFilePath := path.Join(directory, path.Base(filePath))
-		_, err := util.CopyFile(filePath, newFilePath)
-		if err != nil {
+		if _, err := util.CopyFile(filePath, newFilePath); err != nil {
 			return relocatedFilesList, err
 		}
 		relocatedFilesList = append(relocatedFilesList, newFilePath)
@@ -492,8 +487,7 @@ func copyQuarkusAppFiles(localDependenciesDirectory string, localQuarkusDir stri
 		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 {
+			if _, err = util.CopyFile(source, destination); err != nil {
 				return err
 			}
 		}
@@ -516,8 +510,7 @@ func copyLibFiles(localDependenciesDirectory string, localLibDirectory string) e
 	for _, dependencyJar := range fileNames {
 		source := path.Join(localDependenciesDirectory, dependencyJar)
 		destination := path.Join(localLibDirectory, dependencyJar)
-		_, err = util.CopyFile(source, destination)
-		if err != nil {
+		if _, err = util.CopyFile(source, destination); err != nil {
 			return err
 		}
 	}
@@ -540,8 +533,7 @@ func copyAppFile(localDependenciesDirectory string, localAppDirectory string) er
 		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 {
+			if _, err = util.CopyFile(source, destination); err != nil {
 				return err
 			}
 		}
diff --git a/pkg/cmd/local_util_container.go b/pkg/cmd/local_util_container.go
index e03824b7c..e2bcdd191 100644
--- a/pkg/cmd/local_util_container.go
+++ b/pkg/cmd/local_util_container.go
@@ -84,11 +84,20 @@ func setDockerEnvVars(envVars []string) {
 }
 
 func createAndBuildBaseImage(ctx context.Context, stdout, stderr io.Writer) error {
+	// This ensures the Dockerfile for the base image will not end up in an undesired location.
+	if docker.BaseWorkingDirectory == "" {
+		return errors.New("base directory that holds the base image Dockerfile has not been set correctly")
+	}
+
 	// Create the base image Docker file.
 	if err := docker.CreateBaseImageDockerFile(); err != nil {
 		return err
 	}
 
+	return buildBaseImage(ctx, stdout, stderr)
+}
+
+func buildBaseImage(ctx context.Context, stdout, stderr io.Writer) error {
 	// Get the Docker command arguments for building the base image and create the command.
 	args := docker.BuildBaseImageArgs()
 	cmd := exec.CommandContext(ctx, "docker", args...)
@@ -108,15 +117,8 @@ func createAndBuildBaseImage(ctx context.Context, stdout, stderr io.Writer) erro
 	return nil
 }
 
-func createAndBuildIntegrationImage(ctx context.Context, containerRegistry string, justBaseImage bool, image string,
-	propertyFiles []string, dependencies []string, routes []string, startsFromLocalFolder bool, stdout, stderr io.Writer) error {
-	// This ensures the Dockerfile for the base image will not end up in an undesired location.
-	if docker.BaseWorkingDirectory == "" {
-		return errors.New("base directory that holds the base image Dockerfile has not been set correctly")
-	}
-
+func setupDockerRegistry(containerRegistry string, image string, justBaseImage bool) error {
 	docker.RegistryName = containerRegistry
-
 	// If we build a normal image, i.e. not the base image, we need to parse
 	// the location where images will be pushed.
 	if !justBaseImage {
@@ -124,10 +126,19 @@ func createAndBuildIntegrationImage(ctx context.Context, containerRegistry strin
 		if err != nil {
 			return err
 		}
-
 		docker.RegistryName = registryName
 	}
 
+	return nil
+}
+
+func createAndBuildIntegrationImage(ctx context.Context, containerRegistry string, justBaseImage bool, image string,
+	propertyFiles []string, dependencies []string, routes []string, startsFromLocalFolder bool,
+	stdout, stderr io.Writer) error {
+	if err := setupDockerRegistry(containerRegistry, image, justBaseImage); err != nil {
+		return err
+	}
+
 	// Create the Dockerfile and build the base image.
 	if err := createAndBuildBaseImage(ctx, stdout, stderr); err != nil {
 		return err
@@ -179,6 +190,11 @@ func createAndBuildIntegrationImage(ctx context.Context, containerRegistry strin
 		return err
 	}
 
+	return buildIntegrationImage(ctx, image, startsFromLocalFolder, stdout, stderr)
+}
+
+func buildIntegrationImage(ctx context.Context, image string, startsFromLocalFolder bool,
+	stdout, stderr io.Writer) error {
 	// Get the Docker command arguments for building the base image and create the command.
 	args := docker.BuildIntegrationImageArgs(image, MavenWorkingDirectory)
 	cmd := exec.CommandContext(ctx, "docker", args...)
diff --git a/pkg/util/docker/docker.go b/pkg/util/docker/docker.go
index a053434c9..eca77307f 100644
--- a/pkg/util/docker/docker.go
+++ b/pkg/util/docker/docker.go
@@ -39,8 +39,7 @@ func CreateBaseImageDockerFile() error {
 
 	// Write <BaseWorkingDirectory>/Dockerfile
 	baseDockerFilePath := path.Join(BaseWorkingDirectory, "Dockerfile")
-	err := util.WriteToFile(baseDockerFilePath, strings.Join(dockerFile, "\n"))
-	if err != nil {
+	if err := util.WriteToFile(baseDockerFilePath, strings.Join(dockerFile, "\n")); err != nil {
 		return err
 	}
 
diff --git a/pkg/util/docker/docker_base.go b/pkg/util/docker/docker_base.go
index b1e032fbe..5fba82e95 100644
--- a/pkg/util/docker/docker_base.go
+++ b/pkg/util/docker/docker_base.go
@@ -40,7 +40,7 @@ var IntegrationWorkingDirectory = ""
 var NetworkName = "host"
 
 // Internal variables.
-var (
+const (
 	dockerEndpointSeparator = "/"
 	containerFileSeparator  = "/"
 	latestTag               = "latest"
@@ -174,7 +174,7 @@ func GetFullDockerImage(dockerImageName string, tag string) string {
 	return strings.Join(fullImagePath, dockerEndpointSeparator)
 }
 
-// GetBaseImagePath --.
+// GetBaseImagePath returns Docker base image path.
 func GetBaseImagePath() string {
 	return RegistryName + dockerEndpointSeparator + BaseImageName
 }