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

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

commit aec61ef1b29caf9d3fed66c08c5b369b8f2f5463
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Fri Aug 6 12:36:49 2021 +0200

    feat(native): Configure Integration runtime depending on Quarkus packaging 
type
---
 pkg/trait/jvm.go     | 18 +++++++++++++++---
 pkg/trait/quarkus.go | 47 ++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 57 insertions(+), 8 deletions(-)

diff --git a/pkg/trait/jvm.go b/pkg/trait/jvm.go
index 5cefaae..8d9e3d3 100644
--- a/pkg/trait/jvm.go
+++ b/pkg/trait/jvm.go
@@ -37,7 +37,6 @@ import (
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
        "github.com/apache/camel-k/pkg/builder"
        "github.com/apache/camel-k/pkg/util"
-       "github.com/apache/camel-k/pkg/util/defaults"
 )
 
 // The JVM trait is used to configure the JVM that runs the integration.
@@ -72,6 +71,12 @@ func (t *jvmTrait) Configure(e *Environment) (bool, error) {
                return false, nil
        }
 
+       if t := e.Catalog.GetTrait(quarkusTraitId); t != nil && 
t.(*quarkusTrait).isNativePackageType() {
+               if quarkus := t.(*quarkusTrait); IsNilOrTrue(quarkus.Enabled) 
&& quarkus.isNativePackageType() {
+                       return false, nil
+               }
+       }
+
        return e.InPhase(v1.IntegrationKitPhaseReady, 
v1.IntegrationPhaseDeploying) ||
                e.InPhase(v1.IntegrationKitPhaseReady, 
v1.IntegrationPhaseRunning), nil
 }
@@ -185,8 +190,15 @@ func (t *jvmTrait) Apply(e *Environment) error {
        args = append(args, "-cp", strings.Join(items, ":"))
        args = append(args, e.CamelCatalog.Runtime.ApplicationClass)
 
-       container.Command = []string{"./camel-k-integration-" + 
defaults.Version + "-runner"}
-       container.WorkingDir = builder.DeploymentDir
+       if IsNilOrTrue(t.PrintCommand) {
+               args = append([]string{"exec", "java"}, args...)
+               container.Command = []string{"/bin/sh", "-c"}
+               cmd := strings.Join(args, " ")
+               container.Args = []string{"echo " + cmd + " && " + cmd}
+       } else {
+               container.Command = []string{"java"}
+               container.Args = args
+       }
 
        return nil
 }
diff --git a/pkg/trait/quarkus.go b/pkg/trait/quarkus.go
index 5c62f04..cec04cf 100644
--- a/pkg/trait/quarkus.go
+++ b/pkg/trait/quarkus.go
@@ -18,31 +18,64 @@ limitations under the License.
 package trait
 
 import (
+       "fmt"
+
+       v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
        "github.com/apache/camel-k/pkg/builder"
+       "github.com/apache/camel-k/pkg/util/defaults"
 )
 
-// The Quarkus trait activates the Quarkus runtime.
+type quarkusPackageType string
+
+const (
+       quarkusTraitId = "quarkus"
+
+       fastJarPackageType quarkusPackageType = "fast-jar"
+       nativePackageType  quarkusPackageType = "native"
+)
+
+// The Quarkus trait configures the Quarkus runtime.
 //
 // It's enabled by default.
 //
 // +camel-k:trait=quarkus
 type quarkusTrait struct {
        BaseTrait `property:",squash"`
-       // The Quarkus runtime type (reserved for future use)
-       Native bool `property:"native" json:"native,omitempty"`
+       // The Quarkus package type, either `fast-jar` or `native` (default 
`fast-jar`)
+       PackageType *quarkusPackageType `property:"package-type" 
json:"packageType,omitempty"`
 }
 
 func newQuarkusTrait() Trait {
        return &quarkusTrait{
-               BaseTrait: NewBaseTrait("quarkus", 700),
+               BaseTrait: NewBaseTrait(quarkusTraitId, 1700),
        }
 }
 
 func (t *quarkusTrait) Configure(e *Environment) (bool, error) {
-       return IsNilOrTrue(t.Enabled), nil
+       if IsFalse(t.Enabled) {
+               return false, nil
+       }
+
+       if t.PackageType == nil {
+               packageType := fastJarPackageType
+               t.PackageType = &packageType
+       }
+
+       return e.InPhase(v1.IntegrationKitPhaseReady, 
v1.IntegrationPhaseDeploying) ||
+               e.InPhase(v1.IntegrationKitPhaseReady, 
v1.IntegrationPhaseRunning), nil
 }
 
 func (t *quarkusTrait) Apply(e *Environment) error {
+       if t.isNativePackageType() {
+               container := e.getIntegrationContainer()
+               if container == nil {
+                       return fmt.Errorf("unable to find integration 
container: %s", e.Integration.Name)
+               }
+
+               container.Command = []string{"./camel-k-integration-" + 
defaults.Version + "-runner"}
+               container.WorkingDir = builder.DeploymentDir
+       }
+
        return nil
 }
 
@@ -59,3 +92,7 @@ func (t *quarkusTrait) InfluencesKit() bool {
 func (t *quarkusTrait) addBuildSteps(steps *[]builder.Step) {
        *steps = append(*steps, builder.QuarkusSteps...)
 }
+
+func (t *quarkusTrait) isNativePackageType() bool {
+       return t.PackageType != nil && *t.PackageType == nativePackageType
+}

Reply via email to