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