Skip to content

Commit

Permalink
chore(builder): include jib profile in project
Browse files Browse the repository at this point in the history
It removes the need to include a new Configmap for every build.
  • Loading branch information
squakez committed Mar 6, 2025
1 parent 27fceb0 commit c5b02c7
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 257 deletions.
4 changes: 4 additions & 0 deletions pkg/builder/quarkus.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -204,6 +205,9 @@ func generateQuarkusProjectCommon(runtimeProvider v1.RuntimeProvider, runtimeVer
},
)

// Jib publish profile
p.AddProfiles(jib.XMLJibProfile)

return p
}

Expand Down
12 changes: 0 additions & 12 deletions pkg/trait/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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)
Expand Down
20 changes: 1 addition & 19 deletions pkg/trait/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down Expand Up @@ -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")
Expand Down
201 changes: 64 additions & 137 deletions pkg/util/jib/configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -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="
Expand All @@ -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 = `
<profile>
<id>jib</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<repositories></repositories>
<pluginRepositories></pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.1</version>
<executions></executions>
<dependencies>
<dependency>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-layer-filter-extension-maven</artifactId>
<version>0.3.0</version>
</dependency>
</dependencies>
<configuration>
<container>
<entrypoint>INHERIT</entrypoint>
<args>
<arg>jshell</arg>
</args>
</container>
<allowInsecureRegistries>true</allowInsecureRegistries>
<extraDirectories>
<paths>
<path>
<from>../context</from>
<into>/deployments</into>
<excludes></excludes>
</path>
</paths>
<permissions>
<permission>
<file>/deployments/*</file>
<mode>755</mode>
</permission>
</permissions>
</extraDirectories>
<pluginExtensions>
<pluginExtension>
<implementation>com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension</implementation>
<configuration implementation="com.google.cloud.tools.jib.maven.extension.layerfilter.Configuration">
<filters>
<Filter>
<glob>/app/**</glob>
</Filter>
</filters>
</configuration>
</pluginExtension>
</pluginExtensions>
</configuration>
</plugin>
</plugins>
</build>
</profile>
`
89 changes: 0 additions & 89 deletions pkg/util/jib/configuration_test.go

This file was deleted.

0 comments on commit c5b02c7

Please sign in to comment.