This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new 5adfc7810 chore(builder): include jib profile in project
5adfc7810 is described below
commit 5adfc7810658fc65f988e41121c7a19d26ffd4d4
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Wed Mar 12 08:31:08 2025 +0100
chore(builder): include jib profile in project
It removes the need to include a new Configmap for every build.
---
pkg/builder/project.go | 14 +++---
pkg/builder/quarkus.go | 6 ++-
pkg/trait/builder.go | 12 -----
pkg/trait/builder_test.go | 20 +-------
pkg/util/jib/configuration.go | 86 +++------------------------------
pkg/util/jib/configuration_test.go | 89 -----------------------------------
pkg/util/maven/maven_project.go | 4 +-
pkg/util/maven/maven_project_test.go | 11 +++--
pkg/util/maven/maven_repositories.go | 26 ++++++----
pkg/util/maven/maven_settings.go | 2 +-
pkg/util/maven/maven_settings_test.go | 5 +-
pkg/util/maven/maven_types.go | 23 ++++-----
12 files changed, 62 insertions(+), 236 deletions(-)
diff --git a/pkg/builder/project.go b/pkg/builder/project.go
index d82550810..6f3e17e5c 100644
--- a/pkg/builder/project.go
+++ b/pkg/builder/project.go
@@ -201,17 +201,19 @@ func sanitizeDependencies(ctx *builderContext) error {
func injectProfiles(ctx *builderContext) error {
if ctx.Build.Maven.Profiles != nil {
- profiles := ""
- for i := range ctx.Build.Maven.Profiles {
- val, err := kubernetes.ResolveValueSource(ctx.C,
ctx.Client, ctx.Namespace, &ctx.Build.Maven.Profiles[i])
+ for _, p := range ctx.Build.Maven.Profiles {
+ val, err := kubernetes.ResolveValueSource(ctx.C,
ctx.Client, ctx.Namespace, &p)
if err != nil {
- return fmt.Errorf("could not load profile : %s:
%w. ", ctx.Build.Maven.Profiles[i].String(), err)
+ return fmt.Errorf("could not load profile : %s:
%w. ", p.String(), err)
}
if val != "" {
- profiles += val
+ profile := maven.Profile{}
+ if err := xml.Unmarshal([]byte(val), &profile);
err != nil {
+ return err
+ }
+ ctx.Maven.Project.AddProfile(profile)
}
}
- ctx.Maven.Project.AddProfiles(profiles)
}
return nil
}
diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go
index 7fdbc782f..647cf62e2 100644
--- a/pkg/builder/quarkus.go
+++ b/pkg/builder/quarkus.go
@@ -26,6 +26,7 @@ import (
"time"
"github.com/apache/camel-k/v2/pkg/util/boolean"
+ "github.com/apache/camel-k/v2/pkg/util/jib"
"github.com/apache/camel-k/v2/pkg/util/io"
@@ -131,7 +132,7 @@ func generateQuarkusProject(ctx *builderContext) error {
ctx.Build.Runtime.Metadata["quarkus.version"],
)
// Add Maven build extensions
- p.Build.Extensions = ctx.Build.Maven.Extension
+ p.Build.Extensions = &ctx.Build.Maven.Extension
// Add Maven repositories
p.Repositories = append(p.Repositories, ctx.Build.Maven.Repositories...)
p.PluginRepositories = append(p.PluginRepositories,
ctx.Build.Maven.Repositories...)
@@ -204,6 +205,9 @@ func generateQuarkusProjectCommon(runtimeProvider
v1.RuntimeProvider, runtimeVer
},
)
+ // Jib publish profile
+ p.AddProfile(jib.JibMavenProfile(jib.JibMavenPluginVersionDefault,
jib.JibLayerFilterExtensionMavenVersionDefault))
+
return p
}
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index 5291add36..a8a57587d 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -32,7 +32,6 @@ import (
v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
traitv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
"github.com/apache/camel-k/v2/pkg/builder"
- "github.com/apache/camel-k/v2/pkg/util/jib"
mvn "github.com/apache/camel-k/v2/pkg/util/maven"
"github.com/apache/camel-k/v2/pkg/util/property"
)
@@ -419,17 +418,6 @@ func (t *builderTrait) builderTask(e *Environment,
taskConf *v1.BuildConfigurati
}
}
- if e.Platform.Status.Build.PublishStrategy ==
v1.IntegrationPlatformBuildPublishStrategyJib {
- profile, err :=
jib.JibMavenProfile(e.CamelCatalog.GetJibMavenPluginVersion(),
e.CamelCatalog.GetJibLayerFilterExtensionMavenVersion())
- if err != nil {
- return nil, fmt.Errorf("error generating default maven
jib profile: %w. ", err)
- }
- if err := jib.CreateProfileConfigmap(e.Ctx, e.Client,
e.IntegrationKit, profile); err != nil {
- return nil, fmt.Errorf("could not create default maven
jib profile configmap: %w. ", err)
- }
- t.MavenProfiles = append(t.MavenProfiles,
"configmap:"+e.IntegrationKit.Name+"-publish-jib-profile/profile.xml")
- }
-
// User provides a maven profile
if t.MavenProfiles != nil {
mavenProfiles := make([]v1.ValueSource, 0)
diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go
index 6f85f1764..44e6942ac 100644
--- a/pkg/trait/builder_test.go
+++ b/pkg/trait/builder_test.go
@@ -84,7 +84,7 @@ func TestJibBuilderTrait(t *testing.T) {
conditions, traits, err := NewBuilderTestCatalog().apply(env)
require.NoError(t, err)
- assert.NotEmpty(t, traits)
+ assert.Empty(t, traits)
assert.NotEmpty(t, conditions)
assert.NotEmpty(t, env.ExecutedTraits)
assert.NotNil(t, env.GetTrait("builder"))
@@ -286,24 +286,6 @@ func TestInvalidMavenProfilesBuilderTrait(t *testing.T) {
assert.Contains(t, env.IntegrationKit.Status.Conditions[0].Message,
"fakeprofile")
}
-func TestMavenBuilderTraitJib(t *testing.T) {
- env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes,
v1.IntegrationPlatformBuildPublishStrategyJib, v1.BuildStrategyRoutine)
- builderTrait := createNominalBuilderTraitTest()
-
- err := builderTrait.Apply(env)
-
- require.NoError(t, err)
-
- assert.Equal(t, v1.ValueSource{
- ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
- LocalObjectReference: corev1.LocalObjectReference{
- Name: "my-kit-publish-jib-profile",
- },
- Key: "profile.xml",
- },
- }, env.Pipeline[0].Builder.Maven.MavenSpec.Profiles[0])
-}
-
func TestBuilderCustomTasks(t *testing.T) {
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
diff --git a/pkg/util/jib/configuration.go b/pkg/util/jib/configuration.go
index 38e42ff93..2f50285d8 100644
--- a/pkg/util/jib/configuration.go
+++ b/pkg/util/jib/configuration.go
@@ -19,18 +19,8 @@ limitations under the License.
package jib
import (
- "context"
- "encoding/xml"
- "fmt"
-
v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
- "github.com/apache/camel-k/v2/pkg/client"
- "github.com/apache/camel-k/v2/pkg/util"
"github.com/apache/camel-k/v2/pkg/util/maven"
-
- corev1 "k8s.io/api/core/v1"
- k8serrors "k8s.io/apimachinery/pkg/api/errors"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const JibMavenGoal = "jib:build"
@@ -46,74 +36,17 @@ const JibLayerFilterExtensionMavenVersionDefault = "0.3.0"
// See:
https://github.com/GoogleContainerTools/jib/blob/master/jib-maven-plugin/README.md#using-docker-configuration-files
const JibRegistryConfigEnvVar = "DOCKER_CONFIG"
-type JibBuild struct {
- Plugins []maven.Plugin `xml:"plugins>plugin,omitempty"`
-}
-
-type JibProfile struct {
- XMLName xml.Name
- ID string `xml:"id"`
- Build JibBuild `xml:"build,omitempty"`
-}
-
-// Create a Configmap containing the default jib profile.
-func CreateProfileConfigmap(ctx context.Context, c client.Client, kit
*v1.IntegrationKit, profile string) error {
- annotations := util.CopyMap(kit.Annotations)
- controller := true
- blockOwnerDeletion := true
- jibProfileConfigMap := &corev1.ConfigMap{
- TypeMeta: metav1.TypeMeta{
- Kind: "ConfigMap",
- APIVersion: "v1",
- },
- ObjectMeta: metav1.ObjectMeta{
- Name: kit.Name + "-publish-jib-profile",
- Namespace: kit.Namespace,
- Annotations: annotations,
- Labels: map[string]string{
- v1.IntegrationKitLabel: kit.Name,
- },
- OwnerReferences: []metav1.OwnerReference{
- {
- APIVersion: kit.APIVersion,
- Kind: kit.Kind,
- Name: kit.Name,
- UID: kit.UID,
- Controller: &controller,
- BlockOwnerDeletion: &blockOwnerDeletion,
- }},
- },
- Data: map[string]string{
- "profile.xml": profile,
- },
- }
-
- err := c.Create(ctx, jibProfileConfigMap)
- if err != nil && !k8serrors.IsAlreadyExists(err) {
- return fmt.Errorf("error creating the configmap containing the
default maven jib profile: %s: %w. ", kit.Name+"-publish-jib-profile", err)
- }
- return nil
-}
-
// JibMavenProfile creates a maven profile defining jib plugin build.
-func JibMavenProfile(jibMavenPluginVersion string,
jibLayerFilterExtensionMavenVersion string) (string, error) {
- jibVersion := JibMavenPluginVersionDefault
- if jibMavenPluginVersion != "" {
- jibVersion = jibMavenPluginVersion
- }
- layerVersion := JibLayerFilterExtensionMavenVersionDefault
- if jibLayerFilterExtensionMavenVersion != "" {
- layerVersion = jibLayerFilterExtensionMavenVersion
- }
+func JibMavenProfile(jibMavenPluginVersion string,
jibLayerFilterExtensionMavenVersion string) maven.Profile {
jibPlugin := maven.Plugin{
GroupID: "com.google.cloud.tools",
ArtifactID: "jib-maven-plugin",
- Version: jibVersion,
+ Version: jibMavenPluginVersion,
Dependencies: []maven.Dependency{
{
GroupID: "com.google.cloud.tools",
ArtifactID: "jib-layer-filter-extension-maven",
- Version: layerVersion,
+ Version: jibLayerFilterExtensionMavenVersion,
},
},
Configuration: v1.PluginConfiguration{
@@ -154,17 +87,12 @@ func JibMavenProfile(jibMavenPluginVersion string,
jibLayerFilterExtensionMavenV
},
}
- jibMavenPluginProfile := JibProfile{
- XMLName: xml.Name{Local: "profile"},
- ID: "jib",
- Build: JibBuild{
+ jibMavenPluginProfile := maven.Profile{
+ ID: "jib",
+ Build: &maven.Build{
Plugins: []maven.Plugin{jibPlugin},
},
}
- content, err := util.EncodeXMLWithoutHeader(jibMavenPluginProfile)
- if err != nil {
- return "", err
- }
- return string(content), nil
+ return jibMavenPluginProfile
}
diff --git a/pkg/util/jib/configuration_test.go
b/pkg/util/jib/configuration_test.go
deleted file mode 100644
index 77ba3a9c7..000000000
--- a/pkg/util/jib/configuration_test.go
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package jib
-
-import (
- "context"
- "strings"
- "testing"
-
- v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
- "github.com/apache/camel-k/v2/pkg/internal"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- corev1 "k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/types"
- ctrl "sigs.k8s.io/controller-runtime/pkg/client"
-)
-
-func TestJibMavenProfile(t *testing.T) {
- profile, err := JibMavenProfile("3.3.0", "0.2.0")
-
- require.NoError(t, err)
- assert.True(t, strings.HasPrefix(profile, "<profile>"))
- assert.True(t, strings.HasSuffix(profile, "</profile>"))
- assert.True(t, strings.Contains(profile, "<version>3.3.0</version>"))
- assert.True(t, strings.Contains(profile, "<version>0.2.0</version>"))
-
-}
-
-func TestJibMavenProfileDefaultValues(t *testing.T) {
- profile, err := JibMavenProfile("", "")
-
- require.NoError(t, err)
- assert.True(t, strings.HasPrefix(profile, "<profile>"))
- assert.True(t, strings.HasSuffix(profile, "</profile>"))
- assert.True(t, strings.Contains(profile,
"<version>"+JibMavenPluginVersionDefault+"</version>"))
- assert.True(t, strings.Contains(profile,
"<version>"+JibLayerFilterExtensionMavenVersionDefault+"</version>"))
-
-}
-
-func TestJibConfigMap(t *testing.T) {
- ctx := context.TODO()
- c, _ := internal.NewFakeClient()
- kit := &v1.IntegrationKit{
- TypeMeta: metav1.TypeMeta{
- APIVersion: v1.SchemeGroupVersion.String(),
- Kind: v1.IntegrationKitKind,
- },
- ObjectMeta: metav1.ObjectMeta{
- Name: "test",
- Namespace: "ns",
- UID:
types.UID("8dc44a2b-063c-490e-ae02-1fab285ac70a"),
- },
- Status: v1.IntegrationKitStatus{
- Phase: v1.IntegrationKitPhaseBuildSubmitted,
- },
- }
-
- err := CreateProfileConfigmap(ctx, c, kit,
"<profile>awesomeprofile</profile>")
- require.NoError(t, err)
-
- key := ctrl.ObjectKey{
- Namespace: "ns",
- Name: "test-publish-jib-profile",
- }
- cm := &corev1.ConfigMap{}
- err = c.Get(ctx, key, cm)
- require.NoError(t, err)
- assert.Equal(t, "test", cm.OwnerReferences[0].Name)
- assert.Equal(t, cm.OwnerReferences[0].UID,
types.UID("8dc44a2b-063c-490e-ae02-1fab285ac70a"))
- assert.NotNil(t, cm.Data["profile.xml"])
- assert.True(t, strings.Contains(cm.Data["profile.xml"], "awesome"))
-}
diff --git a/pkg/util/maven/maven_project.go b/pkg/util/maven/maven_project.go
index 439109c81..4419d8f1b 100644
--- a/pkg/util/maven/maven_project.go
+++ b/pkg/util/maven/maven_project.go
@@ -152,8 +152,8 @@ func (p *Project) AddEncodedDependencyExclusion(gav string,
exclusion Exclusion)
}
}
-func (p *Project) AddProfiles(profiles string) {
- p.Profiles = ProfilesContent{InnerXML: profiles}
+func (p *Project) AddProfile(profile Profile) {
+ p.Profiles = append(p.Profiles, profile)
}
// NewDependency creates an new dependency from the given GAV.
diff --git a/pkg/util/maven/maven_project_test.go
b/pkg/util/maven/maven_project_test.go
index 9cc12a5cc..657f95b0a 100644
--- a/pkg/util/maven/maven_project_test.go
+++ b/pkg/util/maven/maven_project_test.go
@@ -81,7 +81,11 @@ const expectedPom = `<?xml version="1.0" encoding="UTF-8"?>
</releases>
</pluginRepository>
</pluginRepositories>
- <profiles><profile><id>custom</id></profile></profiles>
+ <profiles>
+ <profile>
+ <id>custom</id>
+ </profile>
+ </profiles>
</project>`
func TestPomGeneration(t *testing.T) {
@@ -131,8 +135,9 @@ func TestPomGeneration(t *testing.T) {
},
}
- project.Profiles = ProfilesContent{InnerXML:
`<profile><id>custom</id></profile>`}
-
+ project.AddProfile(Profile{
+ ID: "custom",
+ })
pom, err := util.EncodeXML(project)
require.NoError(t, err)
diff --git a/pkg/util/maven/maven_repositories.go
b/pkg/util/maven/maven_repositories.go
index 441253c62..854530a03 100644
--- a/pkg/util/maven/maven_repositories.go
+++ b/pkg/util/maven/maven_repositories.go
@@ -30,8 +30,8 @@ type defaultRepositories struct{}
func (o defaultRepositories) apply(settings *Settings) error {
for _, repository := range defaultMavenRepositories() {
- upsertRepository(repository, &settings.Profiles[0].Repositories)
- upsertRepository(repository,
&settings.Profiles[0].PluginRepositories)
+ settings.Profiles[0].Repositories =
upsertRepository(repository, settings.Profiles[0].Repositories)
+ settings.Profiles[0].PluginRepositories =
upsertRepository(repository, settings.Profiles[0].PluginRepositories)
}
return nil
}
@@ -68,29 +68,39 @@ func (o extraRepositories) apply(settings *Settings) error {
if repository.ID == "" {
repository.ID = fmt.Sprintf("repository-%03d",
i)
}
- upsertRepository(repository,
&settings.Profiles[0].Repositories)
- upsertRepository(repository,
&settings.Profiles[0].PluginRepositories)
+ settings.Profiles[0].Repositories =
upsertRepository(repository, settings.Profiles[0].Repositories)
+ settings.Profiles[0].PluginRepositories =
upsertRepository(repository, settings.Profiles[0].PluginRepositories)
}
}
return nil
}
-func upsertRepository(repository v1.Repository, repositories *[]v1.Repository)
{
+func upsertRepository(repository v1.Repository, repositories *[]v1.Repository)
*[]v1.Repository {
+ if repositories == nil {
+ repositories = &[]v1.Repository{}
+ }
for i, r := range *repositories {
if r.ID == repository.ID {
(*repositories)[i] = repository
- return
+ return repositories
}
}
*repositories = append(*repositories, repository)
+
+ return repositories
}
-func upsertMirror(mirror Mirror, mirrors *[]Mirror) {
+func upsertMirror(mirror Mirror, mirrors *[]Mirror) *[]Mirror {
+ if mirrors == nil {
+ mirrors = &[]Mirror{}
+ }
for i, r := range *mirrors {
if r.ID == mirror.ID {
(*mirrors)[i] = mirror
- return
+ return mirrors
}
}
*mirrors = append(*mirrors, mirror)
+
+ return mirrors
}
diff --git a/pkg/util/maven/maven_settings.go b/pkg/util/maven/maven_settings.go
index f8c96f8ed..a67846d42 100644
--- a/pkg/util/maven/maven_settings.go
+++ b/pkg/util/maven/maven_settings.go
@@ -44,7 +44,7 @@ func NewSettings(options ...SettingsOption) (Settings, error)
{
Profiles: []Profile{
{
ID: "camel-k",
- Activation: Activation{
+ Activation: &Activation{
ActiveByDefault: true,
},
},
diff --git a/pkg/util/maven/maven_settings_test.go
b/pkg/util/maven/maven_settings_test.go
index ea12f3a0f..a9ae01593 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -53,7 +53,6 @@ const expectedSettings = `<?xml version="1.0"
encoding="UTF-8"?>
</releases>
</repository>
</repositories>
- <pluginRepositories></pluginRepositories>
</profile>
</profiles>
<proxies></proxies>
@@ -188,10 +187,10 @@ func TestSettingsGeneration(t *testing.T) {
settings.Profiles = []Profile{
{
ID: "my-profile",
- Activation: Activation{
+ Activation: &Activation{
ActiveByDefault: true,
},
- Repositories: []v1.Repository{
+ Repositories: &[]v1.Repository{
{
ID: "central",
URL:
"https://repo.maven.apache.org/maven2",
diff --git a/pkg/util/maven/maven_types.go b/pkg/util/maven/maven_types.go
index 039dab1b2..f361c5723 100644
--- a/pkg/util/maven/maven_types.go
+++ b/pkg/util/maven/maven_types.go
@@ -31,9 +31,9 @@ type Mirror struct {
}
type Build struct {
- DefaultGoal string `xml:"defaultGoal,omitempty"`
- Plugins []Plugin `xml:"plugins>plugin,omitempty"`
- Extensions []v1.MavenArtifact `xml:"extensions>extension,omitempty"`
+ DefaultGoal string `xml:"defaultGoal,omitempty"`
+ Plugins []Plugin `xml:"plugins>plugin,omitempty"`
+ Extensions *[]v1.MavenArtifact `xml:"extensions>extension,omitempty"`
}
type Plugin struct {
@@ -81,7 +81,7 @@ type Project struct {
Repositories []v1.Repository
`xml:"repositories>repository,omitempty"`
PluginRepositories []v1.Repository
`xml:"pluginRepositories>pluginRepository,omitempty"`
Build *Build `xml:"build,omitempty"`
- Profiles ProfilesContent `xml:"profiles,omitempty"`
+ Profiles []Profile
`xml:"profiles>profile,omitempty"`
}
// Exclusion models a dependency exclusion.
@@ -107,11 +107,12 @@ type Dependency struct {
}
type Profile struct {
- ID string `xml:"id"`
- Activation Activation `xml:"activation,omitempty"`
- Properties v1.Properties `xml:"properties,omitempty"`
- Repositories []v1.Repository
`xml:"repositories>repository,omitempty"`
- PluginRepositories []v1.Repository
`xml:"pluginRepositories>pluginRepository,omitempty"`
+ ID string `xml:"id"`
+ Activation *Activation `xml:"activation,omitempty"`
+ Properties *v1.Properties `xml:"properties,omitempty"`
+ Repositories *[]v1.Repository
`xml:"repositories>repository,omitempty"`
+ PluginRepositories *[]v1.Repository
`xml:"pluginRepositories>pluginRepository,omitempty"`
+ Build *Build `xml:"build,omitempty"`
}
type Activation struct {
@@ -134,7 +135,3 @@ type Proxy struct {
Password string `xml:"password,omitempty"`
NonProxyHosts string `xml:"nonProxyHosts,omitempty"`
}
-
-type ProfilesContent struct {
- InnerXML string `xml:",innerxml"`
-}