Merge pull request #3899 from flouthoc/set-correct-targetplatform
build: automatically set correct `$TARGETPLATFORM` where expected.
This commit is contained in:
commit
d6fd289adb
2
go.mod
2
go.mod
|
@ -27,7 +27,7 @@ require (
|
|||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417
|
||||
github.com/opencontainers/runtime-tools v0.9.0
|
||||
github.com/opencontainers/selinux v1.10.1
|
||||
github.com/openshift/imagebuilder v1.2.3
|
||||
github.com/openshift/imagebuilder v1.2.4-0.20220502172744-009dbc6cb805
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
|
|
4
go.sum
4
go.sum
|
@ -789,8 +789,8 @@ github.com/opencontainers/selinux v1.8.5/go.mod h1:HTvjPFoGMbpQsG886e3lQwnsRWtE4
|
|||
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
|
||||
github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w=
|
||||
github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
|
||||
github.com/openshift/imagebuilder v1.2.3 h1:jvA7mESJdclRKkTe3Yl6UWlliFNVW6mLY8RI+Rrfhfo=
|
||||
github.com/openshift/imagebuilder v1.2.3/go.mod h1:TRYHe4CH9U6nkDjxjBNM5klrLbJBrRbpJE5SaRwUBsQ=
|
||||
github.com/openshift/imagebuilder v1.2.4-0.20220502172744-009dbc6cb805 h1:bfLqBGqF04GAoqbMkSrd5VPk/t66OnP0bTTisMaF4ro=
|
||||
github.com/openshift/imagebuilder v1.2.4-0.20220502172744-009dbc6cb805/go.mod h1:TRYHe4CH9U6nkDjxjBNM5klrLbJBrRbpJE5SaRwUBsQ=
|
||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||
github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f h1:/UDgs8FGMqwnHagNDPGOlts35QkhAZ8by3DR7nMih7M=
|
||||
github.com/ostreedev/ostree-go v0.0.0-20210805093236-719684c64e4f/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc=
|
||||
|
|
|
@ -340,6 +340,40 @@ func buildDockerfilesOnce(ctx context.Context, store storage.Store, logger *logr
|
|||
|
||||
warnOnUnsetBuildArgs(logger, mainNode, options.Args)
|
||||
|
||||
// --platform was explicitly selected for this build
|
||||
// so set correct TARGETPLATFORM in args if it is not
|
||||
// already selected by the user.
|
||||
if options.SystemContext.OSChoice != "" && options.SystemContext.ArchitectureChoice != "" {
|
||||
// os component from --platform string populates TARGETOS
|
||||
// buildkit parity: give priority to user's `--build-arg`
|
||||
if _, ok := options.Args["TARGETOS"]; !ok {
|
||||
options.Args["TARGETOS"] = options.SystemContext.OSChoice
|
||||
}
|
||||
// arch component from --platform string populates TARGETARCH
|
||||
// buildkit parity: give priority to user's `--build-arg`
|
||||
if _, ok := options.Args["TARGETARCH"]; !ok {
|
||||
options.Args["TARGETARCH"] = options.SystemContext.ArchitectureChoice
|
||||
}
|
||||
// variant component from --platform string populates TARGETVARIANT
|
||||
// buildkit parity: give priority to user's `--build-arg`
|
||||
if _, ok := options.Args["TARGETVARIANT"]; !ok {
|
||||
if options.SystemContext.VariantChoice != "" {
|
||||
options.Args["TARGETVARIANT"] = options.SystemContext.VariantChoice
|
||||
}
|
||||
}
|
||||
// buildkit parity: give priority to user's `--build-arg`
|
||||
if _, ok := options.Args["TARGETPLATFORM"]; !ok {
|
||||
// buildkit parity: TARGETPLATFORM should be always created
|
||||
// from SystemContext and not `TARGETOS` and `TARGETARCH` because
|
||||
// users can always override values of `TARGETOS` and `TARGETARCH`
|
||||
// but `TARGETPLATFORM` should be set independent of those values.
|
||||
options.Args["TARGETPLATFORM"] = options.SystemContext.OSChoice + "/" + options.SystemContext.ArchitectureChoice
|
||||
if options.SystemContext.VariantChoice != "" {
|
||||
options.Args["TARGETPLATFORM"] = options.Args["TARGETPLATFORM"] + "/" + options.SystemContext.VariantChoice
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for i, d := range dockerfilecontents[1:] {
|
||||
additionalNode, err := imagebuilder.ParseDockerfile(bytes.NewReader(d))
|
||||
if err != nil {
|
||||
|
|
|
@ -146,6 +146,37 @@ _EOF
|
|||
fi
|
||||
}
|
||||
|
||||
@test "build-with-inline-platform-and-rely-on-defaultbuiltinargs" {
|
||||
# Get host arch
|
||||
run_buildah info --format '{{.host.arch}}'
|
||||
myarch="$output"
|
||||
otherarch="arm64"
|
||||
# just make sure that other arch is not equivalent to host arch
|
||||
if [[ "$otherarch" == "$myarch" ]]; then
|
||||
otherarch="amd64"
|
||||
fi
|
||||
|
||||
run_buildah build --platform linux/$otherarch $WITH_POLICY_JSON -t test -f $BUDFILES/multiarch/Dockerfile.built-in-args
|
||||
expect_output --substring "I'm compiling for linux/$otherarch"
|
||||
expect_output --substring "and tagging for linux/$otherarch"
|
||||
expect_output --substring "and OS linux"
|
||||
expect_output --substring "and ARCH $otherarch"
|
||||
run_buildah inspect --format '{{ .OCIv1.Architecture }}' test
|
||||
expect_output --substring "$otherarch"
|
||||
}
|
||||
|
||||
# Buildkit parity: this verifies if we honor custom overrides of TARGETOS, TARGETVARIANT, TARGETARCH and TARGETPLATFORM if user wants
|
||||
@test "build-with-inline-platform-and-rely-on-defaultbuiltinargs-check-custom-override" {
|
||||
run_buildah build --platform linux/arm64 $WITH_POLICY_JSON --build-arg TARGETOS=android -t test -f $BUDFILES/multiarch/Dockerfile.built-in-args
|
||||
expect_output --substring "I'm compiling for linux/arm64"
|
||||
expect_output --substring "and tagging for linux/arm64"
|
||||
## Note since we used --build-arg and overrided hence OS must be anroid
|
||||
expect_output --substring "and OS android"
|
||||
expect_output --substring "and ARCH $otherarch"
|
||||
run_buildah inspect --format '{{ .OCIv1.Architecture }}' test
|
||||
expect_output --substring "$otherarch"
|
||||
}
|
||||
|
||||
# Following test must pass since we want to tag image as host arch
|
||||
# Test for use-case described here: https://github.com/containers/buildah/issues/3261
|
||||
@test "build-with-inline-platform-amd-but-tag-as-arm" {
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
FROM --platform=$BUILDPLATFORM alpine
|
||||
ARG TARGETPLATFORM
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
ARG BUILDPLATFORM
|
||||
RUN echo "I'm compiling for $TARGETPLATFORM on $BUILDPLATFORM and tagging for $TARGETPLATFORM and OS $TARGETOS and ARCH $TARGETARCH"
|
|
@ -234,7 +234,9 @@ func from(b *Builder, args []string, attributes map[string]bool, flagArgs []stri
|
|||
return fmt.Errorf("Windows does not support FROM scratch")
|
||||
}
|
||||
}
|
||||
defaultArgs := envMapAsSlice(builtinBuildArgs)
|
||||
userArgs := mergeEnv(envMapAsSlice(b.Args), b.Env)
|
||||
userArgs = mergeEnv(defaultArgs, userArgs)
|
||||
for _, a := range flagArgs {
|
||||
arg, err := ProcessWord(a, userArgs)
|
||||
if err != nil {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
|
||||
%global golang_version 1.8.1
|
||||
%{!?version: %global version 1.2.3}
|
||||
%{!?version: %global version 1.2.4-dev}
|
||||
%{!?release: %global release 1}
|
||||
%global package_name imagebuilder
|
||||
%global product_name Container Image Builder
|
||||
|
|
|
@ -442,7 +442,7 @@ github.com/opencontainers/selinux/go-selinux
|
|||
github.com/opencontainers/selinux/go-selinux/label
|
||||
github.com/opencontainers/selinux/pkg/pwalk
|
||||
github.com/opencontainers/selinux/pkg/pwalkdir
|
||||
# github.com/openshift/imagebuilder v1.2.3
|
||||
# github.com/openshift/imagebuilder v1.2.4-0.20220502172744-009dbc6cb805
|
||||
## explicit
|
||||
github.com/openshift/imagebuilder
|
||||
github.com/openshift/imagebuilder/dockerclient
|
||||
|
|
Loading…
Reference in New Issue