This is an automated email from the ASF dual-hosted git repository. squakez pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 7fde62cff3efae6cf65607f42d0844b0369a1963 Author: Æ״óÀë <[email protected]> AuthorDate: Tue Jul 28 22:04:27 2026 +0800 Fix #6508: address lint warnings and add mixed-format tests - Replace if-else chain with switch (gocritic) - Add //nolint:nestif for key=value parsing block - Add tests for mixed positional + key=value format (e.g. my-task;my-image;my-command;request-cpu=123m) --- pkg/trait/init_containers.go | 8 ++-- pkg/trait/init_containers_test.go | 83 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) diff --git a/pkg/trait/init_containers.go b/pkg/trait/init_containers.go index 5e72da24f..f7a9c3af9 100644 --- a/pkg/trait/init_containers.go +++ b/pkg/trait/init_containers.go @@ -248,6 +248,7 @@ func parseSingleTask(task string, isSidecar bool) (containerTask, error) { if len(strings.TrimSpace(seg)) == 0 { continue } + //nolint:nestif if strings.Contains(seg, "=") { kv := strings.SplitN(seg, "=", 2) key, value := strings.TrimSpace(kv[0]), strings.TrimSpace(kv[1]) @@ -284,11 +285,12 @@ func parseSingleTask(task string, isSidecar bool) (containerTask, error) { } } else { // Positional segment: fill first unset field - if result.name == "" { + switch { + case result.name == "": result.name = seg - } else if result.image == "" { + case result.image == "": result.image = seg - } else { + default: commandParts = append(commandParts, seg) } } diff --git a/pkg/trait/init_containers_test.go b/pkg/trait/init_containers_test.go index e705a0bb1..c9da3de9c 100644 --- a/pkg/trait/init_containers_test.go +++ b/pkg/trait/init_containers_test.go @@ -698,6 +698,89 @@ func TestParseInitContainerInvalidResource(t *testing.T) { assert.Contains(t, err.Error(), `"abc"`) } +func TestParseInitContainerMixedFormat(t *testing.T) { + trait := &initContainersTrait{ + InitContainersTrait: trait.InitContainersTrait{ + InitTasks: []string{ + "my-task;my-image;my-command;request-cpu=123m;limit-memory=256Mi", + }, + }, + } + + configured, err := trait.parseTasks() + assert.True(t, configured) + require.Nil(t, err) + require.Len(t, trait.tasks, 1) + + task := trait.tasks[0] + assert.Equal(t, "my-task", task.name) + assert.Equal(t, "my-image", task.image) + assert.Equal(t, "my-command", task.command) + assert.False(t, task.isSidecar) + assert.Equal(t, "123m", task.requestCPU) + assert.Equal(t, "", task.requestMemory) + assert.Equal(t, "", task.limitCPU) + assert.Equal(t, "256Mi", task.limitMemory) +} + +func TestApplyInitContainerMixedFormat(t *testing.T) { + environment := Environment{ + Catalog: NewCatalog(nil), + Resources: kubernetes.NewCollection(), + Integration: &v1.Integration{ + ObjectMeta: metav1.ObjectMeta{ + Name: "my-it", + }, + Status: v1.IntegrationStatus{ + Phase: v1.IntegrationPhaseRunning, + }, + }, + } + environment.Resources.Add(&appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + v1.IntegrationLabel: "my-it", + }, + }, + Spec: appsv1.DeploymentSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{}, + }, + }, + }) + initCont := initContainersTrait{ + InitContainersTrait: trait.InitContainersTrait{ + InitTasks: []string{ + "my-task;my-image;my-command;request-cpu=123m;limit-memory=256Mi", + }, + }, + } + configured, condition, err := initCont.Configure(&environment) + assert.True(t, configured) + assert.Nil(t, condition) + require.Nil(t, err) + err = initCont.Apply(&environment) + require.Nil(t, err) + + deploy := environment.Resources.GetDeploymentForIntegration(environment.Integration) + require.NotNil(t, deploy) + require.Len(t, deploy.Spec.Template.Spec.InitContainers, 1) + + container := deploy.Spec.Template.Spec.InitContainers[0] + assert.Equal(t, "my-task", container.Name) + assert.Equal(t, "my-image", container.Image) + + expectedResources := corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("123m"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceMemory: resource.MustParse("256Mi"), + }, + } + assert.Equal(t, expectedResources, container.Resources) +} + func TestApplyInitContainerWithResources(t *testing.T) { environment := Environment{ Catalog: NewCatalog(nil),
