Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(builder): include jib profile in project #6099

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.

Loading