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

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

commit f3d5764432b7983fc35487b5d0ff5324929a60e0
Author: Tadayoshi Sato <[email protected]>
AuthorDate: Tue Aug 23 14:34:26 2022 +0900

    fix(metadata): add error handling on metadata extraction
---
 addons/keda/keda.go                        |   6 +-
 addons/master/master.go                    |   5 +-
 pkg/cmd/local/local.go                     |   6 +-
 pkg/metadata/metadata.go                   |  31 ++++++---
 pkg/metadata/metadata_capabilities_test.go |   5 +-
 pkg/metadata/metadata_dependencies_test.go | 105 +++++++++++++++++------------
 pkg/metadata/metadata_http_test.go         |  50 ++++++++------
 pkg/metadata/metadata_uri_test.go          |  40 ++++++-----
 pkg/trait/cron.go                          |   6 +-
 pkg/trait/dependencies.go                  |  13 +++-
 pkg/trait/knative.go                       |  36 ++++++----
 pkg/trait/knative_service.go               |  10 ++-
 pkg/trait/service.go                       |   5 +-
 pkg/trait/util.go                          |  10 ++-
 pkg/util/kamelets/util.go                  |   7 +-
 15 files changed, 217 insertions(+), 118 deletions(-)

diff --git a/addons/keda/keda.go b/addons/keda/keda.go
index 26ded971b..1b5aa0ab4 100644
--- a/addons/keda/keda.go
+++ b/addons/keda/keda.go
@@ -318,7 +318,7 @@ func (t *kedaTrait) populateTriggersFromKamelets(e 
*trait.Environment) error {
                return err
        }
        kameletURIs := make(map[string][]string)
-       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+       if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
                for _, kameletURI := range meta.FromURIs {
                        if kameletStr := source.ExtractKamelet(kameletURI); 
kameletStr != "" && camelv1alpha1.ValidKameletName(kameletStr) {
                                kamelet := kameletStr
@@ -332,7 +332,9 @@ func (t *kedaTrait) populateTriggersFromKamelets(e 
*trait.Environment) error {
                        }
                }
                return true
-       })
+       }); err != nil {
+               return err
+       }
 
        if len(kameletURIs) == 0 {
                return nil
diff --git a/addons/master/master.go b/addons/master/master.go
index 5c79ffde2..80d7a36ba 100644
--- a/addons/master/master.go
+++ b/addons/master/master.go
@@ -100,7 +100,10 @@ func (t *masterTrait) Configure(e *trait.Environment) 
(bool, error) {
                        return false, err
                }
 
-               meta := metadata.ExtractAll(e.CamelCatalog, sources)
+               meta, err := metadata.ExtractAll(e.CamelCatalog, sources)
+               if err != nil {
+                       return false, err
+               }
 
                if t.Enabled == nil {
                        for _, endpoint := range meta.FromURIs {
diff --git a/pkg/cmd/local/local.go b/pkg/cmd/local/local.go
index 8f150ad6c..9ba54dd66 100644
--- a/pkg/cmd/local/local.go
+++ b/pkg/cmd/local/local.go
@@ -100,7 +100,11 @@ func getTopLevelDependencies(ctx context.Context, catalog 
*camel.RuntimeCatalog,
                }
 
                // Extract list of top-level dependencies
-               dependencies.Merge(trait.AddSourceDependencies(sourceSpec, 
catalog))
+               srcDeps, err := trait.ExtractSourceDependencies(sourceSpec, 
catalog)
+               if err != nil {
+                       return nil, err
+               }
+               dependencies.Merge(srcDeps)
        }
 
        return dependencies.List(), nil
diff --git a/pkg/metadata/metadata.go b/pkg/metadata/metadata.go
index 02ab8f838..d73c7b221 100644
--- a/pkg/metadata/metadata.go
+++ b/pkg/metadata/metadata.go
@@ -26,18 +26,23 @@ import (
 )
 
 // ExtractAll returns metadata information from all listed source codes.
-func ExtractAll(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec) 
IntegrationMetadata {
+func ExtractAll(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec) 
(IntegrationMetadata, error) {
        // neutral metadata
        meta := src.NewMetadata()
        meta.PassiveEndpoints = true
        meta.ExposesHTTPServices = false
 
        for _, source := range sources {
-               meta = merge(meta, Extract(catalog, source).Metadata)
+               m, err := Extract(catalog, source)
+               if err != nil {
+                       return IntegrationMetadata{}, err
+               }
+               meta = merge(meta, m.Metadata)
        }
+
        return IntegrationMetadata{
                Metadata: meta,
-       }
+       }, nil
 }
 
 func merge(m1 src.Metadata, m2 src.Metadata) src.Metadata {
@@ -60,7 +65,7 @@ func merge(m1 src.Metadata, m2 src.Metadata) src.Metadata {
 }
 
 // Extract returns metadata information from the source code.
-func Extract(catalog *camel.RuntimeCatalog, source v1.SourceSpec) 
IntegrationMetadata {
+func Extract(catalog *camel.RuntimeCatalog, source v1.SourceSpec) 
(IntegrationMetadata, error) {
        if source.ContentRef != "" {
                panic("source must be dereferenced before calling this method")
        }
@@ -74,21 +79,27 @@ func Extract(catalog *camel.RuntimeCatalog, source 
v1.SourceSpec) IntegrationMet
        meta.PassiveEndpoints = true
        meta.ExposesHTTPServices = false
 
-       // TODO: handle error
-       _ = src.InspectorForLanguage(catalog, language).Extract(source, &meta)
+       if err := src.InspectorForLanguage(catalog, language).Extract(source, 
&meta); err != nil {
+               return IntegrationMetadata{}, err
+       }
 
        return IntegrationMetadata{
                Metadata: meta,
-       }
+       }, nil
 }
 
-// Each --.
-func Each(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec, consumer 
func(int, IntegrationMetadata) bool) {
+// Each traverses the sources with the provided consumer function.
+func Each(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec, consumer 
func(int, IntegrationMetadata) bool) error {
        for i, s := range sources {
-               meta := Extract(catalog, s)
+               meta, err := Extract(catalog, s)
+               if err != nil {
+                       return err
+               }
 
                if !consumer(i, meta) {
                        break
                }
        }
+
+       return nil
 }
diff --git a/pkg/metadata/metadata_capabilities_test.go 
b/pkg/metadata/metadata_capabilities_test.go
index 349e4850e..e283e9a6f 100644
--- a/pkg/metadata/metadata_capabilities_test.go
+++ b/pkg/metadata/metadata_capabilities_test.go
@@ -36,9 +36,10 @@ func TestPlatformHttpCapabilities(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
diff --git a/pkg/metadata/metadata_dependencies_test.go 
b/pkg/metadata/metadata_dependencies_test.go
index c3a014b94..61593de53 100644
--- a/pkg/metadata/metadata_dependencies_test.go
+++ b/pkg/metadata/metadata_dependencies_test.go
@@ -44,9 +44,10 @@ func TestDependenciesJavaSource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -78,9 +79,10 @@ func TestDependenciesJavaScript(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -113,9 +115,10 @@ func TestDependenciesGroovy(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -144,9 +147,10 @@ func TestDependencies(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(t,
                []string{
@@ -176,10 +180,11 @@ func TestDependenciesQuarkus(t *testing.T) {
        }
 
        catalog, err := camel.QuarkusCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
        assert.NotNil(t, catalog)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(t,
                []string{
@@ -207,9 +212,10 @@ func TestJacksonDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -235,9 +241,10 @@ func TestJacksonImplicitDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -269,9 +276,10 @@ func TestLanguageDependencies(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
        assert.ElementsMatch(
                t,
                []string{
@@ -303,9 +311,10 @@ func TestLanguageDependenciesTransformExpression(t 
*testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
        assert.ElementsMatch(
                t,
                []string{
@@ -333,9 +342,10 @@ func TestCircuitBreakerDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(t,
                []string{
@@ -363,9 +373,10 @@ func TestRestDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -395,9 +406,10 @@ func TestRestWithPathDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t, []string{
@@ -425,9 +437,10 @@ func TestRestConfigurationDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t, []string{
@@ -454,9 +467,10 @@ func TestRestClosureDependencyGroovy(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -484,9 +498,10 @@ func TestRestClosureDependencyKotlin(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -518,9 +533,10 @@ func TestXMLCircuitBreakerDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -557,9 +573,10 @@ func TestXMLRestDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -614,9 +631,10 @@ func TestXMLLanguageDependencies(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
        assert.ElementsMatch(
                t,
                []string{
@@ -684,9 +702,10 @@ func TestYAMLRestDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -710,9 +729,10 @@ func TestYAMLCircuitBreakerDependency(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
@@ -733,9 +753,10 @@ func TestYAMLLanguageDependencies(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.ElementsMatch(
                t,
diff --git a/pkg/metadata/metadata_http_test.go 
b/pkg/metadata/metadata_http_test.go
index 3f653acdf..15ebacf65 100644
--- a/pkg/metadata/metadata_http_test.go
+++ b/pkg/metadata/metadata_http_test.go
@@ -40,9 +40,10 @@ func TestHttpJavaSource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.False(t, meta.PassiveEndpoints)
@@ -64,9 +65,10 @@ func TestHttpOnlyJavaSource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.True(t, meta.PassiveEndpoints)
@@ -85,9 +87,10 @@ func TestHttpOnlyJavaSourceRest(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.True(t, meta.PassiveEndpoints)
@@ -106,9 +109,10 @@ func TestHttpOnlyJavaSourceRest2(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.True(t, meta.PassiveEndpoints)
@@ -128,9 +132,10 @@ func TestNoHttpGroovySource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.False(t, meta.ExposesHTTPServices)
        assert.False(t, meta.PassiveEndpoints)
@@ -150,9 +155,10 @@ func TestHttpOnlyGroovySource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.True(t, meta.PassiveEndpoints)
@@ -172,9 +178,10 @@ func TestHttpXMLSource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.False(t, meta.PassiveEndpoints)
@@ -195,9 +202,10 @@ func TestHttpOnlyXMLSource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := Extract(catalog, code)
+       meta, err := Extract(catalog, code)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.True(t, meta.PassiveEndpoints)
@@ -229,9 +237,10 @@ func TestMultilangHTTPOnlySource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := ExtractAll(catalog, codes)
+       meta, err := ExtractAll(catalog, codes)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.True(t, meta.PassiveEndpoints)
@@ -265,9 +274,10 @@ func TestMultilangHTTPSource(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       meta := ExtractAll(catalog, codes)
+       meta, err := ExtractAll(catalog, codes)
+       assert.NoError(t, err)
 
        assert.True(t, meta.ExposesHTTPServices)
        assert.False(t, meta.PassiveEndpoints)
diff --git a/pkg/metadata/metadata_uri_test.go 
b/pkg/metadata/metadata_uri_test.go
index 90d526e9e..e046b4827 100644
--- a/pkg/metadata/metadata_uri_test.go
+++ b/pkg/metadata/metadata_uri_test.go
@@ -47,9 +47,10 @@ func TestJava1(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Contains(t, metadata.FromURIs, "timer:tick")
        assert.Len(t, metadata.FromURIs, 1)
@@ -84,9 +85,10 @@ func TestJava2(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Contains(t, metadata.FromURIs, "timer:tick")
        assert.Len(t, metadata.FromURIs, 1)
@@ -116,9 +118,10 @@ func TestGroovy1(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Contains(t, metadata.FromURIs, "timer:tick")
        assert.Contains(t, metadata.FromURIs, "uri:2")
@@ -146,9 +149,10 @@ func TestGroovy2(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Empty(t, metadata.FromURIs)
        assert.Contains(t, metadata.ToURIs, 
"log:info?skipBodyLineSeparator=false")
@@ -181,9 +185,10 @@ func TestXml1(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Contains(t, metadata.FromURIs, "timer:hello?period=3000")
        assert.Len(t, metadata.FromURIs, 1)
@@ -215,9 +220,10 @@ func TestKotlin1(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Contains(t, metadata.FromURIs, "timer:tick")
        assert.Contains(t, metadata.FromURIs, "uri:2")
@@ -246,9 +252,10 @@ func TestJavascript1(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.Empty(t, metadata.FromURIs)
        assert.Contains(t, metadata.ToURIs, 
"log:info?skipBodyLineSeparator=false")
@@ -282,9 +289,10 @@ func TestJYaml(t *testing.T) {
        }
 
        catalog, err := camel.DefaultCatalog()
-       assert.Nil(t, err)
+       assert.NoError(t, err)
 
-       metadata := Extract(catalog, source)
+       metadata, err := Extract(catalog, source)
+       assert.NoError(t, err)
 
        assert.NotEmpty(t, metadata.FromURIs)
        assert.Contains(t, metadata.FromURIs, "timer:tick")
diff --git a/pkg/trait/cron.go b/pkg/trait/cron.go
index c39e8cbd4..7d28867bd 100644
--- a/pkg/trait/cron.go
+++ b/pkg/trait/cron.go
@@ -353,7 +353,11 @@ func (t *cronTrait) getSourcesFromURIs(e *Environment) 
([]string, error) {
        if sources, err = kubernetes.ResolveIntegrationSources(e.Ctx, t.Client, 
e.Integration, e.Resources); err != nil {
                return nil, err
        }
-       meta := metadata.ExtractAll(e.CamelCatalog, sources)
+       meta, err := metadata.ExtractAll(e.CamelCatalog, sources)
+       if err != nil {
+               return nil, err
+       }
+
        return meta.FromURIs, nil
 }
 
diff --git a/pkg/trait/dependencies.go b/pkg/trait/dependencies.go
index 440291c9a..5a68c3cef 100644
--- a/pkg/trait/dependencies.go
+++ b/pkg/trait/dependencies.go
@@ -70,9 +70,16 @@ func (t *dependenciesTrait) Apply(e *Environment) error {
        }
        for _, s := range sources {
                // Add source-related dependencies
-               dependencies.Merge(AddSourceDependencies(s, e.CamelCatalog))
-
-               meta := metadata.Extract(e.CamelCatalog, s)
+               srcDeps, err := ExtractSourceDependencies(s, e.CamelCatalog)
+               if err != nil {
+                       return err
+               }
+               dependencies.Merge(srcDeps)
+
+               meta, err := metadata.Extract(e.CamelCatalog, s)
+               if err != nil {
+                       return err
+               }
                meta.RequiredCapabilities.Each(func(item string) bool {
                        
util.StringSliceUniqueAdd(&e.Integration.Status.Capabilities, item)
                        return true
diff --git a/pkg/trait/knative.go b/pkg/trait/knative.go
index 935e0d03f..146f75506 100644
--- a/pkg/trait/knative.go
+++ b/pkg/trait/knative.go
@@ -84,10 +84,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, 
error) {
                        if err != nil {
                                return false, err
                        }
-                       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+                       if err := metadata.Each(e.CamelCatalog, sources, func(_ 
int, meta metadata.IntegrationMetadata) bool {
                                items = append(items, 
knativeutil.FilterURIs(meta.FromURIs, knativeapi.CamelServiceTypeChannel)...)
                                return true
-                       })
+                       }); err != nil {
+                               return false, err
+                       }
 
                        t.ChannelSources = items
                }
@@ -97,10 +99,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, 
error) {
                        if err != nil {
                                return false, err
                        }
-                       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+                       if err := metadata.Each(e.CamelCatalog, sources, func(_ 
int, meta metadata.IntegrationMetadata) bool {
                                items = append(items, 
knativeutil.FilterURIs(meta.ToURIs, knativeapi.CamelServiceTypeChannel)...)
                                return true
-                       })
+                       }); err != nil {
+                               return false, err
+                       }
 
                        t.ChannelSinks = items
                }
@@ -110,10 +114,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, 
error) {
                        if err != nil {
                                return false, err
                        }
-                       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+                       if err := metadata.Each(e.CamelCatalog, sources, func(_ 
int, meta metadata.IntegrationMetadata) bool {
                                items = append(items, 
knativeutil.FilterURIs(meta.FromURIs, knativeapi.CamelServiceTypeEndpoint)...)
                                return true
-                       })
+                       }); err != nil {
+                               return false, err
+                       }
 
                        t.EndpointSources = items
                }
@@ -123,10 +129,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, 
error) {
                        if err != nil {
                                return false, err
                        }
-                       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+                       if err := metadata.Each(e.CamelCatalog, sources, func(_ 
int, meta metadata.IntegrationMetadata) bool {
                                items = append(items, 
knativeutil.FilterURIs(meta.ToURIs, knativeapi.CamelServiceTypeEndpoint)...)
                                return true
-                       })
+                       }); err != nil {
+                               return false, err
+                       }
 
                        t.EndpointSinks = items
                }
@@ -136,10 +144,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, 
error) {
                        if err != nil {
                                return false, err
                        }
-                       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+                       if err := metadata.Each(e.CamelCatalog, sources, func(_ 
int, meta metadata.IntegrationMetadata) bool {
                                items = append(items, 
knativeutil.FilterURIs(meta.FromURIs, knativeapi.CamelServiceTypeEvent)...)
                                return true
-                       })
+                       }); err != nil {
+                               return false, err
+                       }
 
                        t.EventSources = items
                }
@@ -149,10 +159,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, 
error) {
                        if err != nil {
                                return false, err
                        }
-                       metadata.Each(e.CamelCatalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+                       if err := metadata.Each(e.CamelCatalog, sources, func(_ 
int, meta metadata.IntegrationMetadata) bool {
                                items = append(items, 
knativeutil.FilterURIs(meta.ToURIs, knativeapi.CamelServiceTypeEvent)...)
                                return true
-                       })
+                       }); err != nil {
+                               return false, err
+                       }
 
                        t.EventSinks = items
                }
diff --git a/pkg/trait/knative_service.go b/pkg/trait/knative_service.go
index 606aafd14..258e38bb5 100644
--- a/pkg/trait/knative_service.go
+++ b/pkg/trait/knative_service.go
@@ -132,7 +132,10 @@ func (t *knativeServiceTrait) Configure(e *Environment) 
(bool, error) {
                                return false, err
                        }
 
-                       meta := metadata.ExtractAll(e.CamelCatalog, sources)
+                       meta, err := metadata.ExtractAll(e.CamelCatalog, 
sources)
+                       if err != nil {
+                               return false, err
+                       }
                        if !meta.ExposesHTTPServices || !meta.PassiveEndpoints {
                                single := 1
                                t.MinScale = &single
@@ -180,7 +183,10 @@ func (t *knativeServiceTrait) SelectControllerStrategy(e 
*Environment) (*Control
                return nil, err
        }
 
-       meta := metadata.ExtractAll(e.CamelCatalog, sources)
+       meta, err := metadata.ExtractAll(e.CamelCatalog, sources)
+       if err != nil {
+               return nil, err
+       }
        if meta.ExposesHTTPServices {
                return &knativeServiceStrategy, nil
        }
diff --git a/pkg/trait/service.go b/pkg/trait/service.go
index eb46b5cb5..c707ce281 100644
--- a/pkg/trait/service.go
+++ b/pkg/trait/service.go
@@ -80,7 +80,10 @@ func (t *serviceTrait) Configure(e *Environment) (bool, 
error) {
                        return false, err
                }
 
-               meta := metadata.ExtractAll(e.CamelCatalog, sources)
+               meta, err := metadata.ExtractAll(e.CamelCatalog, sources)
+               if err != nil {
+                       return false, err
+               }
                if !meta.ExposesHTTPServices {
                        e.Integration.Status.SetCondition(
                                v1.IntegrationConditionServiceAvailable,
diff --git a/pkg/trait/util.go b/pkg/trait/util.go
index ef9a5d323..69d9c3db2 100644
--- a/pkg/trait/util.go
+++ b/pkg/trait/util.go
@@ -211,11 +211,15 @@ func toHostDir(host string) string {
        return toFileName.ReplaceAllString(h, "_")
 }
 
-func AddSourceDependencies(source v1.SourceSpec, catalog 
*camel.RuntimeCatalog) *strset.Set {
+// ExtractSourceDependencies extracts dependencies from source.
+func ExtractSourceDependencies(source v1.SourceSpec, catalog 
*camel.RuntimeCatalog) (*strset.Set, error) {
        dependencies := strset.New()
 
        // Add auto-detected dependencies
-       meta := metadata.Extract(catalog, source)
+       meta, err := metadata.Extract(catalog, source)
+       if err != nil {
+               return nil, err
+       }
        dependencies.Merge(meta.Dependencies)
 
        // Add loader dependencies
@@ -240,7 +244,7 @@ func AddSourceDependencies(source v1.SourceSpec, catalog 
*camel.RuntimeCatalog)
                }
        }
 
-       return dependencies
+       return dependencies, nil
 }
 
 // AssertTraitsType asserts that traits is either v1.Traits or 
v1.IntegrationKitTraits.
diff --git a/pkg/util/kamelets/util.go b/pkg/util/kamelets/util.go
index 2db03c7fc..c849ce729 100644
--- a/pkg/util/kamelets/util.go
+++ b/pkg/util/kamelets/util.go
@@ -39,10 +39,13 @@ func ExtractKameletFromSources(context context.Context, c 
client.Client, catalog
        if err != nil {
                return nil, err
        }
-       metadata.Each(catalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
+
+       if err := metadata.Each(catalog, sources, func(_ int, meta 
metadata.IntegrationMetadata) bool {
                util.StringSliceUniqueConcat(&kamelets, meta.Kamelets)
                return true
-       })
+       }); err != nil {
+               return nil, err
+       }
 
        // Check if a Kamelet is configured as default error handler URI
        defaultErrorHandlerURI := 
it.Spec.GetConfigurationProperty(v1alpha1.ErrorHandlerAppPropertiesPrefix + 
".deadLetterUri")

Reply via email to