From 6a1cd7bf87665d45a2f3bb7dcee6233c2c75f36c Mon Sep 17 00:00:00 2001 From: Pasha Sviderski Date: Thu, 20 Nov 2025 16:03:47 +1000 Subject: [PATCH] refactor: replace loadProjectFromContent with compose.LoadProjectFromContent --- pkg/client/compose/caddy_test.go | 13 +++++- pkg/client/compose/port_test.go | 7 +-- pkg/client/compose/service_test.go | 70 ++++++------------------------ 3 files changed, 29 insertions(+), 61 deletions(-) diff --git a/pkg/client/compose/caddy_test.go b/pkg/client/compose/caddy_test.go index d67f15ba..b651c098 100644 --- a/pkg/client/compose/caddy_test.go +++ b/pkg/client/compose/caddy_test.go @@ -1,8 +1,11 @@ package compose import ( + "context" + "os" "testing" + composecli "github.com/compose-spec/compose-go/v2/cli" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -178,7 +181,15 @@ services: for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - project, err := loadProjectFromContent(t, tt.composeYAML) + // Get current working directory for relative path resolution to testdata directory. + wd, err := os.Getwd() + require.NoError(t, err) + + project, err := LoadProjectFromContent( + context.Background(), + tt.composeYAML, + composecli.WithWorkingDirectory(wd), + ) if tt.wantErr != "" { require.ErrorContains(t, err, tt.wantErr) diff --git a/pkg/client/compose/port_test.go b/pkg/client/compose/port_test.go index 5712a8d0..4f7828ee 100644 --- a/pkg/client/compose/port_test.go +++ b/pkg/client/compose/port_test.go @@ -1,6 +1,7 @@ package compose import ( + "context" "net/netip" "testing" @@ -301,7 +302,7 @@ services: t.Run(tt.name, func(t *testing.T) { t.Parallel() - project, err := loadProjectFromContent(t, tt.content) + project, err := LoadProjectFromContent(context.Background(), tt.content) if tt.wantErr != "" { require.Error(t, err) assert.Contains(t, err.Error(), tt.wantErr) @@ -375,7 +376,7 @@ services: t.Run(tt.name, func(t *testing.T) { t.Parallel() - project, err := loadProjectFromContent(t, tt.content) + project, err := LoadProjectFromContent(context.Background(), tt.content) require.NoError(t, err) service, err := project.GetService("web") @@ -402,7 +403,7 @@ services: - "9090:9090/tcp@host" ` - project, err := loadProjectFromContent(t, content) + project, err := LoadProjectFromContent(context.Background(), content) require.NoError(t, err) service, err := project.GetService("web") diff --git a/pkg/client/compose/service_test.go b/pkg/client/compose/service_test.go index ad6c80da..a1d38036 100644 --- a/pkg/client/compose/service_test.go +++ b/pkg/client/compose/service_test.go @@ -3,13 +3,13 @@ package compose import ( "context" "net/netip" + "os" "path/filepath" "slices" "strings" "testing" - "github.com/compose-spec/compose-go/v2/loader" - "github.com/compose-spec/compose-go/v2/types" + composecli "github.com/compose-spec/compose-go/v2/cli" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/mount" "github.com/docker/go-units" @@ -20,58 +20,6 @@ import ( "github.com/stretchr/testify/require" ) -// loadProjectFromContent loads a compose project from YAML content. -// Keep the implementation in sync with LoadProject. -// TODO(lhf): remove and replace with compose.LoadProjectFromContent -func loadProjectFromContent(t *testing.T, content string) (*types.Project, error) { - t.Helper() - ctx := context.Background() - - configDetails := types.ConfigDetails{ - ConfigFiles: []types.ConfigFile{ - { - Filename: "docker-compose.yml", - Content: []byte(content), - }, - }, - } - - project, err := loader.LoadWithContext(ctx, configDetails, func(o *loader.Options) { - o.SetProjectName("test", true) - // Register our custom extensions - if o.KnownExtensions == nil { - o.KnownExtensions = map[string]any{} - } - o.KnownExtensions[CaddyExtensionKey] = Caddy{} - o.KnownExtensions[PortsExtensionKey] = PortsSource{} - o.KnownExtensions[MachinesExtensionKey] = MachinesSource{} - }) - if err != nil { - return nil, err - } - - removeProjectPrefixFromNames(project) - // Apply extension transformations since we're not using LoadProject. - if project, err = transformServicesCaddyExtension(project); err != nil { - return nil, err - } - if project, err = transformServicesPortsExtension(project); err != nil { - return nil, err - } - - // Validate extension combinations after all transformations. - if err = validateServicesExtensions(project); err != nil { - return nil, err - } - - // Process image templates in services to expand Go template expressions using git repo state. - if project, err = ProcessImageTemplates(project); err != nil { - return nil, err - } - - return project, nil -} - func TestServiceSpecFromCompose(t *testing.T) { t.Parallel() @@ -432,7 +380,15 @@ services: for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - project, err := loadProjectFromContent(t, tt.composeYAML) + // Get current working directory for relative path resolution to testdata directory. + wd, err := os.Getwd() + require.NoError(t, err) + + project, err := LoadProjectFromContent( + context.Background(), + tt.composeYAML, + composecli.WithWorkingDirectory(wd), + ) require.NoError(t, err) spec, err := ServiceSpecFromCompose(project, "web") @@ -618,7 +574,7 @@ services: for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - project, err := loadProjectFromContent(t, tt.composeYAML) + project, err := LoadProjectFromContent(context.Background(), tt.composeYAML) require.NoError(t, err) spec, err := ServiceSpecFromCompose(project, "ai") @@ -766,7 +722,7 @@ services: for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - project, err := loadProjectFromContent(t, tt.composeYAML) + project, err := LoadProjectFromContent(context.Background(), tt.composeYAML) if tt.expectError { assert.Error(t, err)