Skip to content

Commit 5bad60f

Browse files
authored
Revert "Revert "Copy LoadFromContent from MVP (#838)" (#841)" (#842)
This reverts commit 887dfa7.
1 parent d10efd5 commit 5bad60f

File tree

4 files changed

+91
-4
lines changed

4 files changed

+91
-4
lines changed

src/pkg/cli/client/byoc/aws/byoc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func (b *ByocAws) Preview(ctx context.Context, req *defangv1.DeployRequest) (*de
157157

158158
func (b *ByocAws) deploy(ctx context.Context, req *defangv1.DeployRequest, cmd string) (*defangv1.DeployResponse, error) {
159159
// If multiple Compose files were provided, req.Compose is the merged representation of all the files
160-
project, err := compose.LoadFromContent(ctx, req.Compose)
160+
project, err := compose.LoadFromContent(ctx, req.Compose, "")
161161
if err != nil {
162162
return nil, err
163163
}

src/pkg/cli/client/byoc/do/byoc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (b *ByocDo) Deploy(ctx context.Context, req *defangv1.DeployRequest) (*defa
158158

159159
func (b *ByocDo) deploy(ctx context.Context, req *defangv1.DeployRequest, cmd string) (*defangv1.DeployResponse, error) {
160160
// If multiple Compose files were provided, req.Compose is the merged representation of all the files
161-
project, err := compose.LoadFromContent(ctx, req.Compose)
161+
project, err := compose.LoadFromContent(ctx, req.Compose, "")
162162
if err != nil {
163163
return nil, err
164164
}

src/pkg/cli/compose/load_content.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import (
77
composeTypes "github.com/compose-spec/compose-go/v2/types"
88
)
99

10-
func LoadFromContent(ctx context.Context, content []byte) (*Project, error) {
10+
func LoadFromContent(ctx context.Context, content []byte, nameFallback string) (*Project, error) {
1111
return loader.LoadWithContext(ctx, composeTypes.ConfigDetails{ConfigFiles: []composeTypes.ConfigFile{{Content: content}}}, func(o *loader.Options) {
12+
o.SetProjectName(nameFallback, false)
1213
o.SkipConsistencyCheck = true // this matches the WithConsistency(false) option from the loader
1314
o.SkipInterpolation = true
1415
o.SkipResolveEnvironment = true

src/pkg/cli/compose/load_content_test.go

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestRoundTrip(t *testing.T) {
1616
if err != nil {
1717
t.Fatal(err)
1818
}
19-
rt, err := LoadFromContent(context.Background(), content)
19+
rt, err := LoadFromContent(context.Background(), content, "should-not-be-used")
2020
if err != nil {
2121
t.Fatal(err)
2222
}
@@ -25,3 +25,89 @@ func TestRoundTrip(t *testing.T) {
2525
}
2626
})
2727
}
28+
29+
func TestLoadFromContent(t *testing.T) {
30+
tdt := []struct {
31+
desc string
32+
compose string
33+
fallback string
34+
wantProject string
35+
}{
36+
{
37+
desc: "compose with project name",
38+
compose: "name: project1\nservices:\n service1:\n image: nginx",
39+
fallback: "",
40+
wantProject: "project1",
41+
},
42+
{
43+
desc: "compose without project name",
44+
compose: "services:\n service1:\n image: nginx",
45+
fallback: "project2",
46+
wantProject: "project2",
47+
},
48+
{
49+
desc: "compose with project name and ignored fallback",
50+
compose: "name: project3\nservices:\n service1:\n image: nginx",
51+
fallback: "project4",
52+
wantProject: "project3",
53+
},
54+
{
55+
desc: "compose with unknown network",
56+
compose: "name: project4\nservices:\n service1:\n image: nginx\n networks:\n - unknown",
57+
wantProject: "project4",
58+
},
59+
{
60+
desc: "compose with cpus",
61+
compose: "name: project5\nservices:\n service1:\n image: nginx\n deploy:\n resources:\n reservations:\n cpus: 2",
62+
wantProject: "project5",
63+
},
64+
{
65+
desc: "compose with config",
66+
compose: "name: project6\nservices:\n service1:\n image: nginx\n environment:\n - CONFIG",
67+
wantProject: "project6",
68+
},
69+
{
70+
desc: "compose with interpolation",
71+
compose: "name: project7\nservices:\n service1:\n image: nginx\n environment:\n - ENVVAR=${ENVVAR}",
72+
wantProject: "project7",
73+
},
74+
{
75+
desc: "should not load env_file",
76+
compose: "name: project9\nservices:\n service1:\n image: nginx\n env_file:\n - asdf",
77+
wantProject: "project9",
78+
},
79+
}
80+
81+
t.Setenv("ENVVAR", "value")
82+
83+
for _, tt := range tdt {
84+
t.Run(tt.desc, func(t *testing.T) {
85+
project, err := LoadFromContent(context.Background(), []byte(tt.compose), tt.fallback)
86+
if err != nil {
87+
t.Fatal(err)
88+
}
89+
if project.Name != tt.wantProject {
90+
t.Errorf("Expected project name to be project1, got %s", project.Name)
91+
}
92+
if len(project.Services) != 1 {
93+
t.Errorf("Expected 1 service, got %d", len(project.Services))
94+
}
95+
if _, ok := project.Services["service1"]; !ok {
96+
t.Errorf("Expected service1 to be present, got %v", project.Services)
97+
}
98+
if project.Services["service1"].Image != "nginx" {
99+
t.Errorf("Expected service1 image to be nginx, got %s", project.Services["service1"].Image)
100+
}
101+
if config, ok := project.Services["service1"].Environment["CONFIG"]; ok {
102+
if config != nil {
103+
t.Errorf("Expected CONFIG to be nil, got %q", *config)
104+
}
105+
}
106+
if envvar, ok := project.Services["service1"].Environment["ENVVAR"]; ok {
107+
if *envvar != "${ENVVAR}" {
108+
t.Errorf("Expected ENVVAR to be ${ENVVAR}, got %q", *envvar)
109+
}
110+
}
111+
})
112+
}
113+
}

0 commit comments

Comments
 (0)