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 083c4f8d344b42e07b2fe432ca90a85a0fdb62a5
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Mon Jan 10 10:44:45 2022 +0100

    chore(maven): Unify settings API
---
 pkg/cmd/install.go                    | 55 +++++++++++++++-----------
 pkg/cmd/util_dependencies.go          | 21 ++--------
 pkg/util/maven/maven_repositories.go  | 44 ++++++++++++++++++++-
 pkg/util/maven/maven_settings.go      | 73 -----------------------------------
 pkg/util/maven/maven_settings_test.go | 35 +++++------------
 5 files changed, 87 insertions(+), 141 deletions(-)

diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index 0f1225c..6807324 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -41,6 +41,7 @@ import (
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
        "github.com/apache/camel-k/pkg/client"
        "github.com/apache/camel-k/pkg/install"
+       "github.com/apache/camel-k/pkg/util"
        "github.com/apache/camel-k/pkg/util/kubernetes"
        "github.com/apache/camel-k/pkg/util/maven"
        "github.com/apache/camel-k/pkg/util/olm"
@@ -389,32 +390,14 @@ func (o *installCmdOptions) install(cobraCmd 
*cobra.Command, _ []string) error {
                }
 
                if len(o.MavenRepositories) > 0 {
-                       var repositories []v1.Repository
-                       var mirrors []maven.Mirror
-
-                       for i, r := range o.MavenRepositories {
-                               if strings.Contains(r, "@mirrorOf=") {
-                                       mirror := maven.NewMirror(r)
-                                       if mirror.ID == "" {
-                                               mirror.ID = 
fmt.Sprintf("mirror-%03d", i)
-                                       }
-                                       mirrors = append(mirrors, mirror)
-                               } else {
-                                       repository := maven.NewRepository(r)
-                                       if repository.ID == "" {
-                                               repository.ID = 
fmt.Sprintf("repository-%03d", i)
-                                       }
-                                       repositories = append(repositories, 
repository)
-                               }
+                       settings, err := 
maven.NewSettings(maven.Repositories(o.MavenRepositories...))
+                       if err != nil {
+                               return err
                        }
-
-                       settings := maven.NewDefaultSettings(repositories, 
mirrors)
-
-                       err := createDefaultMavenSettingsConfigMap(o.Context, 
c, namespace, platform.Name, settings)
+                       err = createDefaultMavenSettingsConfigMap(o.Context, c, 
namespace, platform.Name, settings)
                        if err != nil {
                                return err
                        }
-
                        platform.Spec.Build.Maven.Settings.ConfigMapKeyRef = 
&corev1.ConfigMapKeySelector{
                                LocalObjectReference: 
corev1.LocalObjectReference{
                                        Name: platform.Name + "-maven-settings",
@@ -712,7 +695,7 @@ func decodeSecretKeySelector(secretKey string) 
(*corev1.SecretKeySelector, error
 }
 
 func createDefaultMavenSettingsConfigMap(ctx context.Context, client 
client.Client, namespace, name string, settings maven.Settings) error {
-       cm, err := maven.SettingsConfigMap(namespace, name, settings)
+       cm, err := settingsConfigMap(namespace, name, settings)
        if err != nil {
                return err
        }
@@ -745,3 +728,29 @@ func createDefaultMavenSettingsConfigMap(ctx 
context.Context, client client.Clie
 
        return nil
 }
+
+func settingsConfigMap(namespace string, name string, settings maven.Settings) 
(*corev1.ConfigMap, error) {
+       data, err := util.EncodeXML(settings)
+       if err != nil {
+               return nil, err
+       }
+
+       cm := &corev1.ConfigMap{
+               TypeMeta: metav1.TypeMeta{
+                       Kind:       "ConfigMap",
+                       APIVersion: corev1.SchemeGroupVersion.String(),
+               },
+               ObjectMeta: metav1.ObjectMeta{
+                       Name:      name + "-maven-settings",
+                       Namespace: namespace,
+                       Labels: map[string]string{
+                               "app": "camel-k",
+                       },
+               },
+               Data: map[string]string{
+                       "settings.xml": string(data),
+               },
+       }
+
+       return cm, nil
+}
diff --git a/pkg/cmd/util_dependencies.go b/pkg/cmd/util_dependencies.go
index 96b83f8..1409d7d 100644
--- a/pkg/cmd/util_dependencies.go
+++ b/pkg/cmd/util_dependencies.go
@@ -117,25 +117,10 @@ func getTransitiveDependencies(ctx context.Context, 
catalog *camel.RuntimeCatalo
        mc.LocalRepository = ""
 
        if len(repositories) > 0 {
-               var repoList []v1.Repository
-               var mirrors []maven.Mirror
-               for i, repo := range repositories {
-                       if strings.Contains(repo, "@mirrorOf=") {
-                               mirror := maven.NewMirror(repo)
-                               if mirror.ID == "" {
-                                       mirror.ID = fmt.Sprintf("mirror-%03d", 
i)
-                               }
-                               mirrors = append(mirrors, mirror)
-                       } else {
-                               repository := maven.NewRepository(repo)
-                               if repository.ID == "" {
-                                       repository.ID = 
fmt.Sprintf("repository-%03d", i)
-                               }
-                               repoList = append(repoList, repository)
-                       }
+               settings, err := maven.NewSettings(maven.DefaultRepositories, 
maven.Repositories(repositories...))
+               if err != nil {
+                       return nil, err
                }
-
-               settings := maven.NewDefaultSettings(repoList, mirrors)
                settingsData, err := util.EncodeXML(settings)
                if err != nil {
                        return nil, err
diff --git a/pkg/util/maven/maven_repositories.go 
b/pkg/util/maven/maven_repositories.go
index e35d686..710dbad 100644
--- a/pkg/util/maven/maven_repositories.go
+++ b/pkg/util/maven/maven_repositories.go
@@ -18,16 +18,16 @@ limitations under the License.
 package maven
 
 import (
+       "fmt"
        "strings"
 
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 )
 
-var DefaultRepositories = &defaultRepositories{}
+var DefaultRepositories = defaultRepositories{}
 
 type defaultRepositories struct{}
 
-// nolint: unparam
 func (o defaultRepositories) apply(settings *Settings) error {
        for _, repository := range defaultMavenRepositories() {
                upsertRepository(repository, &settings.Profiles[0].Repositories)
@@ -43,6 +43,36 @@ func defaultMavenRepositories() (repositories 
[]v1.Repository) {
        return
 }
 
+func Repositories(repositories ...string) SettingsOption {
+       return extraRepositories{
+               repositories: repositories,
+       }
+}
+
+type extraRepositories struct {
+       repositories []string
+}
+
+func (o extraRepositories) apply(settings *Settings) error {
+       for i, r := range o.repositories {
+               if strings.Contains(r, "@mirrorOf=") {
+                       mirror := NewMirror(r)
+                       if mirror.ID == "" {
+                               mirror.ID = fmt.Sprintf("mirror-%03d", i)
+                       }
+                       upsertMirror(mirror, &settings.Mirrors)
+               } else {
+                       repository := NewRepository(r)
+                       if repository.ID == "" {
+                               repository.ID = fmt.Sprintf("repository-%03d", 
i)
+                       }
+                       upsertRepository(repository, 
&settings.Profiles[0].Repositories)
+                       upsertRepository(repository, 
&settings.Profiles[0].PluginRepositories)
+               }
+       }
+       return nil
+}
+
 func upsertRepository(repository v1.Repository, repositories *[]v1.Repository) 
{
        for i, r := range *repositories {
                if r.ID == repository.ID {
@@ -52,3 +82,13 @@ func upsertRepository(repository v1.Repository, repositories 
*[]v1.Repository) {
        }
        *repositories = append(*repositories, repository)
 }
+
+func upsertMirror(mirror Mirror, mirrors *[]Mirror) {
+       for i, r := range *mirrors {
+               if r.ID == mirror.ID {
+                       (*mirrors)[i] = mirror
+                       return
+               }
+       }
+       *mirrors = append(*mirrors, mirror)
+}
diff --git a/pkg/util/maven/maven_settings.go b/pkg/util/maven/maven_settings.go
index e1e03f3..87141c0 100644
--- a/pkg/util/maven/maven_settings.go
+++ b/pkg/util/maven/maven_settings.go
@@ -20,10 +20,6 @@ package maven
 import (
        "encoding/xml"
 
-       corev1 "k8s.io/api/core/v1"
-       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-
-       v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
        "github.com/apache/camel-k/pkg/util"
 )
 
@@ -64,72 +60,3 @@ func NewSettings(options ...SettingsOption) (Settings, 
error) {
 
        return settings, nil
 }
-
-func NewDefaultSettings(repositories []v1.Repository, mirrors []Mirror) 
Settings {
-       settings := Settings{
-               XMLName:           xml.Name{Local: "settings"},
-               XMLNs:             "http://maven.apache.org/SETTINGS/1.0.0";,
-               XMLNsXsi:          "http://www.w3.org/2001/XMLSchema-instance";,
-               XsiSchemaLocation: "http://maven.apache.org/SETTINGS/1.0.0 
https://maven.apache.org/xsd/settings-1.0.0.xsd";,
-       }
-
-       var additionalRepos []v1.Repository
-       for _, defaultRepo := range defaultMavenRepositories() {
-               if !containsRepo(repositories, defaultRepo.ID) {
-                       additionalRepos = append(additionalRepos, defaultRepo)
-               }
-       }
-       if len(additionalRepos) > 0 {
-               repositories = append(additionalRepos, repositories...)
-       }
-
-       settings.Profiles = []Profile{
-               {
-                       ID: "maven-settings",
-                       Activation: Activation{
-                               ActiveByDefault: true,
-                       },
-                       Repositories:       repositories,
-                       PluginRepositories: repositories,
-               },
-       }
-
-       settings.Mirrors = mirrors
-
-       return settings
-}
-
-func containsRepo(repositories []v1.Repository, id string) bool {
-       for _, r := range repositories {
-               if r.ID == id {
-                       return true
-               }
-       }
-       return false
-}
-
-func SettingsConfigMap(namespace string, name string, settings Settings) 
(*corev1.ConfigMap, error) {
-       data, err := util.EncodeXML(settings)
-       if err != nil {
-               return nil, err
-       }
-
-       cm := &corev1.ConfigMap{
-               TypeMeta: metav1.TypeMeta{
-                       Kind:       "ConfigMap",
-                       APIVersion: corev1.SchemeGroupVersion.String(),
-               },
-               ObjectMeta: metav1.ObjectMeta{
-                       Name:      name + "-maven-settings",
-                       Namespace: namespace,
-                       Labels: map[string]string{
-                               "app": "camel-k",
-                       },
-               },
-               Data: map[string]string{
-                       "settings.xml": string(data),
-               },
-       }
-
-       return cm, nil
-}
diff --git a/pkg/util/maven/maven_settings_test.go 
b/pkg/util/maven/maven_settings_test.go
index eabe87f..3ad7ac1 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -64,7 +64,7 @@ const expectedDefaultSettings = `<?xml version="1.0" 
encoding="UTF-8"?>
   <localRepository></localRepository>
   <profiles>
     <profile>
-      <id>maven-settings</id>
+      <id>camel-k</id>
       <activation>
         <activeByDefault>true</activeByDefault>
       </activation>
@@ -108,7 +108,7 @@ const expectedDefaultSettingsWithExtraRepo = `<?xml 
version="1.0" encoding="UTF-
   <localRepository></localRepository>
   <profiles>
     <profile>
-      <id>maven-settings</id>
+      <id>camel-k</id>
       <activation>
         <activeByDefault>true</activeByDefault>
       </activation>
@@ -214,7 +214,8 @@ func TestSettingsGeneration(t *testing.T) {
 }
 
 func TestDefaultSettingsGeneration(t *testing.T) {
-       settings := NewDefaultSettings([]v1.Repository{}, []Mirror{})
+       settings, err := NewSettings(DefaultRepositories)
+       assert.Nil(t, err)
 
        content, err := util.EncodeXML(settings)
 
@@ -225,34 +226,18 @@ func TestDefaultSettingsGeneration(t *testing.T) {
 }
 
 func TestDefaultSettingsGenerationWithAdditionalRepo(t *testing.T) {
-       repositories := []v1.Repository{
-               NewRepository("https://repo1.maven.org/maven2@id=central";),
-               NewRepository("https://foo.bar.org/repo@id=foo";),
-       }
-       mirrors := []Mirror{
-               NewMirror("https://foo.bar.org/repo@id=foo@mirrorOf=*";),
+       repositories := []string{
+               "https://repo1.maven.org/maven2@id=central";,
+               "https://foo.bar.org/repo@id=foo";,
+               "https://foo.bar.org/repo@id=foo@mirrorOf=*";,
        }
-       settings := NewDefaultSettings(repositories, mirrors)
-
-       content, err := util.EncodeXML(settings)
-
+       settings, err := NewSettings(Repositories(repositories...))
        assert.Nil(t, err)
-       assert.NotNil(t, settings)
-
-       assert.Equal(t, expectedDefaultSettingsWithExtraRepo, string(content))
-}
-
-func TestCreateSettingsConfigMap(t *testing.T) {
-       settings := NewDefaultSettings([]v1.Repository{}, []Mirror{})
-
-       configMap, err := SettingsConfigMap("foo", "bar", settings)
-       assert.Nil(t, err)
-       assert.NotNil(t, configMap)
 
        content, err := util.EncodeXML(settings)
 
        assert.Nil(t, err)
        assert.NotNil(t, settings)
 
-       assert.Equal(t, string(content), configMap.Data["settings.xml"])
+       assert.Equal(t, expectedDefaultSettingsWithExtraRepo, string(content))
 }

Reply via email to