Skip to content

Commit

Permalink
Add shortcut for repositories #717
Browse files Browse the repository at this point in the history
  • Loading branch information
lburgazzoli committed Jun 3, 2019
1 parent 80b3cf6 commit 7527f34
Show file tree
Hide file tree
Showing 15 changed files with 456 additions and 211 deletions.
65 changes: 31 additions & 34 deletions pkg/builder/builder_steps.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import (
"reflect"
"strings"

"github.com/apache/camel-k/pkg/util/kubernetes"

k8sclient "sigs.k8s.io/controller-runtime/pkg/client"

"github.com/scylladb/go-set/strset"
Expand Down Expand Up @@ -119,11 +121,11 @@ func generateProject(ctx *Context) error {
return err
}

ctx.Project = p
ctx.Maven.Project = p
//
// set-up dependencies
//
ctx.Project.AddDependencyGAV("org.apache.camel.k", "camel-k-runtime-jvm", ctx.Build.RuntimeVersion)
ctx.Maven.Project.AddDependencyGAV("org.apache.camel.k", "camel-k-runtime-jvm", ctx.Build.RuntimeVersion)

for _, d := range ctx.Build.Dependencies {
switch {
Expand All @@ -134,24 +136,24 @@ func generateProject(ctx *Context) error {
artifactID = "camel-" + artifactID
}

ctx.Project.AddDependencyGAV("org.apache.camel", artifactID, "")
ctx.Maven.Project.AddDependencyGAV("org.apache.camel", artifactID, "")
case strings.HasPrefix(d, "camel-k:"):
artifactID := strings.TrimPrefix(d, "camel-k:")

if !strings.HasPrefix(artifactID, "camel-") {
artifactID = "camel-" + artifactID
}

ctx.Project.AddDependencyGAV("org.apache.camel.k", artifactID, ctx.Build.RuntimeVersion)
ctx.Maven.Project.AddDependencyGAV("org.apache.camel.k", artifactID, ctx.Build.RuntimeVersion)
case strings.HasPrefix(d, "mvn:"):
mid := strings.TrimPrefix(d, "mvn:")
gav := strings.Replace(mid, "/", ":", -1)

ctx.Project.AddEncodedDependencyGAV(gav)
ctx.Maven.Project.AddEncodedDependencyGAV(gav)
case strings.HasPrefix(d, "runtime:"):
artifactID := strings.Replace(d, "runtime:", "camel-k-runtime-", 1)

ctx.Project.AddDependencyGAV("org.apache.camel.k", artifactID, ctx.Build.RuntimeVersion)
ctx.Maven.Project.AddDependencyGAV("org.apache.camel.k", artifactID, ctx.Build.RuntimeVersion)
case strings.HasPrefix(d, "bom:"):
// no-op
default:
Expand All @@ -160,7 +162,7 @@ func generateProject(ctx *Context) error {
}

// Add Log4j 2 SLF4J binding as default logging impl
ctx.Project.AddDependency(maven.Dependency{
ctx.Maven.Project.AddDependency(maven.Dependency{
GroupID: "org.apache.logging.log4j",
ArtifactID: "log4j-slf4j-impl",
Version: "2.11.2",
Expand All @@ -172,12 +174,13 @@ func generateProject(ctx *Context) error {

// generateProjectSettings --
func generateProjectSettings(ctx *Context) error {
settings, err := NewMavenSettings(ctx)
val, err := kubernetes.ResolveValueSource(ctx.C, ctx.Client, ctx.Namespace, &ctx.Build.Platform.Build.Maven.Settings)
if err != nil {
return err
}

ctx.Settings = settings
if val != "" {
ctx.Maven.SettingsData = []byte(val)
}

return nil
}
Expand All @@ -186,8 +189,8 @@ func injectDependencies(ctx *Context) error {
//
// Add dependencies from catalog
//
deps := make([]maven.Dependency, len(ctx.Project.Dependencies))
copy(deps, ctx.Project.Dependencies)
deps := make([]maven.Dependency, len(ctx.Maven.Project.Dependencies))
copy(deps, ctx.Maven.Project.Dependencies)

for _, d := range deps {
if a, ok := ctx.Catalog.Artifacts[d.ArtifactID]; ok {
Expand All @@ -197,24 +200,24 @@ func injectDependencies(ctx *Context) error {
ArtifactID: dep.ArtifactID,
}

ctx.Project.AddDependency(md)
ctx.Maven.Project.AddDependency(md)

for _, e := range dep.Exclusions {
me := maven.Exclusion{
GroupID: e.GroupID,
ArtifactID: e.ArtifactID,
}

ctx.Project.AddDependencyExclusion(md, me)
ctx.Maven.Project.AddDependencyExclusion(md, me)
}
}
}
}
//
// post process dependencies
//
deps = make([]maven.Dependency, len(ctx.Project.Dependencies))
copy(deps, ctx.Project.Dependencies)
deps = make([]maven.Dependency, len(ctx.Maven.Project.Dependencies))
copy(deps, ctx.Maven.Project.Dependencies)

for _, d := range deps {
if a, ok := ctx.Catalog.Artifacts[d.ArtifactID]; ok {
Expand All @@ -229,7 +232,7 @@ func injectDependencies(ctx *Context) error {
ArtifactID: e.ArtifactID,
}

ctx.Project.AddDependencyExclusion(md, me)
ctx.Maven.Project.AddDependencyExclusion(md, me)
}
}
}
Expand All @@ -238,45 +241,39 @@ func injectDependencies(ctx *Context) error {
}

func sanitizeDependencies(ctx *Context) error {
for i := 0; i < len(ctx.Project.Dependencies); i++ {
dep := ctx.Project.Dependencies[i]
for i := 0; i < len(ctx.Maven.Project.Dependencies); i++ {
dep := ctx.Maven.Project.Dependencies[i]

switch dep.GroupID {
case "org.apache.camel":
//
// Remove the version so we force using the one configured by the bom
//
ctx.Project.Dependencies[i].Version = ""
ctx.Maven.Project.Dependencies[i].Version = ""
case "org.apache.camel.k":
//
// Force every runtime dependency to have the required version discardin
// any version eventually set on the catalog
//
ctx.Project.Dependencies[i].Version = ctx.Build.RuntimeVersion
ctx.Maven.Project.Dependencies[i].Version = ctx.Build.RuntimeVersion
}
}

return nil
}

func computeDependencies(ctx *Context) error {
p := path.Join(ctx.Path, "maven")
mc := maven.NewContext(path.Join(ctx.Path, "maven"), ctx.Maven.Project)
mc.Settings = ctx.Maven.Settings
mc.SettingsData = ctx.Maven.SettingsData
mc.AddArguments(maven.ExtraOptions(ctx.Build.Platform.Build.LocalRepository)...)
mc.AddArgumentf("org.apache.camel.k:camel-k-maven-plugin:%s:generate-dependency-list", ctx.Build.RuntimeVersion)

err := maven.CreateStructure(p, ctx.Project, ctx.Settings)
if err != nil {
return err
}

opts := make([]string, 0, 2)
opts = append(opts, maven.ExtraOptions(ctx.Build.Platform.Build.LocalRepository)...)
opts = append(opts, fmt.Sprintf("org.apache.camel.k:camel-k-maven-plugin:%s:generate-dependency-list", ctx.Build.RuntimeVersion))

err = maven.Run(p, opts...)
if err != nil {
if err := maven.Run(mc); err != nil {
return errors.Wrap(err, "failure while determining classpath")
}

dependencies := path.Join(p, "target", "dependencies.yaml")
dependencies := path.Join(mc.Path, "target", "dependencies.yaml")
content, err := ioutil.ReadFile(dependencies)
if err != nil {
return err
Expand Down
62 changes: 31 additions & 31 deletions pkg/builder/builder_steps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,29 +75,29 @@ func TestGenerateJvmProject(t *testing.T) {
err = injectDependencies(&ctx)
assert.Nil(t, err)

assert.Equal(t, 1, len(ctx.Project.DependencyManagement.Dependencies))
assert.Equal(t, "org.apache.camel", ctx.Project.DependencyManagement.Dependencies[0].GroupID)
assert.Equal(t, "camel-bom", ctx.Project.DependencyManagement.Dependencies[0].ArtifactID)
assert.Equal(t, catalog.Version, ctx.Project.DependencyManagement.Dependencies[0].Version)
assert.Equal(t, "pom", ctx.Project.DependencyManagement.Dependencies[0].Type)
assert.Equal(t, "import", ctx.Project.DependencyManagement.Dependencies[0].Scope)

assert.Equal(t, 4, len(ctx.Project.Dependencies))
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Equal(t, 1, len(ctx.Maven.Project.DependencyManagement.Dependencies))
assert.Equal(t, "org.apache.camel", ctx.Maven.Project.DependencyManagement.Dependencies[0].GroupID)
assert.Equal(t, "camel-bom", ctx.Maven.Project.DependencyManagement.Dependencies[0].ArtifactID)
assert.Equal(t, catalog.Version, ctx.Maven.Project.DependencyManagement.Dependencies[0].Version)
assert.Equal(t, "pom", ctx.Maven.Project.DependencyManagement.Dependencies[0].Type)
assert.Equal(t, "import", ctx.Maven.Project.DependencyManagement.Dependencies[0].Scope)

assert.Equal(t, 4, len(ctx.Maven.Project.Dependencies))
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel.k",
ArtifactID: "camel-k-runtime-jvm",
Version: defaults.RuntimeVersion,
Type: "jar",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel",
ArtifactID: "camel-core",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel.k",
ArtifactID: "camel-k-adapter-camel-2",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.logging.log4j",
ArtifactID: "log4j-slf4j-impl",
Version: "2.11.2",
Expand Down Expand Up @@ -152,7 +152,7 @@ func TestMavenSettingsFromConfigMap(t *testing.T) {
err = generateProjectSettings(&ctx)
assert.Nil(t, err)

assert.Equal(t, []byte("setting-data"), ctx.Settings.Content)
assert.Equal(t, []byte("setting-data"), ctx.Maven.SettingsData)
}

func TestMavenSettingsFromSecret(t *testing.T) {
Expand Down Expand Up @@ -202,7 +202,7 @@ func TestMavenSettingsFromSecret(t *testing.T) {
err = generateProjectSettings(&ctx)
assert.Nil(t, err)

assert.Equal(t, []byte("setting-data"), ctx.Settings.Content)
assert.Equal(t, []byte("setting-data"), ctx.Maven.SettingsData)
}

func TestGenerateGroovyProject(t *testing.T) {
Expand All @@ -229,40 +229,40 @@ func TestGenerateGroovyProject(t *testing.T) {
err = injectDependencies(&ctx)
assert.Nil(t, err)

assert.Equal(t, 1, len(ctx.Project.DependencyManagement.Dependencies))
assert.Equal(t, "org.apache.camel", ctx.Project.DependencyManagement.Dependencies[0].GroupID)
assert.Equal(t, "camel-bom", ctx.Project.DependencyManagement.Dependencies[0].ArtifactID)
assert.Equal(t, catalog.Version, ctx.Project.DependencyManagement.Dependencies[0].Version)
assert.Equal(t, "pom", ctx.Project.DependencyManagement.Dependencies[0].Type)
assert.Equal(t, "import", ctx.Project.DependencyManagement.Dependencies[0].Scope)
assert.Equal(t, 1, len(ctx.Maven.Project.DependencyManagement.Dependencies))
assert.Equal(t, "org.apache.camel", ctx.Maven.Project.DependencyManagement.Dependencies[0].GroupID)
assert.Equal(t, "camel-bom", ctx.Maven.Project.DependencyManagement.Dependencies[0].ArtifactID)
assert.Equal(t, catalog.Version, ctx.Maven.Project.DependencyManagement.Dependencies[0].Version)
assert.Equal(t, "pom", ctx.Maven.Project.DependencyManagement.Dependencies[0].Type)
assert.Equal(t, "import", ctx.Maven.Project.DependencyManagement.Dependencies[0].Scope)

assert.Equal(t, 6, len(ctx.Project.Dependencies))
assert.Equal(t, 6, len(ctx.Maven.Project.Dependencies))

assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel.k",
ArtifactID: "camel-k-runtime-jvm",
Version: defaults.RuntimeVersion,
Type: "jar",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel.k",
ArtifactID: "camel-k-runtime-groovy",
Version: defaults.RuntimeVersion,
Type: "jar",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel",
ArtifactID: "camel-core",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel.k",
ArtifactID: "camel-k-adapter-camel-2",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel",
ArtifactID: "camel-groovy",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.logging.log4j",
ArtifactID: "log4j-slf4j-impl",
Version: "2.11.2",
Expand Down Expand Up @@ -299,23 +299,23 @@ func TestSanitizeDependencies(t *testing.T) {
err = sanitizeDependencies(&ctx)
assert.Nil(t, err)

assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel.k",
ArtifactID: "camel-k-runtime-jvm",
Version: defaults.RuntimeVersion,
Type: "jar",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel",
ArtifactID: "camel-core",
Type: "jar",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "org.apache.camel",
ArtifactID: "camel-undertow",
Type: "jar",
})
assert.Contains(t, ctx.Project.Dependencies, maven.Dependency{
assert.Contains(t, ctx.Maven.Project.Dependencies, maven.Dependency{
GroupID: "com.mycompany",
ArtifactID: "my-dep",
Version: "1.2.3",
Expand Down
8 changes: 6 additions & 2 deletions pkg/builder/builder_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,18 @@ type Context struct {
PublicImage string
Error error
Namespace string
Project maven.Project
Settings maven.Settings
Path string
Artifacts []v1alpha1.Artifact
SelectedArtifacts []v1alpha1.Artifact
Archive string
ContextFilter func(integrationContext *v1alpha1.IntegrationContext) bool
Resources []Resource

Maven struct {
Project maven.Project
Settings *maven.Settings
SettingsData []byte
}
}

// HasRequiredImage --
Expand Down
19 changes: 1 addition & 18 deletions pkg/builder/builder_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ package builder
import (
"strings"

"github.com/apache/camel-k/pkg/util/kubernetes"

"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
"github.com/apache/camel-k/pkg/util/camel"
"github.com/apache/camel-k/pkg/util/defaults"
Expand Down Expand Up @@ -61,7 +59,7 @@ func NewMavenProject(ctx *Context) (maven.Project, error) {
ctx.Catalog = c
}

p := maven.NewProject("org.apache.camel.k.integration", "camel-k-integration", defaults.Version)
p := maven.NewProjectWithGAV("org.apache.camel.k.integration", "camel-k-integration", defaults.Version)
p.Properties = ctx.Build.Platform.Build.Properties
p.DependencyManagement = maven.DependencyManagement{Dependencies: make([]maven.Dependency, 0)}
p.Dependencies = make([]maven.Dependency, 0)
Expand Down Expand Up @@ -99,18 +97,3 @@ func NewMavenProject(ctx *Context) (maven.Project, error) {

return p, nil
}

// NewMavenSettings --
func NewMavenSettings(ctx *Context) (maven.Settings, error) {
settings := maven.NewSettings()

val, err := kubernetes.ResolveValueSource(ctx.C, ctx.Client, ctx.Namespace, &ctx.Build.Platform.Build.Maven.Settings)
if err != nil {
return maven.Settings{}, err
}
if val != "" {
settings.Content = []byte(val)
}

return settings, nil
}
Loading

0 comments on commit 7527f34

Please sign in to comment.