This is an automated email from the ASF dual-hosted git repository. astefanutti pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit c4f37cf7ae4f7e81ccc1ae0e45410eb691674adc Author: Antonin Stefanutti <[email protected]> AuthorDate: Wed Oct 23 10:41:12 2019 +0200 fix(quarkus): Catalog exact matching logic should take runtime provider into account --- pkg/apis/camel/v1alpha1/camelcatalog_types.go | 2 +- pkg/apis/camel/v1alpha1/common_types.go | 4 ++-- pkg/metadata/metadata_dependencies_test.go | 26 ++++++++++++++++++++++++++ pkg/util/camel/camel_util.go | 10 ++++++++-- pkg/util/camel/catalog.go | 14 +++++++++++++- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/pkg/apis/camel/v1alpha1/camelcatalog_types.go b/pkg/apis/camel/v1alpha1/camelcatalog_types.go index 65a1d65..3ae6999 100644 --- a/pkg/apis/camel/v1alpha1/camelcatalog_types.go +++ b/pkg/apis/camel/v1alpha1/camelcatalog_types.go @@ -55,7 +55,7 @@ type CamelArtifact struct { type CamelCatalogSpec struct { Version string `json:"version" yaml:"version"` RuntimeVersion string `json:"runtimeVersion" yaml:"runtimeVersion"` - RuntimeProvider *RuntimeProvider `json:"runtimeProvider,omitempty"` + RuntimeProvider *RuntimeProvider `json:"runtimeProvider,omitempty" yaml:"runtimeProvider"` Artifacts map[string]CamelArtifact `json:"artifacts" yaml:"artifacts"` } diff --git a/pkg/apis/camel/v1alpha1/common_types.go b/pkg/apis/camel/v1alpha1/common_types.go index abf366f..2833890 100644 --- a/pkg/apis/camel/v1alpha1/common_types.go +++ b/pkg/apis/camel/v1alpha1/common_types.go @@ -29,8 +29,8 @@ type RuntimeProvider struct { // QuarkusRuntimeProvider -- type QuarkusRuntimeProvider struct { - CamelQuarkusVersion string `json:"camelQuarkusVersion,omitempty"` - QuarkusVersion string `json:"quarkusVersion,omitempty"` + CamelQuarkusVersion string `json:"camelQuarkusVersion,omitempty" yaml:"camelQuarkusVersion"` + QuarkusVersion string `json:"quarkusVersion,omitempty" yaml:"quarkusVersion"` } // ConfigurationSpec -- diff --git a/pkg/metadata/metadata_dependencies_test.go b/pkg/metadata/metadata_dependencies_test.go index d0919b5..bd1ceea 100644 --- a/pkg/metadata/metadata_dependencies_test.go +++ b/pkg/metadata/metadata_dependencies_test.go @@ -116,6 +116,32 @@ func TestDependencies(t *testing.T) { assert.ElementsMatch(t, []string{"camel:http", "camel:log", "camel:mock", "camel:twitter"}, meta.Dependencies.List()) } +func TestDependenciesQuarkus(t *testing.T) { + code := v1alpha1.SourceSpec{ + DataSpec: v1alpha1.DataSpec{ + Name: "Request.java", + Content: ` + from("http:test").to("log:end"); + from("https4:test").to("log:end"); + from("twitter-timeline:test").to("mock:end"); + `, + }, + Language: v1alpha1.LanguageJavaSource, + } + + catalog, err := camel.QuarkusCatalog() + assert.Nil(t, err) + + meta := Extract(catalog, code) + + assert.ElementsMatch(t, + []string{ + "mvn:org.apache.camel.quarkus:camel-quarkus-log:", + "mvn:org.apache.camel.quarkus:camel-quarkus-twitter:", + }, + meta.Dependencies.List()) +} + func TestJacksonDependency(t *testing.T) { code := v1alpha1.SourceSpec{ DataSpec: v1alpha1.DataSpec{ diff --git a/pkg/util/camel/camel_util.go b/pkg/util/camel/camel_util.go index 6aecdfe..a368284 100644 --- a/pkg/util/camel/camel_util.go +++ b/pkg/util/camel/camel_util.go @@ -27,10 +27,16 @@ import ( ) func findBestMatch(catalogs []v1alpha1.CamelCatalog, camelVersion string, runtimeVersion string, provider interface{}) (*RuntimeCatalog, error) { - // FIXME: take the provider into account for exact match + // TODO: generic exact matching logic independent of the runtime provider for _, catalog := range catalogs { if catalog.Spec.Version == camelVersion && catalog.Spec.RuntimeVersion == runtimeVersion { - return NewRuntimeCatalog(catalog.Spec), nil + if provider == nil && catalog.Spec.RuntimeProvider == nil { + return NewRuntimeCatalog(catalog.Spec), nil + } else if provider, ok := provider.(v1alpha1.QuarkusRuntimeProvider); ok && + catalog.Spec.RuntimeProvider != nil && catalog.Spec.RuntimeProvider.Quarkus != nil && + provider == *catalog.Spec.RuntimeProvider.Quarkus { + return NewRuntimeCatalog(catalog.Spec), nil + } } } diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go index a5a6d1e..e4442c9 100644 --- a/pkg/util/camel/catalog.go +++ b/pkg/util/camel/catalog.go @@ -29,6 +29,18 @@ import ( // DefaultCatalog -- func DefaultCatalog() (*RuntimeCatalog, error) { + return catalogForRuntimeProvider(nil) +} + +// QuarkusCatalog -- +func QuarkusCatalog() (*RuntimeCatalog, error) { + return catalogForRuntimeProvider(v1alpha1.QuarkusRuntimeProvider{ + CamelQuarkusVersion: "0.2.0", + QuarkusVersion: "0.21.2", + }) +} + +func catalogForRuntimeProvider(provider interface{}) (*RuntimeCatalog, error) { catalogs := make([]v1alpha1.CamelCatalog, 0) for name, content := range deploy.Resources { @@ -42,5 +54,5 @@ func DefaultCatalog() (*RuntimeCatalog, error) { } } - return findBestMatch(catalogs, defaults.DefaultCamelVersion, defaults.DefaultRuntimeVersion, nil) + return findBestMatch(catalogs, defaults.DefaultCamelVersion, defaults.DefaultRuntimeVersion, provider) }
