mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 11:03:34 +00:00
refactor: replace loadProjectFromContent with compose.LoadProjectFromContent
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
package compose
|
package compose
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
composecli "github.com/compose-spec/compose-go/v2/cli"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
@@ -178,7 +181,15 @@ services:
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
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 != "" {
|
if tt.wantErr != "" {
|
||||||
require.ErrorContains(t, err, tt.wantErr)
|
require.ErrorContains(t, err, tt.wantErr)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package compose
|
package compose
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -301,7 +302,7 @@ services:
|
|||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
project, err := loadProjectFromContent(t, tt.content)
|
project, err := LoadProjectFromContent(context.Background(), tt.content)
|
||||||
if tt.wantErr != "" {
|
if tt.wantErr != "" {
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
assert.Contains(t, err.Error(), tt.wantErr)
|
assert.Contains(t, err.Error(), tt.wantErr)
|
||||||
@@ -375,7 +376,7 @@ services:
|
|||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
project, err := loadProjectFromContent(t, tt.content)
|
project, err := LoadProjectFromContent(context.Background(), tt.content)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
service, err := project.GetService("web")
|
service, err := project.GetService("web")
|
||||||
@@ -402,7 +403,7 @@ services:
|
|||||||
- "9090:9090/tcp@host"
|
- "9090:9090/tcp@host"
|
||||||
`
|
`
|
||||||
|
|
||||||
project, err := loadProjectFromContent(t, content)
|
project, err := LoadProjectFromContent(context.Background(), content)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
service, err := project.GetService("web")
|
service, err := project.GetService("web")
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ package compose
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/compose-spec/compose-go/v2/loader"
|
composecli "github.com/compose-spec/compose-go/v2/cli"
|
||||||
"github.com/compose-spec/compose-go/v2/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/mount"
|
"github.com/docker/docker/api/types/mount"
|
||||||
"github.com/docker/go-units"
|
"github.com/docker/go-units"
|
||||||
@@ -20,58 +20,6 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"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) {
|
func TestServiceSpecFromCompose(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
@@ -432,7 +380,15 @@ services:
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
spec, err := ServiceSpecFromCompose(project, "web")
|
spec, err := ServiceSpecFromCompose(project, "web")
|
||||||
@@ -618,7 +574,7 @@ services:
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
spec, err := ServiceSpecFromCompose(project, "ai")
|
spec, err := ServiceSpecFromCompose(project, "ai")
|
||||||
@@ -766,7 +722,7 @@ services:
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
project, err := loadProjectFromContent(t, tt.composeYAML)
|
project, err := LoadProjectFromContent(context.Background(), tt.composeYAML)
|
||||||
|
|
||||||
if tt.expectError {
|
if tt.expectError {
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
|
|||||||
Reference in New Issue
Block a user