@@ -20,10 +20,12 @@ import (
20
20
"context"
21
21
"testing"
22
22
23
- cloudbuild "google.golang.org/api/cloudbuild/v1"
23
+ v1 "github.com/opencontainers/image-spec/specs-go/v1"
24
+ "google.golang.org/api/cloudbuild/v1"
24
25
25
26
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/config"
26
27
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker"
28
+ "github.com/GoogleContainerTools/skaffold/pkg/skaffold/platform"
27
29
latestV1 "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest/v1"
28
30
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
29
31
"github.com/GoogleContainerTools/skaffold/testutil"
@@ -33,6 +35,7 @@ func TestDockerBuildSpec(t *testing.T) {
33
35
tests := []struct {
34
36
description string
35
37
artifact * latestV1.Artifact
38
+ platforms platform.Matcher
36
39
expected cloudbuild.Build
37
40
shouldErr bool
38
41
}{
@@ -130,6 +133,42 @@ func TestDockerBuildSpec(t *testing.T) {
130
133
},
131
134
shouldErr : true ,
132
135
},
136
+
137
+ {
138
+ description : "cross-platform build" ,
139
+ artifact : & latestV1.Artifact {
140
+ ArtifactType : latestV1.ArtifactType {
141
+ DockerArtifact : & latestV1.DockerArtifact {
142
+ DockerfilePath : "Dockerfile" ,
143
+ BuildArgs : map [string ]* string {
144
+ "arg1" : util .StringPtr ("value1" ),
145
+ "arg2" : nil ,
146
+ },
147
+ },
148
+ },
149
+ },
150
+ platforms : platform.Matcher {Platforms : []v1.Platform {{Architecture : "arm" , OS : "freebsd" }}},
151
+ expected : cloudbuild.Build {
152
+ LogsBucket : "bucket" ,
153
+ Source : & cloudbuild.Source {
154
+ StorageSource : & cloudbuild.StorageSource {
155
+ Bucket : "bucket" ,
156
+ Object : "object" ,
157
+ },
158
+ },
159
+ Steps : []* cloudbuild.BuildStep {{
160
+ Name : "docker/docker" ,
161
+ Args : []string {"build" , "--tag" , "nginx" , "-f" , "Dockerfile" , "--platform" , "freebsd/arm" , "--build-arg" , "arg1=value1" , "--build-arg" , "arg2" , "." },
162
+ Env : []string {"DOCKER_BUILDKIT=1" },
163
+ }},
164
+ Images : []string {"nginx" },
165
+ Options : & cloudbuild.BuildOptions {
166
+ DiskSizeGb : 100 ,
167
+ MachineType : "n1-standard-1" ,
168
+ },
169
+ Timeout : "10m" ,
170
+ },
171
+ },
133
172
}
134
173
135
174
for _ , test := range tests {
@@ -157,7 +196,7 @@ func TestDockerBuildSpec(t *testing.T) {
157
196
Timeout : "10m" ,
158
197
})
159
198
160
- desc , err := builder .buildSpec (context .Background (), test .artifact , "nginx" , "bucket" , "object" )
199
+ desc , err := builder .buildSpec (context .Background (), test .artifact , "nginx" , test . platforms , "bucket" , "object" )
161
200
t .CheckErrorAndDeepEqual (test .shouldErr , err , test .expected , desc )
162
201
})
163
202
}
@@ -168,6 +207,7 @@ func TestPullCacheFrom(t *testing.T) {
168
207
description string
169
208
artifact * latestV1.Artifact
170
209
tag string
210
+ platforms platform.Matcher
171
211
expected []* cloudbuild.BuildStep
172
212
shouldErr bool
173
213
}{
@@ -216,6 +256,32 @@ func TestPullCacheFrom(t *testing.T) {
216
256
Args : []string {"build" , "--tag" , "gcr.io/k8s-skaffold/test:tagged" , "-f" , "Dockerfile" , "--cache-from" , "gcr.io/k8s-skaffold/test:tagged" , "." },
217
257
}},
218
258
},
259
+ {
260
+ description : "cross-platform cache-from images" ,
261
+ artifact : & latestV1.Artifact {
262
+ ArtifactType : latestV1.ArtifactType {
263
+ DockerArtifact : & latestV1.DockerArtifact {
264
+ DockerfilePath : "Dockerfile" ,
265
+ CacheFrom : []string {"from/image1" , "from/image2" },
266
+ },
267
+ },
268
+ },
269
+ tag : "nginx2" ,
270
+ platforms : platform.Matcher {Platforms : []v1.Platform {{Architecture : "arm" , OS : "freebsd" }}},
271
+ expected : []* cloudbuild.BuildStep {{
272
+ Name : "docker/docker" ,
273
+ Entrypoint : "sh" ,
274
+ Args : []string {"-c" , "docker pull --platform freebsd/arm from/image1 || true" },
275
+ }, {
276
+ Name : "docker/docker" ,
277
+ Entrypoint : "sh" ,
278
+ Args : []string {"-c" , "docker pull --platform freebsd/arm from/image2 || true" },
279
+ }, {
280
+ Name : "docker/docker" ,
281
+ Args : []string {"build" , "--tag" , "nginx2" , "-f" , "Dockerfile" , "--platform" , "freebsd/arm" , "--cache-from" , "from/image1" , "--cache-from" , "from/image2" , "." },
282
+ Env : []string {"DOCKER_BUILDKIT=1" },
283
+ }},
284
+ },
219
285
}
220
286
221
287
for _ , test := range tests {
@@ -226,7 +292,7 @@ func TestPullCacheFrom(t *testing.T) {
226
292
builder := NewBuilder (& mockBuilderContext {}, & latestV1.GoogleCloudBuild {
227
293
DockerImage : "docker/docker" ,
228
294
})
229
- desc , err := builder .dockerBuildSpec (test .artifact , test .tag )
295
+ desc , err := builder .dockerBuildSpec (test .artifact , test .tag , test . platforms )
230
296
231
297
t .CheckErrorAndDeepEqual (test .shouldErr , err , test .expected , desc .Steps )
232
298
})
0 commit comments