diff --git a/pkg/builder/quarkus.go b/pkg/builder/quarkus.go index 7fdbc782f6..0eebdce6cf 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" @@ -204,6 +205,9 @@ func generateQuarkusProjectCommon(runtimeProvider v1.RuntimeProvider, runtimeVer }, ) + // Jib publish profile + p.AddProfiles(jib.XMLJibProfile) + return p } diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go index 5291add368..a8a57587d5 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 6f85f17649..44e6942ac5 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 38e42ff93b..0aca856fa4 100644 --- a/pkg/util/jib/configuration.go +++ b/pkg/util/jib/configuration.go @@ -18,21 +18,6 @@ limitations under the License. // Package jib contains utilities for jib strategy builds. 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" const JibMavenToImageParam = "-Djib.to.image=" const JibMavenFromImageParam = "-Djib.from.image=" @@ -46,125 +31,67 @@ 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 - } - jibPlugin := maven.Plugin{ - GroupID: "com.google.cloud.tools", - ArtifactID: "jib-maven-plugin", - Version: jibVersion, - Dependencies: []maven.Dependency{ - { - GroupID: "com.google.cloud.tools", - ArtifactID: "jib-layer-filter-extension-maven", - Version: layerVersion, - }, - }, - Configuration: v1.PluginConfiguration{ - Container: v1.Container{ - Entrypoint: "INHERIT", - Args: v1.Args{ - Arg: "jshell", - }, - }, - AllowInsecureRegistries: "true", - ExtraDirectories: v1.ExtraDirectories{ - Paths: []v1.Path{ - { - From: "../context", - Into: "/deployments", - }, - }, - Permissions: []v1.Permission{ - { - File: "/deployments/*", - Mode: "755", - }, - }, - }, - PluginExtensions: v1.PluginExtensions{ - PluginExtension: v1.PluginExtension{ - Implementation: "com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension", - Configuration: v1.PluginExtensionConfiguration{ - Implementation: "com.google.cloud.tools.jib.maven.extension.layerfilter.Configuration", - Filters: []v1.Filter{ - { - Glob: "/app/**", - }, - }, - }, - }, - }, - }, - } - - jibMavenPluginProfile := JibProfile{ - XMLName: xml.Name{Local: "profile"}, - ID: "jib", - Build: JibBuild{ - Plugins: []maven.Plugin{jibPlugin}, - }, - } - content, err := util.EncodeXMLWithoutHeader(jibMavenPluginProfile) - if err != nil { - return "", err - } - return string(content), nil - -} +// The Jib profile configuration. +const XMLJibProfile = ` + + jib + + false + + + + + + + com.google.cloud.tools + jib-maven-plugin + 3.4.1 + + + + com.google.cloud.tools + jib-layer-filter-extension-maven + 0.3.0 + + + + + INHERIT + + jshell + + + true + + + + ../context + /deployments + + + + + + /deployments/* + 755 + + + + + + com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension + + + + /app/** + + + + + + + + + + +` diff --git a/pkg/util/jib/configuration_test.go b/pkg/util/jib/configuration_test.go deleted file mode 100644 index 77ba3a9c7c..0000000000 --- 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, "")) - assert.True(t, strings.HasSuffix(profile, "")) - assert.True(t, strings.Contains(profile, "3.3.0")) - assert.True(t, strings.Contains(profile, "0.2.0")) - -} - -func TestJibMavenProfileDefaultValues(t *testing.T) { - profile, err := JibMavenProfile("", "") - - require.NoError(t, err) - assert.True(t, strings.HasPrefix(profile, "")) - assert.True(t, strings.HasSuffix(profile, "")) - assert.True(t, strings.Contains(profile, ""+JibMavenPluginVersionDefault+"")) - assert.True(t, strings.Contains(profile, ""+JibLayerFilterExtensionMavenVersionDefault+"")) - -} - -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, "awesomeprofile") - 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")) -}