From d6ff62159d419d0a440ba0c089370734ac80d6d1 Mon Sep 17 00:00:00 2001 From: Pavel Sviderski Date: Tue, 22 Apr 2025 22:48:06 +1000 Subject: [PATCH] fix: compose deployment: use mutex to correctly collect service specs --- pkg/client/compose/deploy.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/client/compose/deploy.go b/pkg/client/compose/deploy.go index 6c524aa1..7b7dff4c 100644 --- a/pkg/client/compose/deploy.go +++ b/pkg/client/compose/deploy.go @@ -6,6 +6,7 @@ import ( "fmt" "slices" "strings" + "sync" "github.com/compose-spec/compose-go/v2/graph" "github.com/compose-spec/compose-go/v2/types" @@ -60,14 +61,17 @@ func (d *Deployment) Plan(ctx context.Context) (deploy.SequenceOperation, error) // Generate service specs for all services in the project. var serviceSpecs []api.ServiceSpec + var mu sync.Mutex err := graph.InDependencyOrder(ctx, d.Project, func(ctx context.Context, name string, _ types.ServiceConfig) error { spec, err := d.ServiceSpec(name) if err != nil { return err } - + // The graph is traversed concurrently, so we need to use a mutex to protect the shared slice. + mu.Lock() serviceSpecs = append(serviceSpecs, spec) + mu.Unlock() return nil }) if err != nil {