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

Reply via email to