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:02:03 UTC

[camel-k] 01/02: chore(cli): refactor run command

This is an automated email from the ASF dual-hosted git repository.

tsato pushed a commit to branch release-1.9.x
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 3cc05f2468cabb8a0c007fc7ec80633c7fbd1805
Author: Tadayoshi Sato <sa...@gmail.com>
AuthorDate: Tue Jul 26 20:22:28 2022 +0900

    chore(cli): refactor run command
---
 pkg/cmd/run.go          |   5 +-
 pkg/cmd/util_sources.go | 174 +++++++++++++++++++++++-------------------------
 2 files changed, 85 insertions(+), 94 deletions(-)

diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go
index 2e55e1a99..dde1ea3ba 100644
--- a/pkg/cmd/run.go
+++ b/pkg/cmd/run.go
@@ -888,9 +888,8 @@ func getMountPath(targetPath string, dirName string, path string) (string, error
 	return filepath.Join(targetPath, localRelativePath), nil
 }
 
-// nolint:errcheck
 func (o *runCmdOptions) uploadPomFromJar(gav maven.Dependency, path string, platform *v1.IntegrationPlatform, ns string, options spectrum.Options, cmd *cobra.Command) maven.Dependency {
-	util.WithTempDir("camel-k", func(tmpDir string) error {
+	_ = util.WithTempDir("camel-k", func(tmpDir string) error {
 		pomPath := filepath.Join(tmpDir, "pom.xml")
 		jar, err := zip.OpenReader(path)
 		if err != nil {
@@ -922,7 +921,7 @@ func (o *runCmdOptions) uploadPomFromJar(gav maven.Dependency, path string, plat
 			} else {
 				gav.Type = "pom"
 				// Swallow error as this is not a mandatory step
-				o.uploadAsMavenArtifact(gav, pomPath, platform, ns, options, cmd)
+				_ = o.uploadAsMavenArtifact(gav, pomPath, platform, ns, options, cmd)
 			}
 		}
 		return nil
diff --git a/pkg/cmd/util_sources.go b/pkg/cmd/util_sources.go
index 991bf9eab..1c6563886 100644
--- a/pkg/cmd/util_sources.go
+++ b/pkg/cmd/util_sources.go
@@ -35,7 +35,7 @@ import (
 	"github.com/pkg/errors"
 )
 
-// Source ---.
+// Source represents the source file of an Integration.
 type Source struct {
 	Origin   string
 	Location string
@@ -60,7 +60,7 @@ func (s *Source) setContent(content []byte) error {
 	return nil
 }
 
-// ResolveSources ---.
+// ResolveSources resolves sources from a variety of locations including local and remote.
 func ResolveSources(ctx context.Context, locations []string, compress bool, cmd *cobra.Command) ([]Source, error) {
 	sources := make([]Source, 0, len(locations))
 
@@ -71,7 +71,7 @@ func ResolveSources(ctx context.Context, locations []string, compress bool, cmd
 		}
 
 		if ok {
-			answer, err := ResolveLocalSource(location, compress)
+			answer, err := resolveLocalSource(location, compress)
 			if err != nil {
 				return sources, err
 			}
@@ -85,101 +85,26 @@ func ResolveSources(ctx context.Context, locations []string, compress bool, cmd
 
 			switch {
 			case u.Scheme == gistScheme || strings.HasPrefix(location, "https://gist.github.com/"):
-				var tc *http.Client
-
-				if token, ok := os.LookupEnv("GITHUB_TOKEN"); ok {
-					ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
-					tc = oauth2.NewClient(ctx, ts)
-
-					fmt.Fprintln(cmd.OutOrStdout(), "GITHUB_TOKEN env var detected, using it for GitHub APIs authentication")
-				}
-
-				gc := github.NewClient(tc)
-				gistID := ""
-
-				if strings.HasPrefix(location, "https://gist.github.com/") {
-					names := util.FindNamedMatches(`^https://gist.github.com/(([a-zA-Z0-9]*)/)?(?P<gistid>[a-zA-Z0-9]*)$`, location)
-					if value, ok := names["gistid"]; ok {
-						gistID = value
-					}
-				} else {
-					gistID = u.Opaque
-				}
-
-				if gistID == "" {
-					return sources, fmt.Errorf("unable to determining gist id from %s", location)
-				}
-
-				gists, _, err := gc.Gists.Get(ctx, gistID)
+				answer, err := resolveGistSource(ctx, location, compress, cmd, u)
 				if err != nil {
 					return sources, err
 				}
-
-				for _, v := range gists.Files {
-					if v.Filename == nil || v.Content == nil {
-						continue
-					}
-
-					answer := Source{
-						Name:     *v.Filename,
-						Compress: compress,
-						Origin:   location,
-					}
-					if v.RawURL != nil {
-						answer.Location = *v.RawURL
-					}
-					if err := answer.setContent([]byte(*v.Content)); err != nil {
-						return sources, err
-					}
-					sources = append(sources, answer)
-				}
+				sources = append(sources, answer...)
 			case u.Scheme == githubScheme:
-				answer := Source{
-					Name:     path.Base(location),
-					Origin:   location,
-					Location: location,
-					Compress: compress,
-				}
-
-				content, err := loadContentGitHub(ctx, u)
-				if err != nil {
-					return sources, err
-				}
-				if err := answer.setContent(content); err != nil {
-					return sources, err
-				}
-				sources = append(sources, answer)
-			case u.Scheme == httpScheme:
-				answer := Source{
-					Name:     path.Base(location),
-					Origin:   location,
-					Location: location,
-					Compress: compress,
-				}
-
-				content, err := loadContentHTTP(ctx, u)
+				answer, err := resolveSource(location, compress, func() ([]byte, error) {
+					return loadContentGitHub(ctx, u)
+				})
 				if err != nil {
 					return sources, err
 				}
-				if err := answer.setContent(content); err != nil {
-					return sources, err
-				}
 				sources = append(sources, answer)
-			case u.Scheme == httpsScheme:
-				answer := Source{
-					Name:     path.Base(location),
-					Origin:   location,
-					Location: location,
-					Compress: compress,
-				}
-
-				content, err := loadContentHTTP(ctx, u)
+			case u.Scheme == httpScheme || u.Scheme == httpsScheme:
+				answer, err := resolveSource(location, compress, func() ([]byte, error) {
+					return loadContentHTTP(ctx, u)
+				})
 				if err != nil {
 					return sources, err
 				}
-				if err := answer.setContent(content); err != nil {
-					return sources, err
-				}
 				sources = append(sources, answer)
 			default:
 				return sources, fmt.Errorf("missing file or unsupported scheme in %s", location)
@@ -190,23 +115,90 @@ func ResolveSources(ctx context.Context, locations []string, compress bool, cmd
 	return sources, nil
 }
 
-// ResolveLocalSource --.
-func ResolveLocalSource(location string, compress bool) (Source, error) {
+// resolveGistSource resolves sources from a Gist.
+func resolveGistSource(ctx context.Context, location string, compress bool, cmd *cobra.Command, u *url.URL) ([]Source, error) {
+	var hc *http.Client
+
+	if token, ok := os.LookupEnv("GITHUB_TOKEN"); ok {
+		ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
+		hc = oauth2.NewClient(ctx, ts)
+
+		fmt.Fprintln(cmd.OutOrStdout(), "GITHUB_TOKEN env var detected, using it for GitHub APIs authentication")
+	}
+
+	gc := github.NewClient(hc)
+	gistID := ""
+
+	if strings.HasPrefix(location, "https://gist.github.com/") {
+		names := util.FindNamedMatches(`^https://gist.github.com/(([a-zA-Z0-9]*)/)?(?P<gistid>[a-zA-Z0-9]*)$`, location)
+		if value, ok := names["gistid"]; ok {
+			gistID = value
+		}
+	} else {
+		gistID = u.Opaque
+	}
+
+	if gistID == "" {
+		return []Source{}, fmt.Errorf("unable to determining gist id from %s", location)
+	}
+
+	gists, _, err := gc.Gists.Get(ctx, gistID)
+	if err != nil {
+		return []Source{}, err
+	}
+
+	sources := make([]Source, 0, len(gists.Files))
+	for _, v := range gists.Files {
+		if v.Filename == nil || v.Content == nil {
+			continue
+		}
+
+		answer := Source{
+			Name:     *v.Filename,
+			Compress: compress,
+			Origin:   location,
+		}
+		if v.RawURL != nil {
+			answer.Location = *v.RawURL
+		}
+		if err := answer.setContent([]byte(*v.Content)); err != nil {
+			return sources, err
+		}
+		sources = append(sources, answer)
+	}
+
+	return sources, nil
+}
+
+// resolveLocalSource resolves a source from the local file system.
+func resolveLocalSource(location string, compress bool) (Source, error) {
 	if _, err := os.Stat(location); err != nil && os.IsNotExist(err) {
 		return Source{}, errors.Wrapf(err, "file %s does not exist", location)
 	} else if err != nil {
 		return Source{}, errors.Wrapf(err, "error while accessing file %s", location)
 	}
 
+	answer, err := resolveSource(location, compress, func() ([]byte, error) {
+		return util.ReadFile(location)
+	})
+	if err != nil {
+		return Source{}, err
+	}
+	answer.Local = true
+
+	return answer, nil
+}
+
+// resolveSource resolves a source using the content provider function.
+func resolveSource(location string, compress bool, loadContent func() ([]byte, error)) (Source, error) {
 	answer := Source{
 		Name:     path.Base(location),
 		Origin:   location,
 		Location: location,
 		Compress: compress,
-		Local:    true,
 	}
 
-	content, err := util.ReadFile(location)
+	content, err := loadContent()
 	if err != nil {
 		return Source{}, err
 	}