From 8218bd7386253444c66ed0b1f73489bc9cb9f3a4 Mon Sep 17 00:00:00 2001 From: k7kit Date: Wed, 22 Jan 2025 20:45:27 +0800 Subject: [PATCH] feature: support pre-defined build args of multi-platform build arguments --- pkg/dockerfile/buildargs.go | 41 +++++++++++++++++++++++++++++++++++++ pkg/executor/build.go | 1 + 2 files changed, 42 insertions(+) diff --git a/pkg/dockerfile/buildargs.go b/pkg/dockerfile/buildargs.go index 57965b1ec..9b5dc3476 100644 --- a/pkg/dockerfile/buildargs.go +++ b/pkg/dockerfile/buildargs.go @@ -17,8 +17,10 @@ limitations under the License. package dockerfile import ( + "runtime" "strings" + "github.com/GoogleContainerTools/kaniko/pkg/config" d "github.com/docker/docker/builder/dockerfile" "github.com/moby/buildkit/frontend/dockerfile/instructions" ) @@ -68,3 +70,42 @@ func (b *BuildArgs) AddMetaArgs(metaArgs []instructions.ArgCommand) { } } } + +// AddPreDefinedBuildArgs adds pre-defined build args. Such as TARGETOS, TARGETARCH, BUILDPLATFORM, TARGETPLATFORM +func (b *BuildArgs) AddPreDefinedBuildArgs(opts *config.KanikoOptions) { + buildPlatform := runtime.GOOS + "/" + runtime.GOARCH + buildOs := runtime.GOOS + buildArch := runtime.GOARCH + + targetPlatform := "" + targetOs := "" + targetArch := "" + targetVariant := "" + + if opts.CustomPlatform == "" { + targetPlatform = buildPlatform + targetOs = buildOs + targetArch = buildArch + } else { + targetPlatform = opts.CustomPlatform + platformParts := strings.Split(opts.CustomPlatform, "/") + if len(platformParts) > 0 { + targetOs = platformParts[0] + } + if len(platformParts) > 1 { + targetArch = platformParts[1] + } + if len(platformParts) > 2 { + targetVariant = platformParts[2] + } + } + + b.AddArg("BUILDPLATFORM", &buildPlatform) + b.AddArg("BUILDOS", &buildOs) + b.AddArg("BUILDARCH", &buildArch) + + b.AddArg("TARGETPLATFORM", &targetPlatform) + b.AddArg("TARGETOS", &targetOs) + b.AddArg("TARGETARCH", &targetArch) + b.AddArg("TARGETVARIANT", &targetVariant) +} diff --git a/pkg/executor/build.go b/pkg/executor/build.go index 73b2f0df2..0b3738c2d 100644 --- a/pkg/executor/build.go +++ b/pkg/executor/build.go @@ -149,6 +149,7 @@ func newStageBuilder(args *dockerfile.BuildArgs, opts *config.KanikoOptions, sta s.args = dockerfile.NewBuildArgs(s.opts.BuildArgs) } s.args.AddMetaArgs(s.stage.MetaArgs) + s.args.AddPreDefinedBuildArgs(opts) return s, nil }