This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/master by this push: new d7a0808 Fix Quarkus dependency detection new e3d9325 Merge pull request #1279 from jamesnetherton/inspector-tidy d7a0808 is described below commit d7a08084046a300dbb7f3fd6c55b9ea5b578d22a Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Fri Feb 14 10:16:41 2020 +0000 Fix Quarkus dependency detection --- pkg/metadata/metadata_dependencies_test.go | 4 ++ pkg/util/source/inspector.go | 109 +++++++++++++++++------------ pkg/util/source/inspector_xml.go | 10 +-- pkg/util/source/inspector_yaml.go | 10 +-- 4 files changed, 78 insertions(+), 55 deletions(-) diff --git a/pkg/metadata/metadata_dependencies_test.go b/pkg/metadata/metadata_dependencies_test.go index 29635e4..291259b 100644 --- a/pkg/metadata/metadata_dependencies_test.go +++ b/pkg/metadata/metadata_dependencies_test.go @@ -139,6 +139,8 @@ func TestDependenciesQuarkus(t *testing.T) { from("http:test").to("log:end"); from("https:test").to("log:end"); from("twitter-timeline:test").to("mock:end"); + from("direct:start").circuitBreaker().hystrixConfiguration().executionTimeoutInMilliseconds(100).end() + .to("direct:other").onFallback().setBody(constant("Fallback response")).end(); `, }, Language: v1.LanguageJavaSource, @@ -156,6 +158,8 @@ func TestDependenciesQuarkus(t *testing.T) { "camel-quarkus:log", "camel-quarkus:timer", "camel-quarkus:twitter", + "camel-quarkus:direct", + "camel-quarkus:hystrix", }, meta.Dependencies.List()) } diff --git a/pkg/util/source/inspector.go b/pkg/util/source/inspector.go index 4279849..0f1a219 100644 --- a/pkg/util/source/inspector.go +++ b/pkg/util/source/inspector.go @@ -27,42 +27,53 @@ import ( ) var ( - singleQuotedFrom = regexp.MustCompile(`from\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) - doubleQuotedFrom = regexp.MustCompile(`from\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) - singleQuotedTo = regexp.MustCompile(`\.to\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) - singleQuotedToD = regexp.MustCompile(`\.toD\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) - singleQuotedToF = regexp.MustCompile(`\.toF\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) - doubleQuotedTo = regexp.MustCompile(`\.to\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) - doubleQuotedToD = regexp.MustCompile(`\.toD\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) - doubleQuotedToF = regexp.MustCompile(`\.toF\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) - languageRegexp = regexp.MustCompile(`language\s*\(\s*["|']([a-zA-Z0-9-]+[^"|']+)["|']\s*,.*\)`) - camelTypeRegexp = regexp.MustCompile(`.*(org.apache.camel.*Component|DataFormat|Language)`) + singleQuotedFrom = regexp.MustCompile(`from\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) + doubleQuotedFrom = regexp.MustCompile(`from\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) + singleQuotedTo = regexp.MustCompile(`\.to\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) + singleQuotedToD = regexp.MustCompile(`\.toD\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) + singleQuotedToF = regexp.MustCompile(`\.toF\s*\(\s*'([a-zA-Z0-9-]+:[^']+)'`) + doubleQuotedTo = regexp.MustCompile(`\.to\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) + doubleQuotedToD = regexp.MustCompile(`\.toD\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) + doubleQuotedToF = regexp.MustCompile(`\.toF\s*\(\s*"([a-zA-Z0-9-]+:[^"]+)"`) + languageRegexp = regexp.MustCompile(`language\s*\(\s*["|']([a-zA-Z0-9-]+[^"|']+)["|']\s*,.*\)`) + camelTypeRegexp = regexp.MustCompile(`.*(org.apache.camel.*Component|DataFormat|Language)`) + jsonLibraryRegexp = regexp.MustCompile(`.*JsonLibrary\.Jackson.*`) + jsonLanguageRegexp = regexp.MustCompile(`.*\.json\(\).*`) + circuitBreakerRegexp = regexp.MustCompile(`.*\.circuitBreaker\(\).*`) + restConfigurationRegexp = regexp.MustCompile(`.*restConfiguration\(\).*`) + restRegexp = regexp.MustCompile(`.*rest\(("[a-zA-Z0-9-/]+")*\).*`) + restXMLRegexp = regexp.MustCompile(`^\s*rest\s*{.*`) + groovyLanguageRegexp = regexp.MustCompile(`.*\.groovy\s*\(.*\).*`) + jsonPathLanguageRegexp = regexp.MustCompile(`.*\.?(jsonpath|jsonpathWriteAsString)\s*\(.*\).*`) + ognlRegexp = regexp.MustCompile(`.*\.ognl\s*\(.*\).*`) + mvelRegexp = regexp.MustCompile(`.*\.mvel\s*\(.*\).*`) + simpleLanguageRegexp = regexp.MustCompile(`.*\.?simple\s*\(.*\).*`) + xqueryRegexp = regexp.MustCompile(`.*\.xquery\s*\(.*\).*`) + xpathRegexp = regexp.MustCompile(`.*\.?xpath\s*\(.*\).*`) + xtokenizeRegexp = regexp.MustCompile(`.*\.xtokenize\s*\(.*\).*`) sourceDependencies = struct { - main map[string]string - quarkus map[string]string + main map[*regexp.Regexp]string + quarkus map[*regexp.Regexp]string }{ - main: map[string]string{ - `.*JsonLibrary\.Jackson.*`: "camel:jackson", - `.*\.json\(\).*`: "camel:jackson", - `.*\.circuitBreaker\(\).*`: "camel:hystrix", - `.*restConfiguration\(\).*`: "camel:rest", - `.*rest\(("[a-zA-Z0-9-/]+")*\).*`: "camel:rest", - `^\s*rest\s*{.*`: "camel:rest", - `.*\.groovy\s*\(.*\).*`: "camel:groovy", - `.*\.?(jsonpath|jsonpathWriteAsString)\s*\(.*\).*`: "camel:jsonpath", - `.*\.ognl\s*\(.*\).*`: "camel:ognl", - `.*\.mvel\s*\(.*\).*`: "camel:mvel", - `.*\.?simple\s*\(.*\).*`: "camel:bean", - `.*\.xquery\s*\(.*\).*`: "camel:saxon", - `.*\.?xpath\s*\(.*\).*`: "camel:xpath", - `.*\.xtokenize\s*\(.*\).*`: "camel:jaxp", + main: map[*regexp.Regexp]string{ + jsonLibraryRegexp: "camel:jackson", + jsonLanguageRegexp: "camel:jackson", + circuitBreakerRegexp: "camel:hystrix", + restConfigurationRegexp: "camel:rest", + restRegexp: "camel:rest", + restXMLRegexp: "camel:rest", + groovyLanguageRegexp: "camel:groovy", + jsonPathLanguageRegexp: "camel:jsonpath", + ognlRegexp: "camel:ognl", + mvelRegexp: "camel:mvel", + simpleLanguageRegexp: "camel:bean", + xqueryRegexp: "camel:saxon", + xpathRegexp: "camel:xpath", + xtokenizeRegexp: "camel:jaxp", }, - quarkus: map[string]string{ - `.*restConfiguration\(\).*`: "camel-quarkus:rest", - `.*rest\(("[a-zA-Z0-9-/]+")*\).*`: "camel-quarkus:rest", - `^\s*rest\s*{.*`: "camel-quarkus:rest", - `.*\.?simple\s*\(.*\).*`: "camel-quarkus:bean", + quarkus: map[*regexp.Regexp]string{ + xtokenizeRegexp: "camel-quarkus:core-xml", }, } ) @@ -130,27 +141,26 @@ func (i *baseInspector) discoverDependencies(source v1.SourceSpec, meta *Metadat for _, uri := range uris { candidateComp := i.decodeComponent(uri) if candidateComp != "" { - meta.Dependencies.Add(candidateComp) + i.addDependency(candidateComp, meta) } } - var additionalDependencies map[string]string - if i.catalog.Runtime.Provider == v1.RuntimeProviderQuarkus { - additionalDependencies = sourceDependencies.quarkus - } else { - additionalDependencies = sourceDependencies.main - } - for pattern, dep := range additionalDependencies { - pat := regexp.MustCompile(pattern) - if pat.MatchString(source.Content) { - meta.Dependencies.Add(dep) + for pattern, dep := range sourceDependencies.main { + if i.catalog.Runtime.Provider == v1.RuntimeProviderQuarkus { + // Check whether quarkus has its own artifact that differs from the standard one + if _, ok := sourceDependencies.quarkus[pattern]; ok { + dep = sourceDependencies.quarkus[pattern] + } + } + if pattern.MatchString(source.Content) { + i.addDependency(dep, meta) } } for _, match := range languageRegexp.FindAllStringSubmatch(source.Content, -1) { if len(match) > 1 { if dependency, ok := i.catalog.GetLanguageDependency(match[1]); ok { - meta.Dependencies.Add(dependency) + i.addDependency(dependency, meta) } } } @@ -158,12 +168,21 @@ func (i *baseInspector) discoverDependencies(source v1.SourceSpec, meta *Metadat for _, match := range camelTypeRegexp.FindAllStringSubmatch(source.Content, -1) { if len(match) > 1 { if dependency, ok := i.catalog.GetJavaTypeDependency(match[1]); ok { - meta.Dependencies.Add(dependency) + i.addDependency(dependency, meta) } } } } +func (i *baseInspector) addDependency(dependency string, meta *Metadata) { + if i.catalog.Runtime.Provider == v1.RuntimeProviderQuarkus { + if strings.HasPrefix(dependency, "camel:") { + dependency = "camel-quarkus:" + strings.TrimPrefix(dependency, "camel:") + } + } + meta.Dependencies.Add(dependency) +} + func (i *baseInspector) decodeComponent(uri string) string { uriSplit := strings.SplitN(uri, ":", 2) if len(uriSplit) < 2 { diff --git a/pkg/util/source/inspector_xml.go b/pkg/util/source/inspector_xml.go index f68d974..952b799 100644 --- a/pkg/util/source/inspector_xml.go +++ b/pkg/util/source/inspector_xml.go @@ -44,16 +44,16 @@ func (i XMLInspector) Extract(source v1.SourceSpec, meta *Metadata) error { if se, ok := t.(xml.StartElement); ok { switch se.Name.Local { case "rest", "restConfiguration": - meta.Dependencies.Add("camel:rest") + i.addDependency("camel:rest", meta) case "circuitBreaker": - meta.Dependencies.Add("camel:hystrix") + i.addDependency("camel:hystrix", meta) case "simple": - meta.Dependencies.Add("camel:bean") + i.addDependency("camel:bean", meta) case "language": for _, a := range se.Attr { if a.Name.Local == "language" { if dependency, ok := i.catalog.GetLanguageDependency(a.Value); ok { - meta.Dependencies.Add(dependency) + i.addDependency(dependency, meta) } } } @@ -72,7 +72,7 @@ func (i XMLInspector) Extract(source v1.SourceSpec, meta *Metadata) error { } if dependency, ok := i.catalog.GetLanguageDependency(se.Name.Local); ok { - meta.Dependencies.Add(dependency) + i.addDependency(dependency, meta) } } } diff --git a/pkg/util/source/inspector_yaml.go b/pkg/util/source/inspector_yaml.go index 1a4ed47..b56f996 100644 --- a/pkg/util/source/inspector_yaml.go +++ b/pkg/util/source/inspector_yaml.go @@ -55,9 +55,9 @@ func (inspector YAMLInspector) Extract(source v1.SourceSpec, meta *Metadata) err func (inspector YAMLInspector) parseStep(key string, content interface{}, meta *Metadata) error { switch key { case "rest": - meta.Dependencies.Add("camel:rest") + inspector.addDependency("camel:rest", meta) case "circuitBreaker": - meta.Dependencies.Add("camel:hystrix") + inspector.addDependency("camel:hystrix", meta) } var maybeURI string @@ -71,13 +71,13 @@ func (inspector YAMLInspector) parseStep(key string, content interface{}, meta * } if _, ok := t["simple"]; ok { - meta.Dependencies.Add("camel:bean") + inspector.addDependency("camel:bean", meta) } if _, ok := t["language"]; ok { if s, ok := t["language"].(string); ok { if dependency, ok := inspector.catalog.GetLanguageDependency(s); ok { - meta.Dependencies.Add(dependency) + inspector.addDependency(dependency, meta) } } else if m, ok := t["language"].(map[interface{}]interface{}); ok { if err := inspector.parseStep("language", m, meta); err != nil { @@ -89,7 +89,7 @@ func (inspector YAMLInspector) parseStep(key string, content interface{}, meta * for k := range t { if s, ok := k.(string); ok { if dependency, ok := inspector.catalog.GetLanguageDependency(s); ok { - meta.Dependencies.Add(dependency) + inspector.addDependency(dependency, meta) } } }