Skip to content

Commit 68867b6

Browse files
fixed clon dependency issue
1 parent b03e1f1 commit 68867b6

8 files changed

Lines changed: 78 additions & 213 deletions

File tree

cmd/run_pipeline.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ func initialize(ctx context.Context, f factory.Factory, options *CommandOptions,
343343
}
344344

345345
// resolve dependencies
346-
dependencies, err := f.NewDependencyManager(devCtx, options.ConfigOptions).ResolveAll(devCtx, dependency.ResolveOptions{})
346+
dependencies, err := f.NewDependencyManager(devCtx, options.ConfigOptions).ResolveAll(devCtx, dependency.ResolveOptions{SkipDependencies: options.DependencyOptions.Exclude})
347347
if err != nil {
348348
return nil, errors.Wrap(err, "deploy dependencies")
349349
}

e2e/tests/build/build.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,45 @@ var _ = DevSpaceDescribe("build", func() {
7878
}
7979
framework.ExpectEqual(found, true, "image not found in cache")
8080
})
81+
ginkgo.It("should build dockerfile with docker and skip-dependency", func() {
82+
tempDir, err := framework.CopyToTempDir("tests/build/testdata/docker-skip-dependency")
83+
framework.ExpectNoError(err)
84+
defer framework.CleanupTempDir(initialDir, tempDir)
85+
86+
// create build command
87+
buildCmd := &cmd.RunPipelineCmd{
88+
GlobalFlags: &flags.GlobalFlags{
89+
NoWarn: true,
90+
},
91+
SkipPush: true,
92+
SkipDependency: []string{
93+
"fake-dep",
94+
},
95+
Pipeline: "build",
96+
}
97+
err = buildCmd.RunDefault(f)
98+
framework.ExpectNoError(err)
99+
100+
// create devspace docker client to access docker APIs
101+
devspaceDockerClient, err := docker.NewClient(context.TODO(), log)
102+
framework.ExpectNoError(err)
103+
104+
dockerClient := devspaceDockerClient.DockerAPIClient()
105+
imageList, err := dockerClient.ImageList(ctx, types.ImageListOptions{})
106+
framework.ExpectNoError(err)
107+
108+
found := false
109+
Outer:
110+
for _, image := range imageList {
111+
for _, tag := range image.RepoTags {
112+
if tag == "my-docker-username/helloworld:latest" {
113+
found = true
114+
break Outer
115+
}
116+
}
117+
}
118+
framework.ExpectEqual(found, true, "image not found in cache")
119+
})
81120

82121
ginkgo.It("should build dockerfile with docker and load in kind cluster", func() {
83122
tempDir, err := framework.CopyToTempDir("tests/build/testdata/docker")
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FROM alpine
2+
CMD ["/bin/echo", "'Hello world!'"]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
version: v2beta1
2+
images:
3+
app:
4+
image: my-docker-username/helloworld
5+
tags:
6+
- latest
7+
dependencies:
8+
fake-dep:
9+
git: git@github.com:example/this-does-not-exist.git
10+
branch: main

go.sum

Lines changed: 0 additions & 190 deletions
Large diffs are not rendered by default.

pkg/devspace/dependency/manager.go

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type ResolveOptions struct {
4343
}
4444

4545
func (m *manager) ResolveAll(ctx devspacecontext.Context, options ResolveOptions) ([]types.Dependency, error) {
46-
dependencies, err := m.handleDependencies(ctx, options.SkipDependencies, options.Dependencies, "Resolve", func(ctx devspacecontext.Context, dependency *Dependency) error {
46+
dependencies, err := m.handleDependencies(ctx, options, "Resolve", func(ctx devspacecontext.Context, dependency *Dependency) error {
4747
return nil
4848
})
4949
if err != nil {
@@ -62,7 +62,7 @@ type BuildOptions struct {
6262
Verbose bool
6363
}
6464

65-
func (m *manager) handleDependencies(ctx devspacecontext.Context, skipDependencies, filterDependencies []string, actionName string, action func(ctx devspacecontext.Context, dependency *Dependency) error) ([]types.Dependency, error) {
65+
func (m *manager) handleDependencies(ctx devspacecontext.Context, options ResolveOptions, actionName string, action func(ctx devspacecontext.Context, dependency *Dependency) error) ([]types.Dependency, error) {
6666
if ctx.Config() == nil || ctx.Config().Config() == nil || len(ctx.Config().Config().Dependencies) == 0 {
6767
return nil, nil
6868
}
@@ -73,12 +73,12 @@ func (m *manager) handleDependencies(ctx devspacecontext.Context, skipDependenci
7373
}
7474

7575
// Resolve all dependencies
76-
dependencies, err := m.resolver.Resolve(ctx)
76+
dependencies, err := m.resolver.Resolve(ctx, options)
7777
if err != nil {
7878
return nil, errors.Wrap(err, "resolve dependencies")
7979
}
8080

81-
executedDependencies, err := m.executeDependenciesRecursive(ctx, "", dependencies, skipDependencies, filterDependencies, actionName, action, map[string]bool{})
81+
executedDependencies, err := m.executeDependenciesRecursive(ctx, "", dependencies, options, actionName, action, map[string]bool{})
8282
if err != nil {
8383
hooksErr := hook.ExecuteHooks(ctx, map[string]interface{}{
8484
"error": err,
@@ -98,15 +98,7 @@ func (m *manager) handleDependencies(ctx devspacecontext.Context, skipDependenci
9898
return executedDependencies, nil
9999
}
100100

101-
func (m *manager) executeDependenciesRecursive(
102-
ctx devspacecontext.Context,
103-
base string,
104-
dependencies []types.Dependency,
105-
skipDependencies, filterDependencies []string,
106-
actionName string,
107-
action func(ctx devspacecontext.Context, dependency *Dependency) error,
108-
executedDependenciesIDs map[string]bool,
109-
) ([]types.Dependency, error) {
101+
func (m *manager) executeDependenciesRecursive(ctx devspacecontext.Context, base string, dependencies []types.Dependency, options ResolveOptions, actionName string, action func(ctx devspacecontext.Context, dependency *Dependency) error, executedDependenciesIDs map[string]bool) ([]types.Dependency, error) {
110102
// Execute all dependencies
111103
i := 0
112104
executedDependencies := []types.Dependency{}
@@ -142,7 +134,7 @@ func (m *manager) executeDependenciesRecursive(
142134
return nil, hooksErr
143135
}
144136

145-
_, err := m.executeDependenciesRecursive(dependencyCtx, dependencyName, dependency.Children(), skipDependencies, filterDependencies, actionName, action, executedDependenciesIDs)
137+
_, err := m.executeDependenciesRecursive(dependencyCtx, dependencyName, dependency.Children(), options, actionName, action, executedDependenciesIDs)
146138
if err != nil {
147139
hooksErr := hook.ExecuteHooks(dependencyCtx, map[string]interface{}{
148140
"error": err,
@@ -161,9 +153,9 @@ func (m *manager) executeDependenciesRecursive(
161153
}
162154

163155
// Check if we should act on this dependency
164-
if !foundDependency(dependencyName, filterDependencies) {
156+
if !foundDependency(dependencyName, options.Dependencies) {
165157
continue
166-
} else if skipDependency(dependencyName, skipDependencies) {
158+
} else if skipDependency(dependencyName, options.SkipDependencies) {
167159
ctx.Log().Infof("Skip dependency %s", dependencyName)
168160
continue
169161
}

pkg/devspace/dependency/resolver.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323

2424
// ResolverInterface defines the resolver interface that takes dependency configs and resolves them
2525
type ResolverInterface interface {
26-
Resolve(ctx devspacecontext.Context) ([]types.Dependency, error)
26+
Resolve(ctx devspacecontext.Context, options ResolveOptions) ([]types.Dependency, error)
2727
WithParser(parser loader.Parser) ResolverInterface
2828
}
2929

@@ -61,14 +61,14 @@ func NewResolver(ctx devspacecontext.Context, configOptions *loader.ConfigOption
6161
}
6262

6363
// Resolve implements interface
64-
func (r *resolver) Resolve(ctx devspacecontext.Context) ([]types.Dependency, error) {
64+
func (r *resolver) Resolve(ctx devspacecontext.Context, options ResolveOptions) ([]types.Dependency, error) {
6565
currentWorkingDirectory, err := os.Getwd()
6666
if err != nil {
6767
return nil, errors.Wrap(err, "get current working directory")
6868
}
6969

7070
// r.DependencyGraph.Root.ID == name here
71-
err = r.resolveRecursive(ctx, currentWorkingDirectory, r.DependencyGraph.Root.ID, nil, transformMap(r.BaseConfig.Dependencies))
71+
err = r.resolveRecursive(ctx, currentWorkingDirectory, r.DependencyGraph.Root.ID, nil, transformMap(r.BaseConfig.Dependencies), options)
7272
if err != nil {
7373
if _, ok := err.(*graph.CyclicError); ok {
7474
return nil, err
@@ -102,11 +102,23 @@ func (r *resolver) WithParser(parser loader.Parser) ResolverInterface {
102102
return &n
103103
}
104104

105-
func (r *resolver) resolveRecursive(ctx devspacecontext.Context, basePath, parentConfigName string, currentDependency *Dependency, dependencies []*latest.DependencyConfig) error {
105+
func contains(s []string, e string) bool {
106+
for _, a := range s {
107+
if a == e {
108+
return true
109+
}
110+
}
111+
return false
112+
}
113+
114+
func (r *resolver) resolveRecursive(ctx devspacecontext.Context, basePath, parentConfigName string, currentDependency *Dependency, dependencies []*latest.DependencyConfig, options ResolveOptions) error {
106115
if currentDependency != nil {
107116
currentDependency.children = []types.Dependency{}
108117
}
109118
for _, dependencyConfig := range dependencies {
119+
if contains(options.SkipDependencies, dependencyConfig.Name) {
120+
continue
121+
}
110122
dependencyConfigPath, err := util.DownloadDependency(ctx.Context(), basePath, dependencyConfig.Source, ctx.Log())
111123
if err != nil {
112124
return err
@@ -143,7 +155,7 @@ func (r *resolver) resolveRecursive(ctx devspacecontext.Context, basePath, paren
143155

144156
// load dependencies from dependency
145157
if !dependencyConfig.IgnoreDependencies && child.localConfig.Config().Dependencies != nil && len(child.localConfig.Config().Dependencies) > 0 {
146-
err = r.resolveRecursive(ctx, child.absolutePath, dependencyConfig.Name, child, transformMap(child.localConfig.Config().Dependencies))
158+
err = r.resolveRecursive(ctx, child.absolutePath, dependencyConfig.Name, child, transformMap(child.localConfig.Config().Dependencies), options)
147159
if err != nil {
148160
return err
149161
}

pkg/devspace/dependency/resolver_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ func TestResolver(t *testing.T) {
217217
testResolver := NewResolver(devCtx, &loader.ConfigOptions{})
218218
assert.NilError(t, err, "Error creating a resolver in testCase %s", testCase.name)
219219

220-
dependencies, err := testResolver.Resolve(devCtx)
220+
dependencies, err := testResolver.Resolve(devCtx, ResolveOptions{})
221221
if testCase.expectedErr == "" {
222222
assert.NilError(t, err, "Unexpected error in testCase %s", testCase.name)
223223
} else {

0 commit comments

Comments
 (0)