From d2a9adb4bec0f8be8d0f952911f33ae5997ea447 Mon Sep 17 00:00:00 2001 From: LP B Date: Fri, 5 Dec 2025 15:22:40 +0100 Subject: [PATCH] fix(compose): use project in compose start options (#1477) --- pkg/libstack/compose/composeplugin.go | 6 ++- pkg/libstack/compose/composeplugin_test.go | 59 ++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/pkg/libstack/compose/composeplugin.go b/pkg/libstack/compose/composeplugin.go index 2ae7ceb88..19bd7038f 100644 --- a/pkg/libstack/compose/composeplugin.go +++ b/pkg/libstack/compose/composeplugin.go @@ -142,7 +142,11 @@ func (c *ComposeDeployer) Deploy(ctx context.Context, filePaths []string, option project = project.WithoutUnnecessaryResources() - var opts api.UpOptions + opts := api.UpOptions{ + Start: api.StartOptions{ + Project: project, + }, + } if options.ForceRecreate { opts.Create.Recreate = api.RecreateForce } diff --git a/pkg/libstack/compose/composeplugin_test.go b/pkg/libstack/compose/composeplugin_test.go index fd38aca24..2e71c766e 100644 --- a/pkg/libstack/compose/composeplugin_test.go +++ b/pkg/libstack/compose/composeplugin_test.go @@ -83,6 +83,65 @@ services: require.False(t, containerExists(composeContainerName)) } +// Detect regression in container injections. +// Ref BE-12432 +// Ref https://github.com/portainer/portainer/issues/12909 +func Test_UpAndDownWithInjection(t *testing.T) { + const content = ` +services: + test: + image: alpine:latest + container_name: "composetest_alpine" + command: ["sh", "-c", "cat /test.txt"] + configs: + - source: test-config + target: /test.txt + +configs: + test-config: + content: | + Hello from inline config! + This should appear in the container. +` + const projectName = "composetest" + const containerName = "composetest_alpine" + w := NewComposeDeployer() + + dir := t.TempDir() + ctx := context.Background() + + filePath := createFile(t, dir, "docker-compose.yml", content) + filePaths := []string{filePath} + + err := w.Validate(ctx, filePaths, libstack.Options{ProjectName: projectName}) + require.NoError(t, err) + + err = w.Pull(ctx, filePaths, libstack.Options{ProjectName: projectName}) + require.NoError(t, err) + + require.False(t, containerExists(containerName)) + + err = w.Deploy(ctx, filePaths, libstack.DeployOptions{ + Options: libstack.Options{ + ProjectName: projectName, + }, + }) + require.NoError(t, err) + + require.True(t, containerExists(containerName)) + + waitResult := w.WaitForStatus(ctx, projectName, libstack.StatusCompleted) + + require.Empty(t, waitResult.ErrorMsg) + require.Equal(t, libstack.StatusCompleted, waitResult.Status) + + err = w.Remove(ctx, projectName, filePaths, libstack.RemoveOptions{}) + require.NoError(t, err) + + require.False(t, containerExists(containerName)) + +} + func TestRun(t *testing.T) { w := NewComposeDeployer()