Skip to content

Commit deb40ae

Browse files
committed
refactor: handle dependencies with nested directory
1 parent fea8c52 commit deb40ae

18 files changed

Lines changed: 822 additions & 243 deletions

File tree

pkg/devspace/compose/config_builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import (
99
)
1010

1111
type ConfigBuilder interface {
12-
AddDependencies(dockerCompose composetypes.Project, service composetypes.ServiceConfig) error
12+
AddDependencies(dependency composetypes.Project, service composetypes.ServiceConfig) error
1313
AddDeployment(dockerCompose composetypes.Project, service composetypes.ServiceConfig) error
1414
AddDev(service composetypes.ServiceConfig) error
15-
AddImage(service composetypes.ServiceConfig) error
15+
AddImage(dockerCompose composetypes.Project, service composetypes.ServiceConfig) error
1616
AddSecret(dockerCompose composetypes.Project, service composetypes.ServiceConfig) error
1717
Config() *latest.Config
1818
SetName(name string)

pkg/devspace/compose/dependency.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,48 @@
11
package compose
22

33
import (
4+
"path/filepath"
5+
46
composetypes "github.com/compose-spec/compose-go/types"
57
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
68
)
79

810
func (cb *configBuilder) AddDependencies(dockerCompose composetypes.Project, service composetypes.ServiceConfig) error {
911
for _, dependency := range service.GetDependencies() {
12+
depName := formatName(dependency)
13+
1014
if cb.config.Dependencies == nil {
1115
cb.config.Dependencies = map[string]*latest.DependencyConfig{}
1216
}
1317

14-
depName := formatName(dependency)
18+
depService, err := dockerCompose.GetService(dependency)
19+
if err != nil {
20+
return err
21+
}
22+
23+
currentPath := dockerCompose.WorkingDir
24+
if service.Build != nil && service.Build.Context != "" {
25+
currentPath = filepath.Join(dockerCompose.WorkingDir, service.Build.Context)
26+
}
27+
28+
dependencyPath := dockerCompose.WorkingDir
29+
if depService.Build != nil && depService.Build.Context != "" {
30+
dependencyPath = filepath.Join(dockerCompose.WorkingDir, depService.Build.Context)
31+
}
32+
33+
relativePath, err := filepath.Rel(currentPath, dependencyPath)
34+
if err != nil {
35+
return err
36+
}
37+
38+
fileName := ""
39+
if dependencyPath == dockerCompose.WorkingDir {
40+
fileName = "devspace-" + depName + ".yaml"
41+
}
42+
1543
cb.config.Dependencies[depName] = &latest.DependencyConfig{
1644
Source: &latest.SourceConfig{
17-
Path: "devspace-" + depName + ".yaml",
45+
Path: filepath.Join(relativePath, fileName),
1846
},
1947
}
2048
}

pkg/devspace/compose/image.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,34 @@ import (
77
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
88
)
99

10-
func (cb *configBuilder) AddImage(service composetypes.ServiceConfig) error {
10+
func (cb *configBuilder) AddImage(dockerCompose composetypes.Project, service composetypes.ServiceConfig) error {
1111
build := service.Build
1212
if build == nil {
1313
cb.config.Images = nil
1414
return nil
1515
}
1616

17-
context, err := filepath.Rel(cb.workingDir, filepath.Join(cb.workingDir, build.Context))
17+
currentDir := filepath.Join(dockerCompose.WorkingDir, cb.workingDir)
18+
contextDir := filepath.Join(dockerCompose.WorkingDir, build.Context)
19+
context, err := filepath.Rel(currentDir, contextDir)
1820
if err != nil {
1921
return err
2022
}
23+
2124
context = filepath.ToSlash(context)
2225
if context == "." {
2326
context = ""
2427
}
2528

26-
dockerfile, err := filepath.Rel(cb.workingDir, filepath.Join(cb.workingDir, build.Context, build.Dockerfile))
29+
dockerfile, err := filepath.Rel(currentDir, filepath.Join(dockerCompose.WorkingDir, build.Context, build.Dockerfile))
2730
if err != nil {
2831
return err
2932
}
3033

34+
if dockerfile == "Dockerfile" {
35+
dockerfile = ""
36+
}
37+
3138
image := &latest.Image{
3239
Image: resolveImage(service),
3340
Context: context,
@@ -51,7 +58,6 @@ func (cb *configBuilder) AddImage(service composetypes.ServiceConfig) error {
5158
}
5259

5360
if cb.config.Images == nil {
54-
5561
cb.config.Images = map[string]*latest.Image{}
5662
}
5763

pkg/devspace/compose/loader_test.go

Lines changed: 0 additions & 224 deletions
This file was deleted.

0 commit comments

Comments
 (0)