You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2022/01/12 13:53:47 UTC

[camel-k] 01/31: feat(maven): Support platform Maven settings

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

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

commit 57b9569f4b7687fa890ff33039d1cbb997bafa2f
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Thu Jan 6 17:43:32 2022 +0100

    feat(maven): Support platform Maven settings
---
 pkg/builder/project.go          | 10 +++++++++-
 pkg/builder/project_test.go     |  4 ++--
 pkg/builder/quarkus.go          |  6 ++++--
 pkg/builder/types.go            |  3 ++-
 pkg/cmd/util_dependencies.go    |  5 ++---
 pkg/trait/openapi.go            | 15 ++++++++++-----
 pkg/util/camel/catalog.go       | 27 +++++++++++++++++----------
 pkg/util/maven/maven_command.go | 23 +++++++++++++++++------
 8 files changed, 63 insertions(+), 30 deletions(-)

diff --git a/pkg/builder/project.go b/pkg/builder/project.go
index 609769d..e9cd843 100644
--- a/pkg/builder/project.go
+++ b/pkg/builder/project.go
@@ -23,6 +23,7 @@ import (
 	"github.com/apache/camel-k/pkg/util/camel"
 	"github.com/apache/camel-k/pkg/util/jvm"
 	"github.com/apache/camel-k/pkg/util/kubernetes"
+	"github.com/apache/camel-k/pkg/util/maven"
 )
 
 func init() {
@@ -90,9 +91,16 @@ func generateProjectSettings(ctx *builderContext) error {
 		return err
 	}
 	if val != "" {
-		ctx.Maven.SettingsData = []byte(val)
+		ctx.Maven.UserSettings = []byte(val)
 	}
 
+	settings := maven.NewSettings()
+	data, err := settings.MarshalBytes()
+	if err != nil {
+		return err
+	}
+	ctx.Maven.GlobalSettings = data
+
 	return nil
 }
 
diff --git a/pkg/builder/project_test.go b/pkg/builder/project_test.go
index 9855cac..9a1c7fa 100644
--- a/pkg/builder/project_test.go
+++ b/pkg/builder/project_test.go
@@ -74,7 +74,7 @@ func TestMavenSettingsFromConfigMap(t *testing.T) {
 	err = Project.GenerateProjectSettings.execute(&ctx)
 	assert.Nil(t, err)
 
-	assert.Equal(t, []byte("setting-data"), ctx.Maven.SettingsData)
+	assert.Equal(t, []byte("setting-data"), ctx.Maven.UserSettings)
 }
 
 func TestMavenSettingsFromSecret(t *testing.T) {
@@ -121,5 +121,5 @@ func TestMavenSettingsFromSecret(t *testing.T) {
 	err = Project.GenerateProjectSettings.execute(&ctx)
 	assert.Nil(t, err)
 
-	assert.Equal(t, []byte("setting-data"), ctx.Maven.SettingsData)
+	assert.Equal(t, []byte("setting-data"), ctx.Maven.UserSettings)
 }
diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go
index aa52763..7189c1a 100644
--- a/pkg/builder/quarkus.go
+++ b/pkg/builder/quarkus.go
@@ -151,7 +151,8 @@ func GenerateQuarkusProjectCommon(camelQuarkusVersion string, runtimeVersion str
 
 func buildQuarkusRunner(ctx *builderContext) error {
 	mc := maven.NewContext(path.Join(ctx.Path, "maven"))
-	mc.SettingsContent = ctx.Maven.SettingsData
+	mc.GlobalSettings = ctx.Maven.GlobalSettings
+	mc.UserSettings = ctx.Maven.UserSettings
 	mc.LocalRepository = ctx.Build.Maven.LocalRepository
 
 	if ctx.Maven.TrustStoreName != "" {
@@ -196,7 +197,8 @@ func BuildQuarkusRunnerCommon(ctx context.Context, mc maven.Context, project mav
 
 func computeQuarkusDependencies(ctx *builderContext) error {
 	mc := maven.NewContext(path.Join(ctx.Path, "maven"))
-	mc.SettingsContent = ctx.Maven.SettingsData
+	mc.GlobalSettings = ctx.Maven.GlobalSettings
+	mc.UserSettings = ctx.Maven.UserSettings
 	mc.LocalRepository = ctx.Build.Maven.LocalRepository
 
 	// Process artifacts list and add it to existing artifacts
diff --git a/pkg/builder/types.go b/pkg/builder/types.go
index 8897e11..bb2a2f2 100644
--- a/pkg/builder/types.go
+++ b/pkg/builder/types.go
@@ -85,7 +85,8 @@ type builderContext struct {
 	Resources         []resource
 	Maven             struct {
 		Project        maven.Project
-		SettingsData   []byte
+		UserSettings   []byte
+		GlobalSettings []byte
 		TrustStoreName string
 		TrustStorePass string
 	}
diff --git a/pkg/cmd/util_dependencies.go b/pkg/cmd/util_dependencies.go
index 8a5e3ea..96b83f8 100644
--- a/pkg/cmd/util_dependencies.go
+++ b/pkg/cmd/util_dependencies.go
@@ -140,7 +140,7 @@ func getTransitiveDependencies(ctx context.Context, catalog *camel.RuntimeCatalo
 		if err != nil {
 			return nil, err
 		}
-		mc.SettingsContent = settingsData
+		mc.UserSettings = settingsData
 	}
 
 	// Make maven command less verbose
@@ -210,7 +210,6 @@ func getLocalBuildRoutes(integrationDirectory string) ([]string, error) {
 
 func generateCatalog(ctx context.Context) (*camel.RuntimeCatalog, error) {
 	// A Camel catalog is required for this operation
-	settings := ""
 	mvn := v1.MavenSpec{
 		LocalRepository: "",
 	}
@@ -220,7 +219,7 @@ func generateCatalog(ctx context.Context) (*camel.RuntimeCatalog, error) {
 	}
 	var providerDependencies []maven.Dependency
 	var caCert []byte
-	catalog, err := camel.GenerateCatalogCommon(ctx, settings, caCert, mvn, runtime, providerDependencies)
+	catalog, err := camel.GenerateCatalogCommon(ctx, nil, nil, caCert, mvn, runtime, providerDependencies)
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/trait/openapi.go b/pkg/trait/openapi.go
index a4545be..1961355 100644
--- a/pkg/trait/openapi.go
+++ b/pkg/trait/openapi.go
@@ -175,7 +175,7 @@ func (t *openAPITrait) generateFromDataSpecs(e *Environment, tmpDir string, spec
 			}
 		}
 
-		// Add an additional source that references the config map
+		// Add a source that references the config map
 		generatedSources = append(generatedSources, v1.SourceSpec{
 			DataSpec: v1.DataSpec{
 				Name:        generatedSourceName,
@@ -256,13 +256,18 @@ func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.Dat
 	mc.AddArgument("-Dopenapi.spec=" + in)
 	mc.AddArgument("-Ddsl.out=" + out)
 
-	settings, err := kubernetes.ResolveValueSource(e.Ctx, e.Client, e.Platform.Namespace, &e.Platform.Status.Build.Maven.Settings)
-	if err != nil {
+	if settings, err := kubernetes.ResolveValueSource(e.Ctx, e.Client, e.Platform.Namespace, &e.Platform.Status.Build.Maven.Settings); err != nil {
 		return err
+	} else if settings != "" {
+		mc.UserSettings = []byte(settings)
 	}
-	if settings != "" {
-		mc.SettingsContent = []byte(settings)
+
+	settings := maven.NewSettings()
+	data, err := settings.MarshalBytes()
+	if err != nil {
+		return err
 	}
+	mc.GlobalSettings = data
 
 	if e.Platform.Status.Build.Maven.CASecret != nil {
 		certData, err := kubernetes.GetSecretRefData(e.Ctx, e.Client, e.Platform.Namespace, e.Platform.Status.Build.Maven.CASecret)
diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go
index b645955..88df86d 100644
--- a/pkg/util/camel/catalog.go
+++ b/pkg/util/camel/catalog.go
@@ -21,14 +21,13 @@ import (
 	"context"
 	"path"
 
-	"github.com/apache/camel-k/pkg/util"
-
 	yaml2 "gopkg.in/yaml.v2"
 
-	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
+	ctrl "sigs.k8s.io/controller-runtime/pkg/client"
 
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/resources"
+	"github.com/apache/camel-k/pkg/util"
 	"github.com/apache/camel-k/pkg/util/defaults"
 	"github.com/apache/camel-k/pkg/util/jvm"
 	"github.com/apache/camel-k/pkg/util/kubernetes"
@@ -75,13 +74,18 @@ func catalogForRuntimeProvider(provider v1.RuntimeProvider) (*RuntimeCatalog, er
 
 func GenerateCatalog(
 	ctx context.Context,
-	client k8sclient.Reader,
+	client ctrl.Reader,
 	namespace string,
 	mvn v1.MavenSpec,
 	runtime v1.RuntimeSpec,
 	providerDependencies []maven.Dependency) (*RuntimeCatalog, error) {
 
-	settings, err := kubernetes.ResolveValueSource(ctx, client, namespace, &mvn.Settings)
+	userSettings, err := kubernetes.ResolveValueSource(ctx, client, namespace, &mvn.Settings)
+	if err != nil {
+		return nil, err
+	}
+	settings := maven.NewSettings()
+	globalSettings, err := settings.MarshalBytes()
 	if err != nil {
 		return nil, err
 	}
@@ -94,12 +98,13 @@ func GenerateCatalog(
 		}
 	}
 
-	return GenerateCatalogCommon(ctx, settings, caCert, mvn, runtime, providerDependencies)
+	return GenerateCatalogCommon(ctx, globalSettings, []byte(userSettings), caCert, mvn, runtime, providerDependencies)
 }
 
 func GenerateCatalogCommon(
 	ctx context.Context,
-	settings string,
+	globalSettings []byte,
+	userSettings []byte,
 	caCert []byte,
 	mvn v1.MavenSpec,
 	runtime v1.RuntimeSpec,
@@ -116,9 +121,11 @@ func GenerateCatalogCommon(
 		mc.AddSystemProperty("catalog.file", "catalog.yaml")
 		mc.AddSystemProperty("catalog.runtime", string(runtime.Provider))
 
-		mc.SettingsContent = nil
-		if settings != "" {
-			mc.SettingsContent = []byte(settings)
+		if globalSettings != nil {
+			mc.GlobalSettings = globalSettings
+		}
+		if userSettings != nil {
+			mc.UserSettings = userSettings
 		}
 
 		if caCert != nil {
diff --git a/pkg/util/maven/maven_command.go b/pkg/util/maven/maven_command.go
index e42d9cd..96c819b 100644
--- a/pkg/util/maven/maven_command.go
+++ b/pkg/util/maven/maven_command.go
@@ -62,12 +62,16 @@ func (c *Command) Do(ctx context.Context) error {
 	}
 
 	settingsPath := path.Join(c.context.Path, "settings.xml")
-	settingsExists, err := util.FileExists(settingsPath)
-	if err != nil {
+	if settingsExists, err := util.FileExists(settingsPath); err != nil {
 		return err
+	} else if settingsExists {
+		args = append(args, "--global-settings", settingsPath)
 	}
 
-	if settingsExists {
+	settingsPath = path.Join(c.context.Path, "user-settings.xml")
+	if settingsExists, err := util.FileExists(settingsPath); err != nil {
+		return err
+	} else if settingsExists {
 		args = append(args, "--settings", settingsPath)
 	}
 
@@ -162,7 +166,8 @@ func NewContext(buildDir string) Context {
 type Context struct {
 	Path                string
 	ExtraMavenOpts      []string
-	SettingsContent     []byte
+	GlobalSettings      []byte
+	UserSettings        []byte
 	AdditionalArguments []string
 	AdditionalEntries   map[string]interface{}
 	LocalRepository     string
@@ -197,8 +202,14 @@ func generateProjectStructure(context Context, project Project) error {
 		return err
 	}
 
-	if context.SettingsContent != nil {
-		if err := util.WriteFileWithContent(path.Join(context.Path, "settings.xml"), context.SettingsContent); err != nil {
+	if context.GlobalSettings != nil {
+		if err := util.WriteFileWithContent(path.Join(context.Path, "settings.xml"), context.GlobalSettings); err != nil {
+			return err
+		}
+	}
+
+	if context.UserSettings != nil {
+		if err := util.WriteFileWithContent(path.Join(context.Path, "user-settings.xml"), context.UserSettings); err != nil {
 			return err
 		}
 	}