@@ -16,6 +16,7 @@ import (
16
16
docker "github.com/fsouza/go-dockerclient"
17
17
18
18
"github.com/openshift/imagebuilder/dockerfile/parser"
19
+ "github.com/containerd/containerd/platforms"
19
20
)
20
21
21
22
func TestVolumeSet (t * testing.T ) {
@@ -209,6 +210,46 @@ RUN echo $FOO $BAR`))
209
210
}
210
211
}
211
212
213
+ // Test if `FROM some-${SOME-BUILT-IN-ARG}` args gets resolved correctly.
214
+ func TestArgResolutionOfDefaultVariables (t * testing.T ) {
215
+ // Get architecture from host
216
+ var localspec = platforms .DefaultSpec ()
217
+ for _ , tc := range []struct {
218
+ dockerfile string
219
+ name string
220
+ args map [string ]string
221
+ expectedFrom string
222
+ }{
223
+ {name : "use-default-built-arg" ,
224
+ dockerfile : "FROM platform-${TARGETARCH}" ,
225
+ args : map [string ]string {"FOO" : "bar" },
226
+ expectedFrom : "platform-" + localspec .Architecture },
227
+ {name : "override-default-built-arg" ,
228
+ dockerfile : "FROM platform-${TARGETARCH}" ,
229
+ args : map [string ]string {"TARGETARCH" : "bar" },
230
+ expectedFrom : "platform-bar" },
231
+ {name : "random-built-arg" ,
232
+ dockerfile : "FROM ${FOO}" ,
233
+ args : map [string ]string {"FOO" : "bar" },
234
+ expectedFrom : "bar" },
235
+ } {
236
+ t .Run (tc .name , func (t * testing.T ) {
237
+ n , err := ParseDockerfile (strings .NewReader (tc .dockerfile ))
238
+ if err != nil {
239
+ t .Fatal (err )
240
+ }
241
+ b := NewBuilder (tc .args )
242
+ from , err := b .From (n )
243
+ if err != nil {
244
+ t .Fatal (err )
245
+ }
246
+ if from != tc .expectedFrom {
247
+ t .Fatalf ("expected %s, got %s" , tc .expectedFrom , from )
248
+ }
249
+ })
250
+ }
251
+ }
252
+
212
253
func resolveNodeArgs (b * Builder , node * parser.Node ) error {
213
254
for _ , c := range node .Children {
214
255
if c .Value != "arg" {
0 commit comments