Skip to content

Commit

Permalink
feat(trait): Fail IntKit when custom task on build strategy routine
Browse files Browse the repository at this point in the history
Ref #4558
  • Loading branch information
gansheer authored and squakez committed Aug 9, 2023
1 parent fe482cb commit 308ca76
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 16 deletions.
35 changes: 29 additions & 6 deletions pkg/trait/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ func (t *builderTrait) Configure(e *Environment) (bool, error) {
}

func (t *builderTrait) Apply(e *Environment) error {
// local pipeline tasks
var pipelineTasks []v1.Task
// Building task
builderTask, err := t.builderTask(e)
if err != nil {
Expand All @@ -78,17 +80,36 @@ func (t *builderTrait) Apply(e *Environment) error {
}
return nil
}
e.Pipeline = append(e.Pipeline, v1.Task{Builder: builderTask})

pipelineTasks = append(pipelineTasks, v1.Task{Builder: builderTask})

// Custom tasks
if t.Tasks != nil {
e.Pipeline = append(e.Pipeline, t.customTasks()...)
realBuildStrategy := builderTask.Configuration.Strategy
if realBuildStrategy == "" {
realBuildStrategy = e.Platform.Status.Build.BuildConfiguration.Strategy
}
if len(t.Tasks) > 0 && realBuildStrategy != v1.BuildStrategyPod {
e.IntegrationKit.Status.Phase = v1.IntegrationKitPhaseError
e.IntegrationKit.Status.SetCondition("IntegrationKitTasksValid",
corev1.ConditionFalse,
"IntegrationKitTasksValid",
fmt.Sprintf("Pipeline tasks unavailable when using `%s` platform build strategy: use `%s` instead.",
realBuildStrategy,
v1.BuildStrategyPod),
)
if err := e.Client.Status().Update(e.Ctx, e.IntegrationKit); err != nil {
return err
}
return nil
}
pipelineTasks = append(pipelineTasks, t.customTasks()...)
}

// Publishing task
switch e.Platform.Status.Build.PublishStrategy {
case v1.IntegrationPlatformBuildPublishStrategySpectrum:
e.Pipeline = append(e.Pipeline, v1.Task{Spectrum: &v1.SpectrumTask{
pipelineTasks = append(pipelineTasks, v1.Task{Spectrum: &v1.SpectrumTask{
BaseTask: v1.BaseTask{
Name: "spectrum",
},
Expand All @@ -100,7 +121,7 @@ func (t *builderTrait) Apply(e *Environment) error {
}})

case v1.IntegrationPlatformBuildPublishStrategyS2I:
e.Pipeline = append(e.Pipeline, v1.Task{S2i: &v1.S2iTask{
pipelineTasks = append(pipelineTasks, v1.Task{S2i: &v1.S2iTask{
BaseTask: v1.BaseTask{
Name: "s2i",
},
Expand All @@ -121,7 +142,7 @@ func (t *builderTrait) Apply(e *Environment) error {
executorImage = image
t.L.Infof("User defined executor image %s will be used for buildah", image)
}
e.Pipeline = append(e.Pipeline, v1.Task{Buildah: &v1.BuildahTask{
pipelineTasks = append(pipelineTasks, v1.Task{Buildah: &v1.BuildahTask{
Platform: platform,
BaseTask: v1.BaseTask{
Name: "buildah",
Expand All @@ -144,7 +165,7 @@ func (t *builderTrait) Apply(e *Environment) error {
t.L.Infof("User defined executor image %s will be used for kaniko", image)
}

e.Pipeline = append(e.Pipeline, v1.Task{Kaniko: &v1.KanikoTask{
pipelineTasks = append(pipelineTasks, v1.Task{Kaniko: &v1.KanikoTask{
BaseTask: v1.BaseTask{
Name: "kaniko",
},
Expand All @@ -160,6 +181,8 @@ func (t *builderTrait) Apply(e *Environment) error {
ExecutorImage: executorImage,
}})
}
// add local pipeline tasks to env pipeline
e.Pipeline = append(e.Pipeline, pipelineTasks...)
return nil
}

Expand Down
72 changes: 62 additions & 10 deletions pkg/trait/builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ import (

func TestBuilderTraitNotAppliedBecauseOfNilKit(t *testing.T) {
environments := []*Environment{
createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I),
createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko),
createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I, v1.BuildStrategyRoutine),
createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine),
}

for _, e := range environments {
Expand All @@ -57,8 +57,8 @@ func TestBuilderTraitNotAppliedBecauseOfNilKit(t *testing.T) {

func TestBuilderTraitNotAppliedBecauseOfNilPhase(t *testing.T) {
environments := []*Environment{
createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I),
createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko),
createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I, v1.BuildStrategyRoutine),
createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine),
}

for _, e := range environments {
Expand All @@ -77,7 +77,7 @@ func TestBuilderTraitNotAppliedBecauseOfNilPhase(t *testing.T) {
}

func TestS2IBuilderTrait(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I)
env := createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I, v1.BuildStrategyRoutine)
err := NewBuilderTestCatalog().apply(env)

assert.Nil(t, err)
Expand All @@ -90,7 +90,7 @@ func TestS2IBuilderTrait(t *testing.T) {
}

func TestKanikoBuilderTrait(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko)
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine)
err := NewBuilderTestCatalog().apply(env)

assert.Nil(t, err)
Expand All @@ -102,7 +102,7 @@ func TestKanikoBuilderTrait(t *testing.T) {
assert.NotNil(t, env.Pipeline[1].Kaniko)
}

func createBuilderTestEnv(cluster v1.IntegrationPlatformCluster, strategy v1.IntegrationPlatformBuildPublishStrategy) *Environment {
func createBuilderTestEnv(cluster v1.IntegrationPlatformCluster, strategy v1.IntegrationPlatformBuildPublishStrategy, buildStrategy v1.BuildStrategy) *Environment {
c, err := camel.DefaultCatalog()
if err != nil {
panic(err)
Expand Down Expand Up @@ -136,6 +136,9 @@ func createBuilderTestEnv(cluster v1.IntegrationPlatformCluster, strategy v1.Int
RuntimeVersion: defaults.DefaultRuntimeVersion,
RuntimeProvider: v1.RuntimeProviderQuarkus,
PublishStrategyOptions: map[string]string{},
BuildConfiguration: v1.BuildConfiguration{
Strategy: buildStrategy,
},
},
},
Status: v1.IntegrationPlatformStatus{
Expand All @@ -157,7 +160,7 @@ func NewBuilderTestCatalog() *Catalog {
}

func TestMavenPropertyBuilderTrait(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko)
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Properties = append(builderTrait.Properties, "build-time-prop1=build-time-value1")

Expand All @@ -175,7 +178,7 @@ func createNominalBuilderTraitTest() *builderTrait {
}

func TestCustomTaskBuilderTrait(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum)
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyPod)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")

Expand All @@ -194,6 +197,55 @@ func TestCustomTaskBuilderTrait(t *testing.T) {
assert.Equal(t, "ls", customTask.Custom.ContainerCommand)
}

func TestCustomTaskBuilderTraitValidStrategyOverride(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyRoutine)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
builderTrait.Strategy = "pod"

err := builderTrait.Apply(env)

assert.Nil(t, err)

builderTask := findCustomTaskByName(env.Pipeline, "builder")
publisherTask := findCustomTaskByName(env.Pipeline, "spectrum")
customTask := findCustomTaskByName(env.Pipeline, "test")
assert.NotNil(t, customTask)
assert.NotNil(t, builderTask)
assert.NotNil(t, publisherTask)
assert.Equal(t, 3, len(env.Pipeline))
assert.Equal(t, "test", customTask.Custom.Name)
assert.Equal(t, "alpine", customTask.Custom.ContainerImage)
assert.Equal(t, "ls", customTask.Custom.ContainerCommand)
}

func TestCustomTaskBuilderTraitInvalidStrategy(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyRoutine)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")

err := builderTrait.Apply(env)

assert.NotNil(t, err)
assert.Equal(t, env.IntegrationKit.Status.Phase, v1.IntegrationKitPhaseError)
assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Status, corev1.ConditionFalse)
assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid"))
}

func TestCustomTaskBuilderTraitInvalidStrategyOverride(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyPod)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
builderTrait.Strategy = "routine"

err := builderTrait.Apply(env)

assert.NotNil(t, err)
assert.Equal(t, env.IntegrationKit.Status.Phase, v1.IntegrationKitPhaseError)
assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Status, corev1.ConditionFalse)
assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid"))
}

func findCustomTaskByName(tasks []v1.Task, name string) v1.Task {
for _, t := range tasks {
if t.Custom != nil && t.Custom.Name == name {
Expand All @@ -204,7 +256,7 @@ func findCustomTaskByName(tasks []v1.Task, name string) v1.Task {
}

func TestMavenProfileBuilderTrait(t *testing.T) {
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko)
env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine)
builderTrait := createNominalBuilderTraitTest()
builderTrait.MavenProfile = "configmap:maven-profile/owasp-profile.xml"

Expand Down

0 comments on commit 308ca76

Please sign in to comment.