Skip to content
Merged
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
17 changes: 11 additions & 6 deletions pkg/docker/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@ func Test__DockerComposeVersion(t *testing.T) {
t.Skip()
}

v1Version, err := DockerComposeCLIVersion()
// Test plugin version (v2+) - should have "v" prefix
pluginVersion, err := DockerComposePluginVersion()
assert.NoError(t, err)
assert.Contains(t, v1Version, "1.")

v2Version, err := DockerComposePluginVersion()
assert.NoError(t, err)
assert.Contains(t, v2Version, "v2.")
assert.True(t, len(pluginVersion) > 0 && pluginVersion[0] == 'v',
"Docker Compose plugin version should start with 'v', got: %s", pluginVersion)

// Test legacy CLI version if available - should NOT have "v" prefix
cliVersion, err := DockerComposeCLIVersion()
if err == nil {
assert.True(t, len(cliVersion) > 0 && cliVersion[0] != 'v',
"Docker Compose CLI version should not start with 'v', got: %s", cliVersion)
}
}

func Test__NewDockerConfig(t *testing.T) {
Expand Down
4 changes: 3 additions & 1 deletion pkg/executors/docker_compose_executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,9 @@ func (e *DockerComposeExecutor) Start() int {
}

func (e *DockerComposeExecutor) composeExecutableAndArgs() (string, []string) {
if strings.HasPrefix(e.dockerComposeVersion, "v2") {
// Docker Compose plugin (v2+) returns versions with "v" prefix (e.g., v2.20.0, v5.0.0)
// Legacy standalone docker-compose (v1) returns versions without "v" prefix (e.g., 1.29.2)
if strings.HasPrefix(e.dockerComposeVersion, "v") {
return "docker", []string{"compose"}
}

Expand Down
70 changes: 70 additions & 0 deletions pkg/executors/docker_compose_executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,73 @@ func Test__DockerComposeExecutor__StopingRunningJob(t *testing.T) {
"Exit Code: 1",
})
}

func Test__DockerComposeExecutor__composeExecutableAndArgs(t *testing.T) {
testCases := []struct {
name string
version string
expectedExec string
expectedArgs []string
}{
{
name: "v1 legacy standalone",
version: "1.29.2",
expectedExec: "docker-compose",
expectedArgs: []string{},
},
{
name: "v2 plugin",
version: "v2.20.0",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
{
name: "v2 plugin with build metadata",
version: "v2.21.0-desktop.1",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
{
name: "v3 plugin",
version: "v3.0.0",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
{
name: "v4 plugin",
version: "v4.0.0",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
{
name: "v5 plugin",
version: "v5.0.0",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
{
name: "v5 plugin with build metadata",
version: "v5.1.0-desktop.1",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
{
name: "future v10 plugin",
version: "v10.0.0",
expectedExec: "docker",
expectedArgs: []string{"compose"},
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
e := &DockerComposeExecutor{
dockerComposeVersion: tc.version,
}

exec, args := e.composeExecutableAndArgs()
assert.Equal(t, tc.expectedExec, exec)
assert.Equal(t, tc.expectedArgs, args)
})
}
}