Skip to content

Commit a29775b

Browse files
committed
Refactor code to simplify GoogleContainerTools#3395
Signed-off-by: David Gageot <[email protected]>
1 parent a84596b commit a29775b

File tree

7 files changed

+46
-32
lines changed

7 files changed

+46
-32
lines changed

pkg/skaffold/build/buildpacks/build.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ import (
2727

2828
// Build builds an artifact with Cloud Native Buildpacks:
2929
// https://buildpacks.io/
30-
func (b *Builder) Build(ctx context.Context, out io.Writer, a *latest.Artifact, tag string) (string, error) {
31-
built, err := b.build(ctx, out, a.Workspace, a.BuildpackArtifact, tag)
30+
func (b *Builder) Build(ctx context.Context, out io.Writer, artifact *latest.Artifact, tag string) (string, error) {
31+
built, err := b.build(ctx, out, artifact, tag)
3232
if err != nil {
3333
return "", err
3434
}

pkg/skaffold/build/buildpacks/lifecycle.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ import (
3333
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
3434
)
3535

36-
func (b *Builder) build(ctx context.Context, out io.Writer, workspace string, artifact *latest.BuildpackArtifact, tag string) (string, error) {
36+
func (b *Builder) build(ctx context.Context, out io.Writer, a *latest.Artifact, tag string) (string, error) {
37+
artifact := a.BuildpackArtifact
38+
workspace := a.Workspace
39+
3740
// To improve caching, we always build the image with [:latest] tag
3841
// This way, the lifecycle is able to "bootstrap" from the previously built image.
3942
// The image will then be tagged as usual with the tag provided by the tag policy.

pkg/skaffold/docker/image_util.go

+21-11
Original file line numberDiff line numberDiff line change
@@ -27,30 +27,40 @@ import (
2727
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext"
2828
)
2929

30-
func RetrieveWorkingDir(tagged string, insecureRegistries map[string]bool) (string, error) {
31-
var cf *v1.ConfigFile
32-
var err error
33-
30+
func RetrieveConfigFile(tagged string, runCtx *runcontext.RunContext) (*v1.ConfigFile, error) {
3431
if strings.ToLower(tagged) == "scratch" {
35-
return "/", nil
32+
return nil, nil
3633
}
3734

38-
// TODO: use the proper RunContext
39-
localDocker, err := NewAPIClient(&runcontext.RunContext{})
35+
var cf *v1.ConfigFile
36+
var err error
37+
38+
localDocker, err := NewAPIClient(runCtx)
4039
if err == nil {
4140
cf, err = localDocker.ConfigFile(context.Background(), tagged)
4241
}
4342
if err != nil {
4443
// No local Docker is available
45-
cf, err = RetrieveRemoteConfig(tagged, insecureRegistries)
44+
cf, err = RetrieveRemoteConfig(tagged, runCtx.InsecureRegistries)
4645
}
4746
if err != nil {
48-
return "", errors.Wrap(err, "retrieving image config")
47+
return nil, errors.Wrap(err, "retrieving image config")
4948
}
5049

51-
if cf.Config.WorkingDir == "" {
50+
return cf, err
51+
}
52+
53+
func RetrieveWorkingDir(tagged string, runCtx *runcontext.RunContext) (string, error) {
54+
cf, err := RetrieveConfigFile(tagged, runCtx)
55+
switch {
56+
case err != nil:
57+
return "", err
58+
case cf == nil:
59+
return "/", nil
60+
case cf.Config.WorkingDir == "":
5261
logrus.Debugf("Using default workdir '/' for %s", tagged)
5362
return "/", nil
63+
default:
64+
return cf.Config.WorkingDir, nil
5465
}
55-
return cf.Config.WorkingDir, nil
5666
}

pkg/skaffold/runner/dev.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la
146146
},
147147
func(e filemon.Events) {
148148
syncMap := func() (map[string][]string, error) { return r.builder.SyncMap(ctx, artifact) }
149-
s, err := sync.NewItem(artifact, e, r.builds, r.runCtx.InsecureRegistries, syncMap)
149+
s, err := sync.NewItem(artifact, e, r.builds, r.runCtx, syncMap)
150150
switch {
151151
case err != nil:
152152
logrus.Warnf("error adding dirty artifact to changeset: %s", err.Error())

pkg/skaffold/runner/dev_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"k8s.io/client-go/tools/clientcmd/api"
2626

2727
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/filemon"
28+
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext"
2829
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
2930
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/sync"
3031
"github.com/GoogleContainerTools/skaffold/testutil"
@@ -342,11 +343,11 @@ func TestDevSync(t *testing.T) {
342343
for _, test := range tests {
343344
testutil.Run(t, test.description, func(t *testutil.T) {
344345
var actualFileSyncEventCalls fileSyncEventCalls
346+
t.SetupFakeKubernetesContext(api.Config{CurrentContext: "cluster1"})
345347
t.Override(&fileSyncInProgress, func(int, string) { actualFileSyncEventCalls.InProgress++ })
346348
t.Override(&fileSyncFailed, func(int, string, error) { actualFileSyncEventCalls.Failed++ })
347349
t.Override(&fileSyncSucceeded, func(int, string) { actualFileSyncEventCalls.Succeeded++ })
348-
t.SetupFakeKubernetesContext(api.Config{CurrentContext: "cluster1"})
349-
t.Override(&sync.WorkingDir, func(string, map[string]bool) (string, error) { return "/", nil })
350+
t.Override(&sync.WorkingDir, func(string, *runcontext.RunContext) (string, error) { return "/", nil })
350351
test.testBench.cycles = len(test.watchEvents)
351352

352353
runner := createRunner(t, test.testBench, &TestMonitor{

pkg/skaffold/sync/sync.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker"
3636
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/filemon"
3737
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes"
38+
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext"
3839
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
3940
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
4041
)
@@ -44,29 +45,29 @@ var (
4445
WorkingDir = docker.RetrieveWorkingDir
4546
)
4647

47-
func NewItem(a *latest.Artifact, e filemon.Events, builds []build.Artifact, insecureRegistries map[string]bool, destProvider DestinationProvider) (*Item, error) {
48-
if !e.HasChanged() || a.Sync == nil {
48+
func NewItem(a *latest.Artifact, e filemon.Events, builds []build.Artifact, runCtx *runcontext.RunContext, destProvider DestinationProvider) (*Item, error) {
49+
switch {
50+
case !e.HasChanged():
4951
return nil, nil
50-
}
5152

52-
if len(a.Sync.Manual) > 0 {
53-
return manualSyncItem(a, e, builds, insecureRegistries)
54-
}
53+
case a.Sync != nil && len(a.Sync.Manual) > 0:
54+
return manualSyncItem(a, e, builds, runCtx)
5555

56-
if len(a.Sync.Infer) > 0 {
56+
case a.Sync != nil && len(a.Sync.Infer) > 0:
5757
return inferredSyncItem(a, e, builds, destProvider)
58-
}
5958

60-
return nil, nil
59+
default:
60+
return nil, nil
61+
}
6162
}
6263

63-
func manualSyncItem(a *latest.Artifact, e filemon.Events, builds []build.Artifact, insecureRegistries map[string]bool) (*Item, error) {
64+
func manualSyncItem(a *latest.Artifact, e filemon.Events, builds []build.Artifact, runCtx *runcontext.RunContext) (*Item, error) {
6465
tag := latestTag(a.ImageName, builds)
6566
if tag == "" {
6667
return nil, fmt.Errorf("could not find latest tag for image %s in builds: %v", a.ImageName, builds)
6768
}
6869

69-
containerWd, err := WorkingDir(tag, insecureRegistries)
70+
containerWd, err := WorkingDir(tag, runCtx)
7071
if err != nil {
7172
return nil, errors.Wrapf(err, "retrieving working dir for %s", tag)
7273
}

pkg/skaffold/sync/sync_test.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/build"
3232
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/filemon"
3333
pkgkubernetes "github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes"
34+
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext"
3435
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
3536
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
3637
"github.com/GoogleContainerTools/skaffold/testutil"
@@ -637,12 +638,10 @@ func TestNewSyncItem(t *testing.T) {
637638
}
638639
for _, test := range tests {
639640
testutil.Run(t, test.description, func(t *testutil.T) {
640-
t.Override(&WorkingDir, func(string, map[string]bool) (string, error) {
641-
return test.workingDir, nil
642-
})
641+
t.Override(&WorkingDir, func(string, *runcontext.RunContext) (string, error) { return test.workingDir, nil })
643642

644643
provider := func() (map[string][]string, error) { return test.dependencies, nil }
645-
actual, err := NewItem(test.artifact, test.evt, test.builds, nil, provider)
644+
actual, err := NewItem(test.artifact, test.evt, test.builds, &runcontext.RunContext{}, provider)
646645

647646
t.CheckErrorAndDeepEqual(test.shouldErr, err, test.expected, actual)
648647
})

0 commit comments

Comments
 (0)