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

[camel-k] 01/03: Include camel-k-runtime version in camel-catalog #959

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

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

commit 59bebae1d9f9d2414979a2c18f9e8ab581c42977
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Tue Oct 8 16:27:44 2019 +0200

    Include camel-k-runtime version in camel-catalog #959
---
 assets/json-schema/CamelCatalog.json             |   4 +
 assets/json-schema/IntegrationKit.json           |   2 +-
 build/maven/pom-catalog.xml                      |   8 +-
 deploy/crd-camel-catalog.yaml                    |   8 +-
 deploy/resources.go                              |   8 +-
 go.mod                                           |   2 +
 pkg/apis/camel/v1alpha1/camelcatalog_types.go    |   5 +-
 pkg/builder/builder.go                           |   2 +-
 pkg/builder/builder_steps.go                     |   4 +-
 pkg/builder/builder_steps_test.go                |  35 +++---
 pkg/builder/builder_test.go                      |   3 +-
 pkg/builder/builder_utils.go                     |   4 +-
 pkg/builder/builder_utils_test.go                |   5 +-
 pkg/controller/integrationplatform/initialize.go |   2 +-
 pkg/trait/camel.go                               |  31 +++--
 pkg/trait/camel_test.go                          |   2 +-
 pkg/util/camel/camel.go                          |  42 -------
 pkg/util/camel/camel_runtime.go                  |  30 ++---
 pkg/util/camel/camel_types.go                    |  58 +++++++++
 pkg/util/camel/camel_util.go                     |  90 +++++++-------
 pkg/util/camel/camel_util_test.go                | 147 +++++++++++++++++------
 pkg/util/defaults/defaults.go                    |  10 +-
 pkg/util/test/catalog.go                         |   2 +-
 pkg/util/test/catalog_test.go                    |   4 +-
 script/Makefile                                  |  11 +-
 script/build_catalog.sh                          |   1 -
 26 files changed, 319 insertions(+), 201 deletions(-)

diff --git a/assets/json-schema/CamelCatalog.json b/assets/json-schema/CamelCatalog.json
index 1266aa1..b8e37a6 100644
--- a/assets/json-schema/CamelCatalog.json
+++ b/assets/json-schema/CamelCatalog.json
@@ -159,6 +159,7 @@
     "CamelCatalogSpec": {
       "required": [
         "version",
+        "runtimeVersion",
         "artifacts"
       ],
       "properties": {
@@ -171,6 +172,9 @@
           },
           "type": "object"
         },
+        "runtimeVersion": {
+          "type": "string"
+        },
         "version": {
           "type": "string"
         }
diff --git a/assets/json-schema/IntegrationKit.json b/assets/json-schema/IntegrationKit.json
index 94c94f1..0815ea8 100644
--- a/assets/json-schema/IntegrationKit.json
+++ b/assets/json-schema/IntegrationKit.json
@@ -441,4 +441,4 @@
       "type": "object"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/build/maven/pom-catalog.xml b/build/maven/pom-catalog.xml
index db52c6d..acef746 100644
--- a/build/maven/pom-catalog.xml
+++ b/build/maven/pom-catalog.xml
@@ -46,7 +46,7 @@
                     <dependency>
                         <groupId>org.apache.camel</groupId>
                         <artifactId>camel-catalog</artifactId>
-                        <version>${catalog.version}</version>
+                        <version>${camel.version}</version>
                     </dependency>
                 </dependencies>
             </plugin>
@@ -56,7 +56,6 @@
     <repositories>
         <repository>
             <id>apache.snapshots</id>
-            <name>Apache Development Snapshot Repository</name>
             <url>https://repository.apache.org/content/repositories/snapshots/</url>
             <releases>
                 <enabled>false</enabled>
@@ -80,7 +79,6 @@
     <pluginRepositories>
         <pluginRepository>
             <id>apache.snapshots</id>
-            <name>Apache Development Snapshot Repository</name>
             <url>https://repository.apache.org/content/repositories/snapshots/</url>
             <releases>
                 <enabled>false</enabled>
@@ -101,4 +99,8 @@
         </pluginRepository>
     </pluginRepositories>
 
+
+
+
+
 </project>
diff --git a/deploy/crd-camel-catalog.yaml b/deploy/crd-camel-catalog.yaml
index 858bd0f..b57a08f 100644
--- a/deploy/crd-camel-catalog.yaml
+++ b/deploy/crd-camel-catalog.yaml
@@ -35,8 +35,12 @@ spec:
   subresources:
     status: {}
   additionalPrinterColumns:
-    - name: Version
+    - name: Camel Version
       type: string
-      description: The Catalog version
+      description: The Camel version
       JSONPath: .spec.version
+    - name: Runtime Version
+      type: string
+      description: The Camel K Runtime version
+      JSONPath: .spec.runtimeVersion
 
diff --git a/deploy/resources.go b/deploy/resources.go
index 2a59ae0..5b7c171 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -2531,10 +2531,14 @@ spec:
   subresources:
     status: {}
   additionalPrinterColumns:
-    - name: Version
+    - name: Camel Version
       type: string
-      description: The Catalog version
+      description: The Camel version
       JSONPath: .spec.version
+    - name: Runtime Version
+      type: string
+      description: The Camel K Runtime version
+      JSONPath: .spec.runtimeVersion
 
 
 `
diff --git a/go.mod b/go.mod
index bedbd73..583473d 100644
--- a/go.mod
+++ b/go.mod
@@ -51,3 +51,5 @@ replace (
 )
 
 replace git.apache.org/thrift.git => github.com/apache/thrift v0.0.0-20180902110319-2566ecd5d999
+
+go 1.13
diff --git a/pkg/apis/camel/v1alpha1/camelcatalog_types.go b/pkg/apis/camel/v1alpha1/camelcatalog_types.go
index e91210d..d778fb5 100644
--- a/pkg/apis/camel/v1alpha1/camelcatalog_types.go
+++ b/pkg/apis/camel/v1alpha1/camelcatalog_types.go
@@ -53,8 +53,9 @@ type CamelArtifact struct {
 
 // CamelCatalogSpec defines the desired state of CamelCatalog
 type CamelCatalogSpec struct {
-	Version   string                   `json:"version" yaml:"version"`
-	Artifacts map[string]CamelArtifact `json:"artifacts" yaml:"artifacts"`
+	Version        string                   `json:"version" yaml:"version"`
+	RuntimeVersion string                   `json:"runtimeVersion" yaml:"runtimeVersion"`
+	Artifacts      map[string]CamelArtifact `json:"artifacts" yaml:"artifacts"`
 }
 
 // CamelCatalogStatus defines the observed state of CamelCatalog
diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go
index 7327d97..872c3df 100644
--- a/pkg/builder/builder.go
+++ b/pkg/builder/builder.go
@@ -71,7 +71,7 @@ func (b *defaultBuilder) Build(build v1alpha1.BuildSpec) v1alpha1.BuildStatus {
 
 	defer os.RemoveAll(builderPath)
 
-	catalog, err := camel.Catalog(b.ctx, b.client, build.Meta.Namespace, build.CamelVersion)
+	catalog, err := camel.LoadCatalog(b.ctx, b.client, build.Meta.Namespace, build.CamelVersion, build.RuntimeVersion)
 	if err != nil {
 		log.Error(err, "Error while loading Camel catalog")
 
diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go
index 81cd13a..cb886f0 100644
--- a/pkg/builder/builder_steps.go
+++ b/pkg/builder/builder_steps.go
@@ -248,7 +248,7 @@ func computeDependencies(ctx *Context) error {
 	mc.SettingsContent = ctx.Maven.SettingsData
 	mc.LocalRepository = ctx.Build.Platform.Build.LocalRepository
 	mc.Timeout = ctx.Build.Platform.Build.Maven.Timeout.Duration
-	mc.AddArgumentf("org.apache.camel.k:camel-k-maven-plugin:%s:generate-dependency-list", ctx.Build.RuntimeVersion)
+	mc.AddArgumentf("org.apache.camel.k:camel-k-maven-plugin:%s:generate-dependency-list", ctx.Catalog.RuntimeVersion)
 
 	if err := maven.Run(mc); err != nil {
 		return errors.Wrap(err, "failure while determining classpath")
@@ -390,7 +390,7 @@ func listPublishedImages(context *Context) ([]publishedImage, error) {
 		if kit.Status.CamelVersion != context.Catalog.Version {
 			continue
 		}
-		if kit.Status.RuntimeVersion != context.Build.RuntimeVersion {
+		if kit.Status.RuntimeVersion != context.Catalog.RuntimeVersion {
 			continue
 		}
 		if kit.Status.Phase != v1alpha1.IntegrationKitPhaseReady || kit.Labels == nil {
diff --git a/pkg/builder/builder_steps_test.go b/pkg/builder/builder_steps_test.go
index 3210dfa..e7da61a 100644
--- a/pkg/builder/builder_steps_test.go
+++ b/pkg/builder/builder_steps_test.go
@@ -25,7 +25,6 @@ import (
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/apache/camel-k/pkg/util/cancellable"
-	"github.com/apache/camel-k/pkg/util/defaults"
 	"github.com/apache/camel-k/pkg/util/maven"
 	"github.com/apache/camel-k/pkg/util/test"
 
@@ -58,7 +57,7 @@ func TestGenerateJvmProject(t *testing.T) {
 	ctx := Context{
 		Catalog: catalog,
 		Build: v1alpha1.BuildSpec{
-			RuntimeVersion: defaults.RuntimeVersion,
+			RuntimeVersion: catalog.RuntimeVersion,
 			Platform: v1alpha1.IntegrationPlatformSpec{
 				Build: v1alpha1.IntegrationPlatformBuildSpec{
 					CamelVersion: catalog.Version,
@@ -89,7 +88,7 @@ func TestGenerateJvmProject(t *testing.T) {
 			{
 				GroupID:    "org.apache.camel.k",
 				ArtifactID: "camel-k-runtime-bom",
-				Version:    defaults.RuntimeVersion,
+				Version:    catalog.RuntimeVersion,
 				Type:       "pom",
 				Scope:      "import",
 			},
@@ -147,7 +146,7 @@ func TestMavenSettingsFromConfigMap(t *testing.T) {
 		Client:    c,
 		Namespace: "ns",
 		Build: v1alpha1.BuildSpec{
-			RuntimeVersion: defaults.RuntimeVersion,
+			RuntimeVersion: catalog.RuntimeVersion,
 			Platform: v1alpha1.IntegrationPlatformSpec{
 				Build: v1alpha1.IntegrationPlatformBuildSpec{
 					CamelVersion: catalog.Version,
@@ -199,7 +198,7 @@ func TestMavenSettingsFromSecret(t *testing.T) {
 		Client:    c,
 		Namespace: "ns",
 		Build: v1alpha1.BuildSpec{
-			RuntimeVersion: defaults.RuntimeVersion,
+			RuntimeVersion: catalog.RuntimeVersion,
 			Platform: v1alpha1.IntegrationPlatformSpec{
 				Build: v1alpha1.IntegrationPlatformBuildSpec{
 					CamelVersion: catalog.Version,
@@ -231,7 +230,7 @@ func TestGenerateGroovyProject(t *testing.T) {
 	ctx := Context{
 		Catalog: catalog,
 		Build: v1alpha1.BuildSpec{
-			RuntimeVersion: defaults.RuntimeVersion,
+			RuntimeVersion: catalog.RuntimeVersion,
 			Platform: v1alpha1.IntegrationPlatformSpec{
 				Build: v1alpha1.IntegrationPlatformBuildSpec{
 					CamelVersion: catalog.Version,
@@ -263,7 +262,7 @@ func TestGenerateGroovyProject(t *testing.T) {
 			{
 				GroupID:    "org.apache.camel.k",
 				ArtifactID: "camel-k-runtime-bom",
-				Version:    defaults.RuntimeVersion,
+				Version:    catalog.RuntimeVersion,
 				Type:       "pom",
 				Scope:      "import",
 			},
@@ -292,15 +291,15 @@ func TestGenerateGroovyProject(t *testing.T) {
 			},
 			{
 				GroupID:    "org.apache.camel",
-				ArtifactID: "camel-properties",
+				ArtifactID: "camel-groovy",
 			},
 			{
 				GroupID:    "org.apache.camel",
-				ArtifactID: "camel-endpointdsl",
+				ArtifactID: "camel-properties",
 			},
 			{
 				GroupID:    "org.apache.camel",
-				ArtifactID: "camel-groovy",
+				ArtifactID: "camel-endpointdsl",
 			},
 		},
 	)
@@ -313,7 +312,7 @@ func TestSanitizeDependencies(t *testing.T) {
 	ctx := Context{
 		Catalog: catalog,
 		Build: v1alpha1.BuildSpec{
-			RuntimeVersion: defaults.RuntimeVersion,
+			RuntimeVersion: catalog.RuntimeVersion,
 			Platform: v1alpha1.IntegrationPlatformSpec{
 				Build: v1alpha1.IntegrationPlatformBuildSpec{
 					CamelVersion: catalog.Version,
@@ -372,9 +371,10 @@ func TestListPublishedImages(t *testing.T) {
 				},
 			},
 			Status: v1alpha1.IntegrationKitStatus{
-				Phase:        v1alpha1.IntegrationKitPhaseError,
-				Image:        "image-1",
-				CamelVersion: catalog.Version,
+				Phase:          v1alpha1.IntegrationKitPhaseError,
+				Image:          "image-1",
+				CamelVersion:   catalog.Version,
+				RuntimeVersion: catalog.RuntimeVersion,
 			},
 		},
 		&v1alpha1.IntegrationKit{
@@ -390,9 +390,10 @@ func TestListPublishedImages(t *testing.T) {
 				},
 			},
 			Status: v1alpha1.IntegrationKitStatus{
-				Phase:        v1alpha1.IntegrationKitPhaseReady,
-				Image:        "image-2",
-				CamelVersion: catalog.Version,
+				Phase:          v1alpha1.IntegrationKitPhaseReady,
+				Image:          "image-2",
+				CamelVersion:   catalog.Version,
+				RuntimeVersion: catalog.RuntimeVersion,
 			},
 		},
 	)
diff --git a/pkg/builder/builder_test.go b/pkg/builder/builder_test.go
index 97ce186..ca899ae 100644
--- a/pkg/builder/builder_test.go
+++ b/pkg/builder/builder_test.go
@@ -22,7 +22,6 @@ import (
 	"testing"
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
-	"github.com/apache/camel-k/pkg/util/defaults"
 	"github.com/apache/camel-k/pkg/util/test"
 
 	"github.com/stretchr/testify/assert"
@@ -58,7 +57,7 @@ func TestFailure(t *testing.T) {
 			steps.Step1,
 			steps.Step2,
 		),
-		RuntimeVersion: defaults.RuntimeVersion,
+		RuntimeVersion: catalog.RuntimeVersion,
 		Platform: v1alpha1.IntegrationPlatformSpec{
 			Build: v1alpha1.IntegrationPlatformBuildSpec{
 				CamelVersion: catalog.Version,
diff --git a/pkg/builder/builder_utils.go b/pkg/builder/builder_utils.go
index 6d236a4..e6516dd 100644
--- a/pkg/builder/builder_utils.go
+++ b/pkg/builder/builder_utils.go
@@ -51,7 +51,7 @@ func NewMavenProject(ctx *Context) (maven.Project, error) {
 	// Catalog
 	//
 	if ctx.Catalog == nil {
-		c, err := camel.Catalog(ctx.C, ctx.Client, ctx.Namespace, ctx.Build.Platform.Build.CamelVersion)
+		c, err := camel.LoadCatalog(ctx.C, ctx.Client, ctx.Namespace, ctx.Build.Platform.Build.CamelVersion, ctx.Build.Platform.Build.RuntimeVersion)
 		if err != nil {
 			return maven.Project{}, err
 		}
@@ -77,7 +77,7 @@ func NewMavenProject(ctx *Context) (maven.Project, error) {
 	p.DependencyManagement.Dependencies = append(p.DependencyManagement.Dependencies, maven.Dependency{
 		GroupID:    "org.apache.camel.k",
 		ArtifactID: "camel-k-runtime-bom",
-		Version:    ctx.Build.RuntimeVersion,
+		Version:    ctx.Catalog.RuntimeVersion,
 		Type:       "pom",
 		Scope:      "import",
 	})
diff --git a/pkg/builder/builder_utils_test.go b/pkg/builder/builder_utils_test.go
index 0fc39d1..951d035 100644
--- a/pkg/builder/builder_utils_test.go
+++ b/pkg/builder/builder_utils_test.go
@@ -21,7 +21,6 @@ import (
 	"testing"
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
-	"github.com/apache/camel-k/pkg/util/defaults"
 	"github.com/apache/camel-k/pkg/util/maven"
 	"github.com/apache/camel-k/pkg/util/test"
 
@@ -35,7 +34,7 @@ func TestNewProject(t *testing.T) {
 	ctx := Context{
 		Catalog: catalog,
 		Build: v1alpha1.BuildSpec{
-			RuntimeVersion: defaults.RuntimeVersion,
+			RuntimeVersion: catalog.RuntimeVersion,
 			Platform: v1alpha1.IntegrationPlatformSpec{
 				Build: v1alpha1.IntegrationPlatformBuildSpec{
 					CamelVersion: catalog.Version,
@@ -65,7 +64,7 @@ func TestNewProject(t *testing.T) {
 			{
 				GroupID:    "org.apache.camel.k",
 				ArtifactID: "camel-k-runtime-bom",
-				Version:    defaults.RuntimeVersion,
+				Version:    catalog.RuntimeVersion,
 				Type:       "pom",
 				Scope:      "import",
 			},
diff --git a/pkg/controller/integrationplatform/initialize.go b/pkg/controller/integrationplatform/initialize.go
index c76c5a2..a2e4178 100644
--- a/pkg/controller/integrationplatform/initialize.go
+++ b/pkg/controller/integrationplatform/initialize.go
@@ -181,7 +181,7 @@ func (action *initializeAction) setDefaults(ctx context.Context, platform *v1alp
 		platform.Spec.Build.CamelVersion = defaults.CamelVersionConstraint
 	}
 	if platform.Spec.Build.RuntimeVersion == "" {
-		platform.Spec.Build.RuntimeVersion = defaults.RuntimeVersion
+		platform.Spec.Build.RuntimeVersion = defaults.RuntimeVersionConstraint
 	}
 	if platform.Spec.Build.BaseImage == "" {
 		platform.Spec.Build.BaseImage = defaults.BaseImage
diff --git a/pkg/trait/camel.go b/pkg/trait/camel.go
index 7cfbc9d..b776d9c 100644
--- a/pkg/trait/camel.go
+++ b/pkg/trait/camel.go
@@ -73,31 +73,38 @@ func (t *camelTrait) Apply(e *Environment) error {
 	}
 
 	if e.CamelCatalog == nil {
-		c, err := camel.Catalog(e.C, e.Client, ns, cv)
+		c, err := camel.LoadCatalog(e.C, e.Client, ns, cv, rv)
 		if err != nil {
 			return err
 		}
 		if c == nil {
-			// if the catalog is not found in the cluster, try to create it if the
-			// required version is not set using semver constraints
-			matched, err := regexp.MatchString(`^(\d+)\.(\d+)\.([\w-\.]+)$`, cv)
+			// if the catalog is not found in the cluster, try to create it if
+			// the required versions (camel and runtime) are not expressed as
+			// semver constraints
+			cvHasFixedVersion, err := regexp.MatchString(`^(\d+)\.(\d+)\.([\w-\.]+)$`, cv)
 			if err != nil {
 				return err
 			}
-			if matched {
-				c, err = t.GenerateCatalog(e, cv)
+			rvHasFixedVersion, err := regexp.MatchString(`^(\d+)\.(\d+)\.([\w-\.]+)$`, rv)
+			if err != nil {
+				return err
+			}
+
+			if cvHasFixedVersion && rvHasFixedVersion {
+				c, err = t.GenerateCatalog(e, cv, rv)
 				if err != nil {
 					return err
 				}
 
 				// sanitize catalog name
-				catalogName := "camel-catalog-" + strings.ToLower(cv)
+				catalogName := "camel-catalog-" + strings.ToLower(cv+"-"+rv)
 
 				cx := v1alpha1.NewCamelCatalogWithSpecs(ns, catalogName, c.CamelCatalogSpec)
 				cx.Labels = make(map[string]string)
 				cx.Labels["app"] = "camel-k"
 				cx.Labels["camel.apache.org/catalog.version"] = cv
 				cx.Labels["camel.apache.org/catalog.loader.version"] = cv
+				cx.Labels["camel.apache.org/runtime.version"] = rv
 				cx.Labels["camel.apache.org/catalog.generated"] = True
 
 				err = e.Client.Create(e.C, &cx)
@@ -129,7 +136,7 @@ func (t *camelTrait) Apply(e *Environment) error {
 }
 
 // GenerateCatalog --
-func (t *camelTrait) GenerateCatalog(e *Environment, version string) (*camel.RuntimeCatalog, error) {
+func (t *camelTrait) GenerateCatalog(e *Environment, camelVersion string, runtimeVersion string) (*camel.RuntimeCatalog, error) {
 	root := os.TempDir()
 	tmpDir, err := ioutil.TempDir(root, "camel-catalog")
 	if err != nil {
@@ -142,7 +149,7 @@ func (t *camelTrait) GenerateCatalog(e *Environment, version string) (*camel.Run
 		return nil, err
 	}
 
-	project, err := t.GenerateMavenProject(version)
+	project, err := t.GenerateMavenProject(camelVersion, runtimeVersion)
 	if err != nil {
 		return nil, err
 	}
@@ -185,7 +192,7 @@ func (t *camelTrait) GenerateCatalog(e *Environment, version string) (*camel.Run
 }
 
 // GenerateCatalogMavenProject --
-func (t *camelTrait) GenerateMavenProject(version string) (maven.Project, error) {
+func (t *camelTrait) GenerateMavenProject(camelVersion string, runtimeVersion string) (maven.Project, error) {
 	p := maven.NewProjectWithGAV("org.apache.camel.k.integration", "camel-k-catalog-generator", defaults.Version)
 	p.Build = &maven.Build{
 		DefaultGoal: "generate-resources",
@@ -193,7 +200,7 @@ func (t *camelTrait) GenerateMavenProject(version string) (maven.Project, error)
 			{
 				GroupID:    "org.apache.camel.k",
 				ArtifactID: "camel-k-maven-plugin",
-				Version:    defaults.RuntimeVersion,
+				Version:    runtimeVersion,
 				Executions: []maven.Execution{
 					{
 						ID: "generate-catalog",
@@ -206,7 +213,7 @@ func (t *camelTrait) GenerateMavenProject(version string) (maven.Project, error)
 					{
 						GroupID:    "org.apache.camel",
 						ArtifactID: "camel-catalog",
-						Version:    version,
+						Version:    camelVersion,
 					},
 				},
 			},
diff --git a/pkg/trait/camel_test.go b/pkg/trait/camel_test.go
index ea2483a..08d5af3 100644
--- a/pkg/trait/camel_test.go
+++ b/pkg/trait/camel_test.go
@@ -72,7 +72,7 @@ func TestApplyCamelTraitWithoutEnvironmentCatalogAndUnmatchableVersionFails(t *t
 func TestCamelTraitGenerateMavenProjectSucceeds(t *testing.T) {
 	trait, _ := createNominalCamelTest()
 
-	mvnProject, err := trait.GenerateMavenProject("1.23.0")
+	mvnProject, err := trait.GenerateMavenProject("1.23.0", "1.0.0")
 	assert.Nil(t, err)
 	assert.NotNil(t, mvnProject)
 	assert.Equal(t, "org.apache.camel.k.integration", mvnProject.GroupID)
diff --git a/pkg/util/camel/camel.go b/pkg/util/camel/camel.go
deleted file mode 100644
index 65ad6f5..0000000
--- a/pkg/util/camel/camel.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-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 camel
-
-import (
-	"context"
-	"fmt"
-
-	"github.com/apache/camel-k/pkg/client"
-)
-
-// R --
-var R Runtime
-
-func init() {
-	R = NewRuntime()
-}
-
-// Catalog --
-func Catalog(ctx context.Context, client client.Client, namespace string, version string) (*RuntimeCatalog, error) {
-	c, err := R.LoadCatalog(ctx, client, namespace, version)
-	if c == nil && err != nil {
-		return nil, fmt.Errorf("unable to find catalog matching version requirement: %s", version)
-	}
-
-	return c, err
-}
diff --git a/pkg/util/camel/camel_runtime.go b/pkg/util/camel/camel_runtime.go
index fed3a0a..178b432 100644
--- a/pkg/util/camel/camel_runtime.go
+++ b/pkg/util/camel/camel_runtime.go
@@ -19,7 +19,7 @@ package camel
 
 import (
 	"context"
-	"sync"
+	"fmt"
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/apache/camel-k/pkg/client"
@@ -27,28 +27,8 @@ import (
 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 )
 
-// NewRuntime --
-func NewRuntime() Runtime {
-	return Runtime{
-		catalogs: make(map[string]RuntimeCatalog),
-	}
-}
-
-// Runtime --
-type Runtime struct {
-	catalogs map[string]RuntimeCatalog
-	lock     sync.Mutex
-}
-
 // LoadCatalog --
-func (r *Runtime) LoadCatalog(ctx context.Context, client client.Client, namespace string, version string) (*RuntimeCatalog, error) {
-	r.lock.Lock()
-	defer r.lock.Unlock()
-
-	if c, ok := r.catalogs[version]; ok {
-		return &c, nil
-	}
-
+func LoadCatalog(ctx context.Context, client client.Client, namespace string, camelVersion string, runtimeVersion string) (*RuntimeCatalog, error) {
 	var catalog *RuntimeCatalog
 	var err error
 
@@ -58,10 +38,14 @@ func (r *Runtime) LoadCatalog(ctx context.Context, client client.Client, namespa
 		return nil, err
 	}
 
-	catalog, err = FindBestMatch(version, list.Items)
+	catalog, err = FindBestMatch(list.Items, camelVersion, runtimeVersion)
 	if err != nil {
 		return nil, err
 	}
 
+	if catalog == nil && err != nil {
+		return nil, fmt.Errorf("unable to find catalog matching version requirement: camel=%s, runtime=%s", camelVersion, runtimeVersion)
+	}
+
 	return catalog, nil
 }
diff --git a/pkg/util/camel/camel_types.go b/pkg/util/camel/camel_types.go
new file mode 100644
index 0000000..364d162
--- /dev/null
+++ b/pkg/util/camel/camel_types.go
@@ -0,0 +1,58 @@
+/*
+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 camel
+
+import (
+	"github.com/Masterminds/semver"
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+)
+
+// CatalogVersion --
+type CatalogVersion struct {
+	Version        *semver.Version
+	RuntimeVersion *semver.Version
+	Catalog        *v1alpha1.CamelCatalog
+}
+
+// CatalogVersionCollection --
+type CatalogVersionCollection []CatalogVersion
+
+// Len returns the length of a collection. The number of CatalogVersion instances
+// on the slice.
+func (c CatalogVersionCollection) Len() int {
+	return len(c)
+}
+
+// Less is needed for the sort interface to compare two CatalogVersion objects on the
+// slice. If checks if one is less than the other.
+func (c CatalogVersionCollection) Less(i, j int) bool {
+	if c[i].Version.LessThan(c[j].Version) {
+		return true
+	}
+	if c[i].Version.GreaterThan(c[j].Version) {
+		return false
+	}
+
+	return c[i].RuntimeVersion.LessThan(c[j].RuntimeVersion)
+}
+
+// Swap is needed for the sort interface to replace the CatalogVersion objects
+// at two different positions in the slice.
+func (c CatalogVersionCollection) Swap(i, j int) {
+	c[i], c[j] = c[j], c[i]
+}
diff --git a/pkg/util/camel/camel_util.go b/pkg/util/camel/camel_util.go
index a06a5cf..4741222 100644
--- a/pkg/util/camel/camel_util.go
+++ b/pkg/util/camel/camel_util.go
@@ -26,67 +26,73 @@ import (
 )
 
 // FindBestMatch --
-func FindBestMatch(version string, catalogs []v1alpha1.CamelCatalog) (*RuntimeCatalog, error) {
-	constraint, err := semver.NewConstraint(version)
-
-	//
-	// if the version is not a constraint, use exact match
-	//
-	if err != nil || constraint == nil {
-		if err != nil {
-			log.Debug("Unable to parse constraint: %s, error:\n", version, err.Error())
-		}
-		if constraint == nil {
-			log.Debug("Unable to parse constraint: %s\n", version)
+func FindBestMatch(catalogs []v1alpha1.CamelCatalog, camelVersion string, runtimeVersion string) (*RuntimeCatalog, error) {
+	for _, catalog := range catalogs {
+		if catalog.Spec.Version == camelVersion && catalog.Spec.RuntimeVersion == runtimeVersion {
+			return NewRuntimeCatalog(catalog.Spec), nil
 		}
+	}
 
-		return FindExactMatch(version, catalogs)
+	vc := NewSemVerConstraint(camelVersion)
+	rc := NewSemVerConstraint(runtimeVersion)
+	if vc == nil || rc == nil {
+		return nil, nil
 	}
 
-	return FindBestSemVerMatch(constraint, catalogs)
+	cc := NewCatalogVersionCollection(catalogs)
+	for _, x := range cc {
+		if vc.Check(x.Version) && rc.Check(x.RuntimeVersion) {
+			return NewRuntimeCatalog(x.Catalog.Spec), nil
+		}
+	}
+
+	return nil, nil
 }
 
-// FindExactMatch --
-func FindExactMatch(version string, catalogs []v1alpha1.CamelCatalog) (*RuntimeCatalog, error) {
-	for _, catalog := range catalogs {
-		if catalog.Spec.Version == version {
-			return NewRuntimeCatalog(catalog.Spec), nil
+// NewSemVerConstraint --
+func NewSemVerConstraint(versionConstraint string) *semver.Constraints {
+	constraint, err := semver.NewConstraint(versionConstraint)
+	if err != nil || constraint == nil {
+		if err != nil {
+			log.Debug("Unable to parse version constraint: %s, error:\n", versionConstraint, err.Error())
+		}
+		if constraint == nil {
+			log.Debug("Unable to parse version constraint: %s\n", versionConstraint)
 		}
 	}
 
-	return nil, nil
+	return constraint
 }
 
-// FindBestSemVerMatch --
-func FindBestSemVerMatch(constraint *semver.Constraints, catalogs []v1alpha1.CamelCatalog) (*RuntimeCatalog, error) {
-	versions := make([]*semver.Version, 0)
+// NewCatalogVersionCollection --
+func NewCatalogVersionCollection(catalogs []v1alpha1.CamelCatalog) CatalogVersionCollection {
+	versions := make([]CatalogVersion, 0, len(catalogs))
 
-	for _, catalog := range catalogs {
-		v, err := semver.NewVersion(catalog.Spec.Version)
+	for i := range catalogs {
+		cv, err := semver.NewVersion(catalogs[i].Spec.Version)
+		if err != nil {
+			log.Debugf("Invalid semver version (camel) %s", cv)
+			continue
+		}
+
+		rv, err := semver.NewVersion(catalogs[i].Spec.RuntimeVersion)
 		if err != nil {
-			log.Debugf("Invalid semver version %s, skip it", catalog.Spec.Version)
+			log.Debugf("Invalid semver version (runtime) %s", rv)
 			continue
 		}
 
-		versions = append(versions, v)
+		versions = append(versions, CatalogVersion{
+			Version:        cv,
+			RuntimeVersion: rv,
+			Catalog:        &catalogs[i],
+		})
 	}
 
+	answer := CatalogVersionCollection(versions)
+
 	sort.Sort(
-		sort.Reverse(semver.Collection(versions)),
+		sort.Reverse(answer),
 	)
 
-	for _, v := range versions {
-		ver := v
-
-		if constraint.Check(ver) {
-			for _, catalog := range catalogs {
-				if catalog.Spec.Version == ver.Original() {
-					return NewRuntimeCatalog(catalog.Spec), nil
-				}
-			}
-
-		}
-	}
-
-	return nil, nil
+	return answer
 }
diff --git a/pkg/util/camel/camel_util_test.go b/pkg/util/camel/camel_util_test.go
index dc82f23..5dff8ab 100644
--- a/pkg/util/camel/camel_util_test.go
+++ b/pkg/util/camel/camel_util_test.go
@@ -25,72 +25,147 @@ import (
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 )
 
+func TestFindBestMatch_Camel(t *testing.T) {
+	catalogs := []v1alpha1.CamelCatalog{
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
+	}
+
+	c, err := FindBestMatch(catalogs, "~2.23.x", "1.0.0")
+	assert.Nil(t, err)
+	assert.NotNil(t, c)
+	assert.Equal(t, "2.23.1", c.Version)
+}
+
+func TestFindBestMatch_Runtime(t *testing.T) {
+	catalogs := []v1alpha1.CamelCatalog{
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.1"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
+	}
+
+	c, err := FindBestMatch(catalogs, "2.23.0", "~1.0.x")
+	assert.Nil(t, err)
+	assert.NotNil(t, c)
+	assert.Equal(t, "2.23.0", c.Version)
+	assert.Equal(t, "1.0.1", c.RuntimeVersion)
+}
+
 func TestFindBestMatch(t *testing.T) {
 	catalogs := []v1alpha1.CamelCatalog{
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0"},
-		},
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1"},
-		},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.1"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
 	}
 
-	c, err := FindBestMatch("~2.23.x", catalogs)
+	c, err := FindBestMatch(catalogs, "~2.23.x", "~1.0.x")
 	assert.Nil(t, err)
 	assert.NotNil(t, c)
 	assert.Equal(t, "2.23.1", c.Version)
+	assert.Equal(t, "1.0.1", c.RuntimeVersion)
+}
+
+func TestFindExactSemVerMatch_Camel(t *testing.T) {
+	catalogs := []v1alpha1.CamelCatalog{
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
+	}
+
+	c, err := FindBestMatch(catalogs, "2.23.0", "1.0.0")
+	assert.Nil(t, err)
+	assert.NotNil(t, c)
+	assert.Equal(t, "2.23.0", c.Version)
 }
 
-func TestFindExactSemVerMatch(t *testing.T) {
+func TestFindExactSemVerMatch_Runtime(t *testing.T) {
 	catalogs := []v1alpha1.CamelCatalog{
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0"},
-		},
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1"},
-		},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.1"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
 	}
 
-	c, err := FindBestMatch("2.23.0", catalogs)
+	c, err := FindBestMatch(catalogs, "2.23.0", "1.0.0")
 	assert.Nil(t, err)
 	assert.NotNil(t, c)
 	assert.Equal(t, "2.23.0", c.Version)
+	assert.Equal(t, "1.0.0", c.RuntimeVersion)
 }
 
-func TestFindExactMatch(t *testing.T) {
+func TestFindExactMatch_Camel(t *testing.T) {
 	catalogs := []v1alpha1.CamelCatalog{
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1"},
-		},
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1-tag-00001"},
-		},
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1-tag-00002"},
-		},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1-tag-00001", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1-tag-00002", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
 	}
 
-	c, err := FindBestMatch("2.23.1-tag-00001", catalogs)
+	c, err := FindBestMatch(catalogs, "2.23.1-tag-00001", "1.0.0")
 	assert.Nil(t, err)
 	assert.NotNil(t, c)
 	assert.Equal(t, "2.23.1-tag-00001", c.Version)
 }
 
+func TestFindExactMatch_Runtime(t *testing.T) {
+	catalogs := []v1alpha1.CamelCatalog{
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1-tag-00001", RuntimeVersion: "1.0.1"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1-tag-00002", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
+	}
+
+	c, err := FindBestMatch(catalogs, "2.23.1-tag-00001", "1.0.1")
+	assert.Nil(t, err)
+	assert.NotNil(t, c)
+	assert.Equal(t, "2.23.1-tag-00001", c.Version)
+	assert.Equal(t, "1.0.1", c.RuntimeVersion)
+}
+
+func TestFindRangeMatch_Camel(t *testing.T) {
+	catalogs := []v1alpha1.CamelCatalog{
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.2", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
+	}
+
+	c, err := FindBestMatch(catalogs, ">= 2.23.0, < 2.23.2", "1.0.0")
+	assert.Nil(t, err)
+	assert.NotNil(t, c)
+	assert.Equal(t, "2.23.1", c.Version)
+}
+
+func TestFindRangeMatch_Runtime(t *testing.T) {
+	catalogs := []v1alpha1.CamelCatalog{
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.2", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.2"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
+	}
+
+	c, err := FindBestMatch(catalogs, "2.23.0", "> 1.0.1, < 1.0.3")
+	assert.Nil(t, err)
+	assert.NotNil(t, c)
+	assert.Equal(t, "2.23.0", c.Version)
+	assert.Equal(t, "1.0.2", c.RuntimeVersion)
+}
+
 func TestFindRangeMatch(t *testing.T) {
 	catalogs := []v1alpha1.CamelCatalog{
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0"},
-		},
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1"},
-		},
-		{
-			Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.2"},
-		},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.2", RuntimeVersion: "1.0.0"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.0", RuntimeVersion: "1.0.2"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.23.1", RuntimeVersion: "1.0.2"}},
+		{Spec: v1alpha1.CamelCatalogSpec{Version: "2.22.1", RuntimeVersion: "1.0.0"}},
 	}
 
-	c, err := FindBestMatch(">= 2.23.0, < 2.23.2", catalogs)
+	c, err := FindBestMatch(catalogs, ">= 2.23.0, < 2.23.2", "> 1.0.1, < 1.0.3")
 	assert.Nil(t, err)
 	assert.NotNil(t, c)
 	assert.Equal(t, "2.23.1", c.Version)
+	assert.Equal(t, "1.0.2", c.RuntimeVersion)
 }
diff --git a/pkg/util/defaults/defaults.go b/pkg/util/defaults/defaults.go
index cc780cf..a728332 100644
--- a/pkg/util/defaults/defaults.go
+++ b/pkg/util/defaults/defaults.go
@@ -24,11 +24,17 @@ const (
 	// Version --
 	Version = "1.0.0-M3-SNAPSHOT"
 
+	// DefaultCamelVersion --
+	DefaultCamelVersion = "3.0.0-RC1"
+
 	// CamelVersionConstraint --
 	CamelVersionConstraint = ">=3.0.0-RC1"
 
-	// RuntimeVersion --
-	RuntimeVersion = "1.0.4"
+	// DefaultRuntimeVersion --
+	DefaultRuntimeVersion = "1.0.4"
+
+	// RuntimeVersionConstraint --
+	RuntimeVersionConstraint = ">=1.0.4"
 
 	// KanikoVersion --
 	KanikoVersion = "0.9.0"
diff --git a/pkg/util/test/catalog.go b/pkg/util/test/catalog.go
index 110fe31..b20b9c3 100644
--- a/pkg/util/test/catalog.go
+++ b/pkg/util/test/catalog.go
@@ -43,5 +43,5 @@ func DefaultCatalog() (*camel.RuntimeCatalog, error) {
 		}
 	}
 
-	return camel.FindBestMatch(defaults.CamelVersionConstraint, catalogs)
+	return camel.FindBestMatch(catalogs, defaults.DefaultCamelVersion, defaults.DefaultRuntimeVersion)
 }
diff --git a/pkg/util/test/catalog_test.go b/pkg/util/test/catalog_test.go
index 6cdabc2..a93e1cf 100644
--- a/pkg/util/test/catalog_test.go
+++ b/pkg/util/test/catalog_test.go
@@ -20,6 +20,8 @@ package test
 import (
 	"testing"
 
+	"github.com/apache/camel-k/pkg/util/defaults"
+
 	"github.com/stretchr/testify/assert"
 )
 
@@ -27,7 +29,7 @@ func TestRuntimeContainsEmbeddedArtifacts(t *testing.T) {
 	catalog, err := DefaultCatalog()
 	assert.Nil(t, err)
 
-	assert.Equal(t, "3.0.0-RC1", catalog.Version)
+	assert.Equal(t, defaults.DefaultCamelVersion, catalog.Version)
 
 	artifact := catalog.GetArtifactByScheme("knative")
 	assert.Equal(t, 1, len(artifact.Schemes))
diff --git a/script/Makefile b/script/Makefile
index 14cd358..55c53d9 100644
--- a/script/Makefile
+++ b/script/Makefile
@@ -17,6 +17,7 @@ VERSIONFILE := pkg/util/defaults/defaults.go
 VERSION := 1.0.0-M3-SNAPSHOT
 LAST_RELEASED_VERSION := 1.0.0-M1
 RUNTIME_VERSION := 1.0.4
+RUNTIME_VERSION_CONSTRAINT := >=1.0.4
 CAMEL_VERSION := 3.0.0-RC1
 CAMEL_VERSION_CONSTRAINT := >=3.0.0-RC1
 KANIKO_VERSION := 0.9.0
@@ -76,11 +77,17 @@ codegen:
 	@echo "  // Version -- " >> $(VERSIONFILE)
 	@echo "  Version = \"$(VERSION)\"" >> $(VERSIONFILE)
 	@echo "" >> $(VERSIONFILE)
+	@echo "  // DefaultCamelVersion -- " >> $(VERSIONFILE)
+	@echo "  DefaultCamelVersion = \"$(CAMEL_VERSION)\"" >> $(VERSIONFILE)
+	@echo "" >> $(VERSIONFILE)
 	@echo "  // CamelVersionConstraint -- " >> $(VERSIONFILE)
 	@echo "  CamelVersionConstraint = \"$(CAMEL_VERSION_CONSTRAINT)\"" >> $(VERSIONFILE)
 	@echo "" >> $(VERSIONFILE)
-	@echo "  // RuntimeVersion -- " >> $(VERSIONFILE)
-	@echo "  RuntimeVersion = \"$(RUNTIME_VERSION)\"" >> $(VERSIONFILE)
+	@echo "  // DefaultRuntimeVersion -- " >> $(VERSIONFILE)
+	@echo "  DefaultRuntimeVersion = \"$(RUNTIME_VERSION)\"" >> $(VERSIONFILE)
+	@echo "" >> $(VERSIONFILE)
+	@echo "  // RuntimeVersionConstraint -- " >> $(VERSIONFILE)
+	@echo "  RuntimeVersionConstraint = \"$(RUNTIME_VERSION_CONSTRAINT)\"" >> $(VERSIONFILE)
 	@echo "" >> $(VERSIONFILE)
 	@echo "  // KanikoVersion -- " >> $(VERSIONFILE)
 	@echo "  KanikoVersion = \"$(KANIKO_VERSION)\"" >> $(VERSIONFILE)
diff --git a/script/build_catalog.sh b/script/build_catalog.sh
index 2227888..50d580b 100755
--- a/script/build_catalog.sh
+++ b/script/build_catalog.sh
@@ -26,6 +26,5 @@ fi
 $rootdir/mvnw -q \
     -f ${rootdir}/build/maven/pom-catalog.xml \
     -Dcatalog.path=${rootdir}/deploy \
-    -Dcatalog.version=$1 \
     -Dcamel.version=$1 \
     -Druntime.version=$2
\ No newline at end of file