Skip to content

Commit 49efa52

Browse files
committed
Set empty TARGETVARIANT and BUILDVARIANT
Docker does not set these values for ARM64. This fixes the TestConformance/multistage-builtin-args and TestConformance/builtins tests on ARM64. Signed-off-by: Jan Rodák <[email protected]>
1 parent 48cdd74 commit 49efa52

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

imagebuildah/build.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -427,12 +427,9 @@ func buildDockerfilesOnce(ctx context.Context, store storage.Store, logger *logr
427427
// fill them in using values for the default platform
428428
defaultPlatform := platforms.DefaultSpec()
429429
builtinArgDefaults["TARGETOS"] = defaultPlatform.OS
430-
builtinArgDefaults["TARGETVARIANT"] = defaultPlatform.Variant
430+
builtinArgDefaults["TARGETVARIANT"] = ""
431431
builtinArgDefaults["TARGETARCH"] = defaultPlatform.Architecture
432432
builtinArgDefaults["TARGETPLATFORM"] = defaultPlatform.OS + "/" + defaultPlatform.Architecture
433-
if defaultPlatform.Variant != "" {
434-
builtinArgDefaults["TARGETPLATFORM"] += "/" + defaultPlatform.Variant
435-
}
436433
}
437434
delete(options.Args, "TARGETPLATFORM")
438435

@@ -453,6 +450,13 @@ func buildDockerfilesOnce(ctx context.Context, store storage.Store, logger *logr
453450
for k, v := range builtinArgDefaults {
454451
b.BuiltinArgDefaults[k] = v
455452
}
453+
454+
buildVariant := b.BuiltinArgDefaults["BUILDVARIANT"]
455+
buildPlatform := b.BuiltinArgDefaults["BUILDPLATFORM"]
456+
cleanedBuildPlatform, _ := strings.CutSuffix(buildPlatform, "/"+buildVariant)
457+
b.BuiltinArgDefaults["BUILDPLATFORM"] = cleanedBuildPlatform
458+
b.BuiltinArgDefaults["BUILDVARIANT"] = ""
459+
456460
defaultContainerConfig, err := config.Default()
457461
if err != nil {
458462
return "", nil, fmt.Errorf("failed to get container config: %w", err)

tests/bud.bats

+8-4
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,8 @@ _EOF
290290
"With explicit --platform, buildah should warn about pulling difference in platform"
291291
assert "$output" =~ "TARGETOS=linux" " --platform TARGETOS set correctly"
292292
assert "$output" =~ "TARGETARCH=amd64" " --platform TARGETARCH set correctly"
293-
assert "$output" =~ "TARGETVARIANT=" " --platform TARGETVARIANT set correctly"
293+
# By default, BUILDVARIANT/TARGETVARIANT should be empty.
294+
assert "$output" =~ "TARGETVARIANT=\s" " --platform TARGETVARIANT set correctly"
294295
assert "$output" =~ "TARGETPLATFORM=linux/amd64/v2" " --platform TARGETPLATFORM set correctly"
295296

296297
# Likewise with individual args
@@ -300,23 +301,26 @@ _EOF
300301
"With explicit --variant, buildah should warn about pulling difference in platform"
301302
assert "$output" =~ "TARGETOS=linux" "--os --arch --variant TARGETOS set correctly"
302303
assert "$output" =~ "TARGETARCH=amd64" "--os --arch --variant TARGETARCH set correctly"
303-
assert "$output" =~ "TARGETVARIANT=" "--os --arch --variant TARGETVARIANT set correctly"
304+
# By default, BUILDVARIANT/TARGETVARIANT should be empty.
305+
assert "$output" =~ "TARGETVARIANT=\s" "--os --arch --variant TARGETVARIANT set correctly"
304306
assert "$output" =~ "TARGETPLATFORM=linux/amd64" "--os --arch --variant TARGETPLATFORM set correctly"
305307

306308
run_buildah build $WITH_POLICY_JSON --os linux -t source -f $containerfile
307309
assert "$output" !~ "WARNING" \
308310
"With explicit --os (but no arch/variant), buildah should not warn about TARGETOS"
309311
assert "$output" =~ "TARGETOS=linux" "--os TARGETOS set correctly"
310312
assert "$output" =~ "TARGETARCH=${ARCH}" "--os TARGETARCH set correctly"
311-
assert "$output" =~ "TARGETVARIANT=" "--os TARGETVARIANT set correctly"
313+
# By default, BUILDVARIANT/TARGETVARIANT should be empty.
314+
assert "$output" =~ "TARGETVARIANT=\s" "--os TARGETVARIANT set correctly"
312315
assert "$output" =~ "TARGETPLATFORM=linux/${ARCH}" "--os TARGETPLATFORM set correctly"
313316

314317
run_buildah build $WITH_POLICY_JSON --arch amd64 -t source -f $containerfile
315318
assert "$output" !~ "WARNING" \
316319
"With explicit --os (but no arch/variant), buildah should not warn about TARGETOS"
317320
assert "$output" =~ "TARGETOS=linux" "--arch TARGETOS set correctly"
318321
assert "$output" =~ "TARGETARCH=amd64" "--arch TARGETARCH set correctly"
319-
assert "$output" =~ "TARGETVARIANT=" "--arch TARGETVARIANT set correctly"
322+
# By default, BUILDVARIANT/TARGETVARIANT should be empty.
323+
assert "$output" =~ "TARGETVARIANT=\s" "--arch TARGETVARIANT set correctly"
320324
assert "$output" =~ "TARGETPLATFORM=linux/amd64" "--arch TARGETPLATFORM set correctly"
321325

322326
for option in "--arch=arm64" "--os=windows" "--variant=v2"; do

tests/conformance/conformance_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3321,7 +3321,7 @@ var internalTestCases = []testCase{
33213321
},
33223322

33233323
{
3324-
name: "multistage-builtin-args",
3324+
name: "multistage-builtin-args", // By default, BUILDVARIANT/TARGETVARIANT should be empty.
33253325
dockerfile: "Dockerfile.margs",
33263326
dockerUseBuildKit: true,
33273327
},

0 commit comments

Comments
 (0)