You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2020/11/17 10:46:35 UTC

[camel-k] 01/12: Add local run command.

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

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 5e827721eb9e166fa92c511988549f7a43e3e955
Author: Doru Bercea <gh...@ibm.com>
AuthorDate: Tue Nov 3 10:29:00 2020 -0500

    Add local run command.
---
 pkg/cmd/inspect.go   |   2 +-
 pkg/cmd/local_run.go | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++
 pkg/cmd/root.go      |   1 +
 3 files changed, 133 insertions(+), 1 deletion(-)

diff --git a/pkg/cmd/inspect.go b/pkg/cmd/inspect.go
index 1c2cbf4..02eed21 100644
--- a/pkg/cmd/inspect.go
+++ b/pkg/cmd/inspect.go
@@ -18,7 +18,6 @@ limitations under the License.
 package cmd
 
 import (
-	"errors"
 	"fmt"
 	"io/ioutil"
 	"os"
@@ -32,6 +31,7 @@ import (
 	"github.com/apache/camel-k/pkg/util/camel"
 	"github.com/apache/camel-k/pkg/util/defaults"
 	"github.com/apache/camel-k/pkg/util/maven"
+	"github.com/pkg/errors"
 	"github.com/scylladb/go-set/strset"
 	"github.com/spf13/cobra"
 )
diff --git a/pkg/cmd/local_run.go b/pkg/cmd/local_run.go
new file mode 100644
index 0000000..70af154
--- /dev/null
+++ b/pkg/cmd/local_run.go
@@ -0,0 +1,131 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package cmd
+
+import (
+	"errors"
+	"fmt"
+	"path"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/trait"
+	"github.com/apache/camel-k/pkg/util"
+	"github.com/apache/camel-k/pkg/util/camel"
+	"github.com/scylladb/go-set/strset"
+	"github.com/spf13/cobra"
+)
+
+func newCmdLocalRun(rootCmdOptions *RootCmdOptions) (*cobra.Command, *localRunCmdOptions) {
+	options := localRunCmdOptions{
+		RootCmdOptions: rootCmdOptions,
+	}
+
+	cmd := cobra.Command{
+		Use:     "local-run [files to inspect]",
+		Short:   "Run a Camel integration locally.",
+		Long:    `Run a Camel integration locally using existing integration files.`,
+		PreRunE: decode(&options),
+		RunE: func(_ *cobra.Command, args []string) error {
+			if err := options.validate(args); err != nil {
+				return err
+			}
+			if err := options.run(args); err != nil {
+				fmt.Println(err.Error())
+			}
+
+			return nil
+		},
+		Annotations: map[string]string{
+			offlineCommandLabel: "true",
+		},
+	}
+
+	cmd.Flags().StringP("properties", "p", "", "Output format. One of: json|yaml")
+
+	return &cmd, &options
+}
+
+type localRunCmdOptions struct {
+	*RootCmdOptions
+	Properties string `mapstructure:"properties"`
+}
+
+func (command *localRunCmdOptions) validate(args []string) error {
+	// If no source files have been provided there is nothing to inspect.
+	if len(args) == 0 {
+		return errors.New("no integration files have been provided, nothing to inspect")
+	}
+
+	// Ensure source files exist.
+	for _, arg := range args {
+		// fmt.Printf("Validating file: %v\n", arg)
+		fileExists, err := util.FileExists(arg)
+
+		// Report any error.
+		if err != nil {
+			return err
+		}
+
+		// Signal file not found.
+		if !fileExists {
+			return errors.New("input file " + arg + " file does not exist")
+		}
+	}
+
+	return nil
+}
+
+func (command *localRunCmdOptions) run(args []string) error {
+	// Attempt to reuse existing Camel catalog if one is present.
+	catalog, err := camel.MainCatalog()
+	if err != nil {
+		return err
+	}
+
+	// Generate catalog if one was not found.
+	if catalog == nil {
+		catalog, err = generateCatalog()
+		if err != nil {
+			return err
+		}
+	}
+
+	// List of top-level dependencies.
+	dependencies := strset.New()
+
+	// Invoke the dependency inspector code for each source file.
+	for _, source := range args {
+		data, _, err := loadContent(source, false, false)
+		if err != nil {
+			return err
+		}
+
+		sourceSpec := v1.SourceSpec{
+			DataSpec: v1.DataSpec{
+				Name:        path.Base(source),
+				Content:     data,
+				Compression: false,
+			},
+		}
+
+		// Extract list of top-level dependencies.
+		dependencies.Merge(trait.AddSourceDependencies(sourceSpec, catalog))
+	}
+
+	return nil
+}
diff --git a/pkg/cmd/root.go b/pkg/cmd/root.go
index 2899a30..eba43c2 100644
--- a/pkg/cmd/root.go
+++ b/pkg/cmd/root.go
@@ -139,6 +139,7 @@ func addKamelSubcommands(cmd *cobra.Command, options *RootCmdOptions) {
 	cmd.AddCommand(cmdOnly(newCmdInit(options)))
 	cmd.AddCommand(cmdOnly(newCmdDebug(options)))
 	cmd.AddCommand(cmdOnly(newCmdInspect(options)))
+	cmd.AddCommand(cmdOnly(newCmdLocalRun(options)))
 }
 
 func addHelpSubCommands(cmd *cobra.Command, options *RootCmdOptions) error {