Skip to content

Commit 2e6ed08

Browse files
authored
Merge pull request #740 from dgageot/builder-config
Builders should only rely on their specific config
2 parents 65337cd + df8ed7c commit 2e6ed08

File tree

5 files changed

+58
-118
lines changed

5 files changed

+58
-118
lines changed

pkg/skaffold/build/container_builder.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ const (
6868
)
6969

7070
type GoogleCloudBuilder struct {
71-
*v1alpha2.BuildConfig
71+
*v1alpha2.GoogleCloudBuild
7272
}
7373

74-
func NewGoogleCloudBuilder(cfg *v1alpha2.BuildConfig) (*GoogleCloudBuilder, error) {
75-
return &GoogleCloudBuilder{BuildConfig: cfg}, nil
74+
func NewGoogleCloudBuilder(cfg *v1alpha2.GoogleCloudBuild) (*GoogleCloudBuilder, error) {
75+
return &GoogleCloudBuilder{
76+
GoogleCloudBuild: cfg,
77+
}, nil
7678
}
7779

7880
func (cb *GoogleCloudBuilder) Labels() map[string]string {
@@ -124,8 +126,8 @@ func (cb *GoogleCloudBuilder) buildArtifact(ctx context.Context, out io.Writer,
124126
}
125127
logrus.Debugf("Build args: %s", buildArgs)
126128

127-
cbBucket := fmt.Sprintf("%s%s", cb.GoogleCloudBuild.ProjectID, constants.GCSBucketSuffix)
128-
buildObject := fmt.Sprintf("source/%s-%s.tar.gz", cb.GoogleCloudBuild.ProjectID, util.RandomID())
129+
cbBucket := fmt.Sprintf("%s%s", cb.ProjectID, constants.GCSBucketSuffix)
130+
buildObject := fmt.Sprintf("source/%s-%s.tar.gz", cb.ProjectID, util.RandomID())
129131

130132
if err := cb.createBucketIfNotExists(ctx, cbBucket); err != nil {
131133
return nil, errors.Wrap(err, "creating bucket if not exists")
@@ -141,7 +143,7 @@ func (cb *GoogleCloudBuilder) buildArtifact(ctx context.Context, out io.Writer,
141143

142144
args := append([]string{"build", "--tag", artifact.ImageName, "-f", artifact.DockerArtifact.DockerfilePath}, buildArgs...)
143145
args = append(args, ".")
144-
call := cbclient.Projects.Builds.Create(cb.GoogleCloudBuild.ProjectID, &cloudbuild.Build{
146+
call := cbclient.Projects.Builds.Create(cb.ProjectID, &cloudbuild.Build{
145147
LogsBucket: cbBucket,
146148
Source: &cloudbuild.Source{
147149
StorageSource: &cloudbuild.StorageSource{
@@ -173,7 +175,7 @@ func (cb *GoogleCloudBuilder) buildArtifact(ctx context.Context, out io.Writer,
173175
watch:
174176
for {
175177
logrus.Debugf("current offset %d", offset)
176-
b, err := cbclient.Projects.Builds.Get(cb.GoogleCloudBuild.ProjectID, remoteID).Do()
178+
b, err := cbclient.Projects.Builds.Get(cb.ProjectID, remoteID).Do()
177179
if err != nil {
178180
return nil, errors.Wrap(err, "getting build status")
179181
}
@@ -284,7 +286,7 @@ func (cb *GoogleCloudBuilder) checkBucketProjectCorrect(ctx context.Context, buc
284286
if err != nil {
285287
return errors.Wrap(err, "getting storage client")
286288
}
287-
it := c.Buckets(ctx, cb.GoogleCloudBuild.ProjectID)
289+
it := c.Buckets(ctx, cb.ProjectID)
288290
// Set the prefix to the bucket we're looking for to only return that bucket and buckets with that prefix
289291
// that we'll filter further later on
290292
it.Prefix = bucket
@@ -322,11 +324,11 @@ func (cb *GoogleCloudBuilder) createBucketIfNotExists(ctx context.Context, bucke
322324
return errors.Wrapf(err, "getting bucket %s", bucket)
323325
}
324326

325-
if err := c.Bucket(bucket).Create(ctx, cb.GoogleCloudBuild.ProjectID, &cstorage.BucketAttrs{
327+
if err := c.Bucket(bucket).Create(ctx, cb.ProjectID, &cstorage.BucketAttrs{
326328
Name: bucket,
327329
}); err != nil {
328330
return err
329331
}
330-
logrus.Debugf("Created bucket %s in %s", bucket, cb.GoogleCloudBuild.ProjectID)
332+
logrus.Debugf("Created bucket %s in %s", bucket, cb.ProjectID)
331333
return nil
332334
}

pkg/skaffold/build/kaniko.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ import (
3636

3737
// KanikoBuilder can build docker artifacts on Kubernetes, using Kaniko.
3838
type KanikoBuilder struct {
39-
*v1alpha2.BuildConfig
39+
*v1alpha2.KanikoBuild
4040
}
4141

4242
// NewKanikoBuilder creates a KanikoBuilder.
43-
func NewKanikoBuilder(cfg *v1alpha2.BuildConfig) (*KanikoBuilder, error) {
43+
func NewKanikoBuilder(cfg *v1alpha2.KanikoBuild) (*KanikoBuilder, error) {
4444
return &KanikoBuilder{
45-
BuildConfig: cfg,
45+
KanikoBuild: cfg,
4646
}, nil
4747
}
4848

@@ -104,26 +104,26 @@ func (k *KanikoBuilder) setupSecret() (func(), error) {
104104
return nil, errors.Wrap(err, "getting kubernetes client")
105105
}
106106

107-
secrets := client.CoreV1().Secrets(k.KanikoBuild.Namespace)
107+
secrets := client.CoreV1().Secrets(k.Namespace)
108108

109-
if k.KanikoBuild.PullSecret == "" {
109+
if k.PullSecret == "" {
110110
logrus.Debug("No pull secret specified. Checking for one in the cluster.")
111111

112-
if _, err := secrets.Get(k.KanikoBuild.PullSecretName, metav1.GetOptions{}); err != nil {
112+
if _, err := secrets.Get(k.PullSecretName, metav1.GetOptions{}); err != nil {
113113
return nil, errors.Wrap(err, "checking for existing kaniko secret")
114114
}
115115

116116
return func() {}, nil
117117
}
118118

119-
secretData, err := ioutil.ReadFile(k.KanikoBuild.PullSecret)
119+
secretData, err := ioutil.ReadFile(k.PullSecret)
120120
if err != nil {
121121
return nil, errors.Wrap(err, "reading secret")
122122
}
123123

124124
secret := &v1.Secret{
125125
ObjectMeta: metav1.ObjectMeta{
126-
Name: k.KanikoBuild.PullSecretName,
126+
Name: k.PullSecretName,
127127
Labels: map[string]string{"skaffold-kaniko": "skaffold-kaniko"},
128128
},
129129
Data: map[string][]byte{
@@ -136,7 +136,7 @@ func (k *KanikoBuilder) setupSecret() (func(), error) {
136136
}
137137

138138
return func() {
139-
if err := secrets.Delete(k.KanikoBuild.PullSecretName, &metav1.DeleteOptions{}); err != nil {
139+
if err := secrets.Delete(k.PullSecretName, &metav1.DeleteOptions{}); err != nil {
140140
logrus.Warnf("deleting secret")
141141
}
142142
}, nil

pkg/skaffold/build/local.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,31 @@ import (
3434

3535
// LocalBuilder uses the host docker daemon to build and tag the image
3636
type LocalBuilder struct {
37-
*v1alpha2.BuildConfig
37+
*v1alpha2.LocalBuild
3838

3939
api docker.APIClient
4040
localCluster bool
4141
kubeContext string
4242
}
4343

4444
// NewLocalBuilder returns an new instance of a LocalBuilder
45-
func NewLocalBuilder(cfg *v1alpha2.BuildConfig, kubeContext string) (*LocalBuilder, error) {
45+
func NewLocalBuilder(cfg *v1alpha2.LocalBuild, kubeContext string) (*LocalBuilder, error) {
4646
api, err := docker.NewAPIClient()
4747
if err != nil {
4848
return nil, errors.Wrap(err, "getting docker client")
4949
}
5050

5151
l := &LocalBuilder{
52-
BuildConfig: cfg,
52+
LocalBuild: cfg,
5353

5454
kubeContext: kubeContext,
5555
api: api,
5656
localCluster: kubeContext == constants.DefaultMinikubeContext || kubeContext == constants.DefaultDockerForDesktopContext,
5757
}
5858

59-
if cfg.LocalBuild.SkipPush == nil {
59+
if cfg.SkipPush == nil {
6060
logrus.Debugf("skipPush value not present. defaulting to cluster default %t (minikube=true, d4d=true, gke=false)", l.localCluster)
61-
cfg.LocalBuild.SkipPush = &l.localCluster
61+
cfg.SkipPush = &l.localCluster
6262
}
6363

6464
return l, nil
@@ -126,7 +126,7 @@ func (l *LocalBuilder) Build(ctx context.Context, out io.Writer, tagger tag.Tagg
126126
if _, err := io.WriteString(out, fmt.Sprintf("Successfully tagged %s\n", tag)); err != nil {
127127
return nil, errors.Wrap(err, "writing tag status")
128128
}
129-
if !*l.LocalBuild.SkipPush {
129+
if !*l.SkipPush {
130130
if err := docker.RunPush(ctx, l.api, tag, out); err != nil {
131131
return nil, errors.Wrapf(err, "pushing [%s]", tag)
132132
}

pkg/skaffold/build/local_test.go

+28-90
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func TestLocalRun(t *testing.T) {
6868

6969
var tests = []struct {
7070
description string
71-
config *v1alpha2.BuildConfig
71+
config *v1alpha2.LocalBuild
7272
out io.Writer
7373
api docker.APIClient
7474
tagger tag.Tagger
@@ -80,19 +80,15 @@ func TestLocalRun(t *testing.T) {
8080
{
8181
description: "single build",
8282
out: ioutil.Discard,
83-
config: &v1alpha2.BuildConfig{
84-
Artifacts: []*v1alpha2.Artifact{
85-
{
86-
ImageName: "gcr.io/test/image",
87-
Workspace: tmp,
88-
ArtifactType: v1alpha2.ArtifactType{
89-
DockerArtifact: &v1alpha2.DockerArtifact{},
90-
},
91-
},
92-
},
93-
BuildType: v1alpha2.BuildType{
94-
LocalBuild: &v1alpha2.LocalBuild{
95-
SkipPush: util.BoolPtr(false),
83+
config: &v1alpha2.LocalBuild{
84+
SkipPush: util.BoolPtr(false),
85+
},
86+
artifacts: []*v1alpha2.Artifact{
87+
{
88+
ImageName: "gcr.io/test/image",
89+
Workspace: tmp,
90+
ArtifactType: v1alpha2.ArtifactType{
91+
DockerArtifact: &v1alpha2.DockerArtifact{},
9692
},
9793
},
9894
},
@@ -108,28 +104,8 @@ func TestLocalRun(t *testing.T) {
108104
{
109105
description: "subset build",
110106
out: ioutil.Discard,
111-
config: &v1alpha2.BuildConfig{
112-
Artifacts: []*v1alpha2.Artifact{
113-
{
114-
ImageName: "gcr.io/test/image",
115-
Workspace: tmp,
116-
ArtifactType: v1alpha2.ArtifactType{
117-
DockerArtifact: &v1alpha2.DockerArtifact{},
118-
},
119-
},
120-
{
121-
ImageName: "gcr.io/test/image2",
122-
Workspace: tmp,
123-
ArtifactType: v1alpha2.ArtifactType{
124-
DockerArtifact: &v1alpha2.DockerArtifact{},
125-
},
126-
},
127-
},
128-
BuildType: v1alpha2.BuildType{
129-
LocalBuild: &v1alpha2.LocalBuild{
130-
SkipPush: util.BoolPtr(true),
131-
},
132-
},
107+
config: &v1alpha2.LocalBuild{
108+
SkipPush: util.BoolPtr(true),
133109
},
134110
tagger: &tag.ChecksumTagger{},
135111
artifacts: []*v1alpha2.Artifact{
@@ -152,22 +128,15 @@ func TestLocalRun(t *testing.T) {
152128
{
153129
description: "local cluster bad writer",
154130
out: &testutil.BadWriter{},
155-
config: &v1alpha2.BuildConfig{},
131+
config: &v1alpha2.LocalBuild{},
156132
shouldErr: true,
157133
localCluster: true,
158134
},
159135
{
160136
description: "error image build",
161137
out: ioutil.Discard,
162-
config: &v1alpha2.BuildConfig{
163-
Artifacts: []*v1alpha2.Artifact{
164-
{
165-
ImageName: "test",
166-
Workspace: ".",
167-
},
168-
},
169-
},
170-
tagger: &tag.ChecksumTagger{},
138+
artifacts: []*v1alpha2.Artifact{{}},
139+
tagger: &tag.ChecksumTagger{},
171140
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{
172141
ErrImageBuild: true,
173142
}),
@@ -176,15 +145,8 @@ func TestLocalRun(t *testing.T) {
176145
{
177146
description: "error image tag",
178147
out: ioutil.Discard,
179-
config: &v1alpha2.BuildConfig{
180-
Artifacts: []*v1alpha2.Artifact{
181-
{
182-
ImageName: "test",
183-
Workspace: ".",
184-
},
185-
},
186-
},
187-
tagger: &tag.ChecksumTagger{},
148+
artifacts: []*v1alpha2.Artifact{{}},
149+
tagger: &tag.ChecksumTagger{},
188150
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{
189151
ErrImageTag: true,
190152
}),
@@ -193,30 +155,16 @@ func TestLocalRun(t *testing.T) {
193155
{
194156
description: "bad writer",
195157
out: &testutil.BadWriter{},
196-
config: &v1alpha2.BuildConfig{
197-
Artifacts: []*v1alpha2.Artifact{
198-
{
199-
ImageName: "test",
200-
Workspace: ".",
201-
},
202-
},
203-
},
204-
tagger: &tag.ChecksumTagger{},
205-
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{}),
206-
shouldErr: true,
158+
artifacts: []*v1alpha2.Artifact{{}},
159+
tagger: &tag.ChecksumTagger{},
160+
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{}),
161+
shouldErr: true,
207162
},
208163
{
209164
description: "error image list",
210165
out: &testutil.BadWriter{},
211-
config: &v1alpha2.BuildConfig{
212-
Artifacts: []*v1alpha2.Artifact{
213-
{
214-
ImageName: "test",
215-
Workspace: ".",
216-
},
217-
},
218-
},
219-
tagger: &tag.ChecksumTagger{},
166+
artifacts: []*v1alpha2.Artifact{{}},
167+
tagger: &tag.ChecksumTagger{},
220168
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{
221169
ErrImageList: true,
222170
}),
@@ -225,30 +173,20 @@ func TestLocalRun(t *testing.T) {
225173
{
226174
description: "error tagger",
227175
out: ioutil.Discard,
228-
config: &v1alpha2.BuildConfig{
229-
Artifacts: []*v1alpha2.Artifact{
230-
{
231-
ImageName: "test",
232-
Workspace: ".",
233-
},
234-
},
235-
},
236-
tagger: &FakeTagger{Err: fmt.Errorf("")},
237-
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{}),
238-
shouldErr: true,
176+
artifacts: []*v1alpha2.Artifact{{}},
177+
tagger: &FakeTagger{Err: fmt.Errorf("")},
178+
api: testutil.NewFakeImageAPIClient(map[string]string{}, &testutil.FakeImageAPIOptions{}),
179+
shouldErr: true,
239180
},
240181
}
241182

242183
for _, test := range tests {
243184
t.Run(test.description, func(t *testing.T) {
244185
l := LocalBuilder{
245-
BuildConfig: test.config,
186+
LocalBuild: test.config,
246187
api: test.api,
247188
localCluster: test.localCluster,
248189
}
249-
if test.artifacts == nil {
250-
test.artifacts = test.config.Artifacts
251-
}
252190

253191
res, err := l.Build(context.Background(), test.out, test.tagger, test.artifacts)
254192
testutil.CheckErrorAndDeepEqual(t, test.shouldErr, err, test.expected, res)

pkg/skaffold/runner/runner.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,15 @@ func getBuilder(cfg *v1alpha2.BuildConfig, kubeContext string) (build.Builder, e
8989
switch {
9090
case cfg.LocalBuild != nil:
9191
logrus.Debugf("Using builder: local")
92-
return build.NewLocalBuilder(cfg, kubeContext)
92+
return build.NewLocalBuilder(cfg.LocalBuild, kubeContext)
9393

9494
case cfg.GoogleCloudBuild != nil:
9595
logrus.Debugf("Using builder: google cloud")
96-
return build.NewGoogleCloudBuilder(cfg)
96+
return build.NewGoogleCloudBuilder(cfg.GoogleCloudBuild)
9797

9898
case cfg.KanikoBuild != nil:
9999
logrus.Debugf("Using builder: kaniko")
100-
return build.NewKanikoBuilder(cfg)
100+
return build.NewKanikoBuilder(cfg.KanikoBuild)
101101

102102
default:
103103
return nil, fmt.Errorf("Unknown builder for config %+v", cfg)

0 commit comments

Comments
 (0)