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

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


The following commit(s) were added to refs/heads/main by this push:
     new 80328ab14 feat(api): expose Camel core version
80328ab14 is described below

commit 80328ab14b47ad761017a0e69db0bfbf6d8044b2
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu Sep 5 12:08:24 2024 +0200

    feat(api): expose Camel core version
    
    It is useful to know what core version of Camel the runtime is running
---
 docs/modules/ROOT/partials/apis/camel-k-crds.adoc              |  7 +++++++
 helm/camel-k/crds/camel-k-crds.yaml                            | 10 ++++++++++
 pkg/apis/camel/v1/integrationplatform_types.go                 |  3 +++
 .../camel/v1/integrationplatformbuildspec.go                   |  9 +++++++++
 pkg/controller/integrationplatform/catalog.go                  |  6 ++++--
 pkg/controller/integrationplatform/catalog_test.go             |  6 ++++++
 pkg/controller/integrationplatform/monitor.go                  |  1 +
 .../crd/bases/camel.apache.org_integrationplatforms.yaml       | 10 ++++++++++
 8 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc 
b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index c7bfdb964..64e5125b5 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -2830,6 +2830,13 @@ the Camel K Runtime dependency version
 
 the runtime used. Likely Camel Quarkus (we used to have main runtime which has 
been discontinued since version 1.5)
 
+|`runtimeCoreVersion` +
+string
+|
+
+
+the Camel core version used by this IntegrationPlatform
+
 |`baseImage` +
 string
 |
diff --git a/helm/camel-k/crds/camel-k-crds.yaml 
b/helm/camel-k/crds/camel-k-crds.yaml
index 06a215afc..cfdae68b1 100644
--- a/helm/camel-k/crds/camel-k-crds.yaml
+++ b/helm/camel-k/crds/camel-k-crds.yaml
@@ -3212,6 +3212,10 @@ spec:
       jsonPath: .status.build.runtimeVersion
       name: Default runtime
       type: string
+    - description: The default Camel core version
+      jsonPath: .status.build.runtimeCoreVersion
+      name: Camel version
+      type: string
     name: v1
     schema:
       openAPIV3Schema:
@@ -3571,6 +3575,9 @@ spec:
                         description: the secret where credentials are stored
                         type: string
                     type: object
+                  runtimeCoreVersion:
+                    description: the Camel core version used by this 
IntegrationPlatform
+                    type: string
                   runtimeProvider:
                     description: the runtime used. Likely Camel Quarkus (we 
used to
                       have main runtime which has been discontinued since 
version
@@ -5661,6 +5668,9 @@ spec:
                         description: the secret where credentials are stored
                         type: string
                     type: object
+                  runtimeCoreVersion:
+                    description: the Camel core version used by this 
IntegrationPlatform
+                    type: string
                   runtimeProvider:
                     description: the runtime used. Likely Camel Quarkus (we 
used to
                       have main runtime which has been discontinued since 
version
diff --git a/pkg/apis/camel/v1/integrationplatform_types.go 
b/pkg/apis/camel/v1/integrationplatform_types.go
index 81ae587cd..3cc8e3a65 100644
--- a/pkg/apis/camel/v1/integrationplatform_types.go
+++ b/pkg/apis/camel/v1/integrationplatform_types.go
@@ -72,6 +72,7 @@ type IntegrationPlatformStatus struct {
 // +kubebuilder:printcolumn:name="Publish 
strategy",type=string,JSONPath=`.status.build.publishStrategy`,description="The 
default publish strategy"
 // +kubebuilder:printcolumn:name="Registry 
address",type=string,JSONPath=`.status.build.registry.address`,description="The 
container registry address"
 // +kubebuilder:printcolumn:name="Default 
runtime",type=string,JSONPath=`.status.build.runtimeVersion`,description="The 
default runtime version"
+// +kubebuilder:printcolumn:name="Camel 
version",type=string,JSONPath=`.status.build.runtimeCoreVersion`,description="The
 default Camel core version"
 
 // IntegrationPlatform is the resource used to drive the Camel K operator 
behavior.
 // It defines the behavior of all Custom Resources (`IntegrationKit`, 
`Integration`, `Kamelet`) in the given namespace.
@@ -119,6 +120,8 @@ type IntegrationPlatformBuildSpec struct {
        RuntimeVersion string `json:"runtimeVersion,omitempty"`
        // the runtime used. Likely Camel Quarkus (we used to have main runtime 
which has been discontinued since version 1.5)
        RuntimeProvider RuntimeProvider `json:"runtimeProvider,omitempty"`
+       // the Camel core version used by this IntegrationPlatform
+       RuntimeCoreVersion string `json:"runtimeCoreVersion,omitempty"`
        // a base image that can be used as base layer for all images.
        // It can be useful if you want to provide some custom base image with 
further utility software
        BaseImage string `json:"baseImage,omitempty"`
diff --git 
a/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformbuildspec.go 
b/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformbuildspec.go
index 924aaea51..6c3432908 100644
--- 
a/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformbuildspec.go
+++ 
b/pkg/client/camel/applyconfiguration/camel/v1/integrationplatformbuildspec.go
@@ -31,6 +31,7 @@ type IntegrationPlatformBuildSpecApplyConfiguration struct {
        PublishStrategy         
*camelv1.IntegrationPlatformBuildPublishStrategy 
`json:"publishStrategy,omitempty"`
        RuntimeVersion          *string                                         
 `json:"runtimeVersion,omitempty"`
        RuntimeProvider         *camelv1.RuntimeProvider                        
 `json:"runtimeProvider,omitempty"`
+       RuntimeCoreVersion      *string                                         
 `json:"runtimeCoreVersion,omitempty"`
        BaseImage               *string                                         
 `json:"baseImage,omitempty"`
        Registry                *RegistrySpecApplyConfiguration                 
 `json:"registry,omitempty"`
        BuildCatalogToolTimeout *metav1.Duration                                
 `json:"buildCatalogToolTimeout,omitempty"`
@@ -78,6 +79,14 @@ func (b *IntegrationPlatformBuildSpecApplyConfiguration) 
WithRuntimeProvider(val
        return b
 }
 
+// WithRuntimeCoreVersion sets the RuntimeCoreVersion field in the declarative 
configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" 
function invocations.
+// If called multiple times, the RuntimeCoreVersion field is set to the value 
of the last call.
+func (b *IntegrationPlatformBuildSpecApplyConfiguration) 
WithRuntimeCoreVersion(value string) 
*IntegrationPlatformBuildSpecApplyConfiguration {
+       b.RuntimeCoreVersion = &value
+       return b
+}
+
 // WithBaseImage sets the BaseImage field in the declarative configuration to 
the given value
 // and returns the receiver, so that objects can be built by chaining "With" 
function invocations.
 // If called multiple times, the BaseImage field is set to the value of the 
last call.
diff --git a/pkg/controller/integrationplatform/catalog.go 
b/pkg/controller/integrationplatform/catalog.go
index 7be5aabb5..ea1406f1f 100644
--- a/pkg/controller/integrationplatform/catalog.go
+++ b/pkg/controller/integrationplatform/catalog.go
@@ -51,12 +51,13 @@ func (action *catalogAction) Handle(ctx context.Context, 
platform *v1.Integratio
                Provider: v1.RuntimeProviderQuarkus,
        }
 
-       if catalog, err := camel.LoadCatalog(ctx, action.client, 
platform.Namespace, runtimeSpec); err != nil {
+       catalog, err := camel.LoadCatalog(ctx, action.client, 
platform.Namespace, runtimeSpec)
+       if err != nil {
                action.L.Error(err, "IntegrationPlatform unable to load Camel 
catalog",
                        "runtime-version", runtimeSpec.Version, 
"runtime-provider", runtimeSpec.Provider)
                return platform, nil
        } else if catalog == nil {
-               if _, err = camel.CreateCatalog(ctx, action.client, 
platform.Namespace, platform, runtimeSpec); err != nil {
+               if catalog, err = camel.CreateCatalog(ctx, action.client, 
platform.Namespace, platform, runtimeSpec); err != nil {
                        action.L.Error(err, "IntegrationPlatform unable to 
create Camel catalog",
                                "runtime-version", runtimeSpec.Version, 
"runtime-provider", runtimeSpec.Provider)
 
@@ -77,6 +78,7 @@ func (action *catalogAction) Handle(ctx context.Context, 
platform *v1.Integratio
                corev1.ConditionTrue,
                v1.IntegrationPlatformConditionCamelCatalogAvailableReason,
                fmt.Sprintf("camel catalog %s available", runtimeSpec.Version))
+       platform.Status.Build.RuntimeCoreVersion = 
catalog.Runtime.Metadata["camel.version"]
 
        return platform, nil
 }
diff --git a/pkg/controller/integrationplatform/catalog_test.go 
b/pkg/controller/integrationplatform/catalog_test.go
index 9e4d863f2..f2c526508 100644
--- a/pkg/controller/integrationplatform/catalog_test.go
+++ b/pkg/controller/integrationplatform/catalog_test.go
@@ -121,6 +121,8 @@ func TestCreateCatalog(t *testing.T) {
 
        assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase, 
"Error", answer.Status.Conditions[0].Message)
        assert.Equal(t, corev1.ConditionTrue, 
answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status)
+       // We don't know exactly which is the core version, it is enough to 
check is not empty in the test
+       assert.NotEqual(t, "", answer.Status.Build.RuntimeCoreVersion)
 
        list := v1.NewCamelCatalogList()
        err = c.List(context.TODO(), &list, k8sclient.InNamespace(ip.Namespace))
@@ -160,6 +162,9 @@ func TestCatalogAlreadyPresent(t *testing.T) {
        catalog := v1.NewCamelCatalog("ns", fmt.Sprintf("camel-catalog-%s", 
defaults.DefaultRuntimeVersion))
        catalog.Spec.Runtime.Version = defaults.DefaultRuntimeVersion
        catalog.Spec.Runtime.Provider = v1.RuntimeProviderQuarkus
+       catalog.Spec.Runtime.Metadata = map[string]string{
+               "camel.version": "4.4.0",
+       }
 
        c, err := test.NewFakeClient(&ip, &catalog)
        require.NoError(t, err)
@@ -176,6 +181,7 @@ func TestCatalogAlreadyPresent(t *testing.T) {
        assert.NotNil(t, answer)
 
        assert.Equal(t, v1.IntegrationPlatformPhaseReady, answer.Status.Phase)
+       assert.Equal(t, "4.4.0", answer.Status.Build.RuntimeCoreVersion)
        assert.Equal(t, corev1.ConditionTrue, 
answer.Status.GetCondition(v1.IntegrationPlatformConditionCamelCatalogAvailable).Status)
 }
 
diff --git a/pkg/controller/integrationplatform/monitor.go 
b/pkg/controller/integrationplatform/monitor.go
index 3a3b3c25e..474fe2934 100644
--- a/pkg/controller/integrationplatform/monitor.go
+++ b/pkg/controller/integrationplatform/monitor.go
@@ -121,6 +121,7 @@ func (action *monitorAction) Handle(ctx context.Context, 
platform *v1.Integratio
                                corev1.ConditionTrue,
                                
v1.IntegrationPlatformConditionCamelCatalogAvailableReason,
                                fmt.Sprintf("camel catalog %s available", 
runtimeSpec.Version))
+                       platform.Status.Build.RuntimeCoreVersion = 
catalog.Runtime.Metadata["camel.version"]
                }
        }
 
diff --git 
a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml 
b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index 319b0e242..01bd35632 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -57,6 +57,10 @@ spec:
       jsonPath: .status.build.runtimeVersion
       name: Default runtime
       type: string
+    - description: The default Camel core version
+      jsonPath: .status.build.runtimeCoreVersion
+      name: Camel version
+      type: string
     name: v1
     schema:
       openAPIV3Schema:
@@ -416,6 +420,9 @@ spec:
                         description: the secret where credentials are stored
                         type: string
                     type: object
+                  runtimeCoreVersion:
+                    description: the Camel core version used by this 
IntegrationPlatform
+                    type: string
                   runtimeProvider:
                     description: the runtime used. Likely Camel Quarkus (we 
used to
                       have main runtime which has been discontinued since 
version
@@ -2506,6 +2513,9 @@ spec:
                         description: the secret where credentials are stored
                         type: string
                     type: object
+                  runtimeCoreVersion:
+                    description: the Camel core version used by this 
IntegrationPlatform
+                    type: string
                   runtimeProvider:
                     description: the runtime used. Likely Camel Quarkus (we 
used to
                       have main runtime which has been discontinued since 
version

Reply via email to