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)) }
