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 <[email protected]>
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)
}
}
}