Skip to content

Commit

Permalink
add integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
kit101 committed Mar 3, 2025
1 parent 8218bd7 commit 93e47ba
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 36 deletions.
46 changes: 46 additions & 0 deletions integration/dockerfiles/Dockerfile_test_pre_defined_build_args
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# ingegration test for pre-defined build args; see pkg/dockerfile/buildargs.go
FROM alpine:3 AS builder
ARG BUILDPLATFORM
ARG BUILDOS
ARG BUILDARCH
ARG BUILDVARIANT
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG TARGETSTAGE
RUN echo "BUILDPLATFORM: ${BUILDPLATFORM}" && \
echo "BUILDOS: ${BUILDOS}" && \
echo "BUILDARCH: ${BUILDARCH}" && \
echo "BUILDVARIANT: ${BUILDVARIANT}" && \
echo "TARGETPLATFORM: ${TARGETPLATFORM}" && \
echo "TARGETOS: ${TARGETOS}" && \
echo "TARGETARCH: ${TARGETARCH}" && \
echo "TARGETVARIANT: ${TARGETVARIANT}" && \
echo "TARGETSTAGE: ${TARGETSTAGE}"
RUN uname -a
COPY foo /app/foo
RUN echo 'add line' >> /app/foo

FROM alpine:3
COPY --from=builder /app/foo /app/foo
ARG BUILDPLATFORM
ARG BUILDOS
ARG BUILDARCH
ARG BUILDVARIANT
ARG TARGETPLATFORM
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG TARGETSTAGE
RUN echo "BUILDPLATFORM: ${BUILDPLATFORM}" && \
echo "BUILDOS: ${BUILDOS}" && \
echo "BUILDARCH: ${BUILDARCH}" && \
echo "BUILDVARIANT: ${BUILDVARIANT}" && \
echo "TARGETPLATFORM: ${TARGETPLATFORM}" && \
echo "TARGETOS: ${TARGETOS}" && \
echo "TARGETARCH: ${TARGETARCH}" && \
echo "TARGETVARIANT: ${TARGETVARIANT}" && \
echo "TARGETSTAGE: ${TARGETSTAGE}"
RUN uname -a
RUN cat /app/foo
78 changes: 44 additions & 34 deletions pkg/dockerfile/buildargs.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,21 @@ limitations under the License.
package dockerfile

import (
"runtime"
"fmt"
"strings"
"sync"

"github.com/GoogleContainerTools/kaniko/pkg/config"
"github.com/containerd/platforms"
d "github.com/docker/docker/builder/dockerfile"
containerregistryV1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/moby/buildkit/frontend/dockerfile/instructions"
"github.com/sirupsen/logrus"
)

var defaultArgsOnce sync.Once
var defaultArgs []string

type BuildArgs struct {
d.BuildArgs
}
Expand Down Expand Up @@ -71,41 +78,44 @@ 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]
// DefaultArgs get default args.
// include pre-defined build args: TARGETOS, TARGETARCH, BUILDPLATFORM, TARGETPLATFORM ...
func DefaultArgs(opt config.KanikoOptions) []string {
defaultArgsOnce.Do(func() {
// build info
buildPlatform := platforms.Format(platforms.Normalize(platforms.DefaultSpec()))
buildPlatformSpec, err := containerregistryV1.ParsePlatform(buildPlatform)
if err != nil {
logrus.Fatalf("Parse build platform %q: %v", buildPlatform, err)
}
if len(platformParts) > 1 {
targetArch = platformParts[1]

// target info
var targetPlatform string
if opt.CustomPlatform != "" {
targetPlatform = opt.CustomPlatform
} else {
targetPlatform = buildPlatform
}
if len(platformParts) > 2 {
targetVariant = platformParts[2]
targetPlatformSpec, err := containerregistryV1.ParsePlatform(opt.CustomPlatform)
if err != nil {
logrus.Fatalf("Invalid platform %q: %v", opt.CustomPlatform, err)
}
}

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)
// pre-defined build args
defaultArgs = []string{
fmt.Sprintf("%s=%s", "BUILDPLATFORM", buildPlatform),
fmt.Sprintf("%s=%s", "BUILDOS", buildPlatformSpec.OS),
fmt.Sprintf("%s=%s", "BUILDOSVERSION", buildPlatformSpec.OSVersion),
fmt.Sprintf("%s=%s", "BUILDARCH", buildPlatformSpec.Architecture),
fmt.Sprintf("%s=%s", "BUILDVARIANT", buildPlatformSpec.Variant),
fmt.Sprintf("%s=%s", "TARGETPLATFORM", targetPlatform),
fmt.Sprintf("%s=%s", "TARGETOS", targetPlatformSpec.OS),
fmt.Sprintf("%s=%s", "TARGETOSVERSION", targetPlatformSpec.OSVersion),
fmt.Sprintf("%s=%s", "TARGETARCH", targetPlatformSpec.Architecture),
fmt.Sprintf("%s=%s", "TARGETVARIANT", targetPlatformSpec.Variant),
fmt.Sprintf("%s=%s", "TARGETSTAGE", opt.Target),
}
logrus.Infof("init default args: %s", defaultArgs)
})
return defaultArgs
}
5 changes: 3 additions & 2 deletions pkg/executor/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,11 @@ func newStageBuilder(args *dockerfile.BuildArgs, opts *config.KanikoOptions, sta
if args != nil {
s.args = args.Clone()
} else {
s.args = dockerfile.NewBuildArgs(s.opts.BuildArgs)
defaultArgs := dockerfile.DefaultArgs(*opts)
mergedArgs := append(defaultArgs, s.opts.BuildArgs...)
s.args = dockerfile.NewBuildArgs(mergedArgs)
}
s.args.AddMetaArgs(s.stage.MetaArgs)
s.args.AddPreDefinedBuildArgs(opts)
return s, nil
}

Expand Down

0 comments on commit 93e47ba

Please sign in to comment.