From 68f479db031dce88fce2a8137a8fbcd91f1c2893 Mon Sep 17 00:00:00 2001 From: Davy <95214375+thedavidweng@users.noreply.github.com> Date: Tue, 19 May 2026 17:22:50 -0700 Subject: [PATCH] Fix #6637: Report builder task strategy errors --- pkg/controller/integration/build_kit_test.go | 7 +++++++ pkg/trait/builder.go | 5 +++++ pkg/trait/builder_test.go | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/pkg/controller/integration/build_kit_test.go b/pkg/controller/integration/build_kit_test.go index d5d020f600..f17ebf8598 100644 --- a/pkg/controller/integration/build_kit_test.go +++ b/pkg/controller/integration/build_kit_test.go @@ -130,12 +130,19 @@ func TestCamelBuildKitKitSetOnIntegration(t *testing.T) { // Move IntegrationKit phase to ready status it.Status.Phase = v1.IntegrationPhaseBuildingKit ik.Status.Phase = v1.IntegrationKitPhaseError + ik.Status.Failure = &v1.Failure{ + Reason: "Pipeline tasks unavailable when using `routine` platform build strategy: use `pod` instead.", + Time: metav1.Now(), + } c, err = internal.NewFakeClient(it, ik) require.NoError(t, err) a.InjectClient(c) handledIt, err = a.Handle(context.TODO(), it) require.NoError(t, err) assert.Equal(t, v1.IntegrationPhaseError, handledIt.Status.Phase) + kitAvailable := handledIt.Status.GetCondition(v1.IntegrationConditionKitAvailable) + require.NotNil(t, kitAvailable) + assert.Contains(t, kitAvailable.Message, "Pipeline tasks unavailable when using `routine` platform build strategy: use `pod` instead.") // Remove IntegrationKit it.Status.Phase = v1.IntegrationPhaseBuildingKit diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go index 35ff78036f..0aa1a2ce63 100644 --- a/pkg/trait/builder.go +++ b/pkg/trait/builder.go @@ -29,6 +29,7 @@ import ( "github.com/apache/camel-k/v2/pkg/util/boolean" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" traitv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait" @@ -336,6 +337,10 @@ func failIntegrationKit(e *Environment, conditionType v1.IntegrationKitCondition if e.IntegrationKit != nil { e.IntegrationKit.Status.Phase = v1.IntegrationKitPhaseError e.IntegrationKit.Status.SetCondition(conditionType, status, reason, message) + e.IntegrationKit.Status.Failure = &v1.Failure{ + Reason: message, + Time: metav1.Now(), + } if err := e.Client.Status().Update(e.Ctx, e.IntegrationKit); err != nil { return err } diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go index 90bfddf9fb..7bf57fdbf5 100644 --- a/pkg/trait/builder_test.go +++ b/pkg/trait/builder_test.go @@ -198,6 +198,8 @@ func TestCustomTaskBuilderTraitInvalidStrategy(t *testing.T) { assert.Equal(t, v1.IntegrationKitPhaseError, env.IntegrationKit.Status.Phase) assert.Equal(t, corev1.ConditionFalse, env.IntegrationKit.Status.Conditions[0].Status) assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid")) + require.NotNil(t, env.IntegrationKit.Status.Failure) + assert.Equal(t, "Pipeline tasks unavailable when using `routine` platform build strategy: use `pod` instead.", env.IntegrationKit.Status.Failure.Reason) } func TestCustomTaskBuilderTraitInvalidStrategyOverride(t *testing.T) { @@ -213,6 +215,8 @@ func TestCustomTaskBuilderTraitInvalidStrategyOverride(t *testing.T) { assert.Equal(t, v1.IntegrationKitPhaseError, env.IntegrationKit.Status.Phase) assert.Equal(t, corev1.ConditionFalse, env.IntegrationKit.Status.Conditions[0].Status) assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid")) + require.NotNil(t, env.IntegrationKit.Status.Failure) + assert.Equal(t, "Pipeline tasks unavailable when using `routine` platform build strategy: use `pod` instead.", env.IntegrationKit.Status.Failure.Reason) } func TestMavenProfilesBuilderTrait(t *testing.T) {