Skip to content

Commit

Permalink
build: propagate SOURCE_DATE_EPOCH from the client env
Browse files Browse the repository at this point in the history
Port docker/buildx PR 1482

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
  • Loading branch information
AkihiroSuda committed Jan 25, 2023
1 parent e3fca3c commit 148f022
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
29 changes: 29 additions & 0 deletions cmd/nerdctl/builder_build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,3 +420,32 @@ CMD ["echo", "nerdctl-build-notag-string"]
base.Cmd("images").AssertOutContains("<none>")
base.Cmd("image", "prune", "--force", "--all").AssertOK()
}

// TestBuildSourceDateEpoch tests that $SOURCE_DATE_EPOCH is propagated from the client env
// https://github.com/docker/buildx/pull/1482
func TestBuildSourceDateEpoch(t *testing.T) {
testutil.RequiresBuild(t)
testutil.DockerIncompatible(t) // Needs buildx v0.10 (https://github.com/docker/buildx/pull/1489)
base := testutil.NewBase(t)
imageName := testutil.Identifier(t)
defer base.Cmd("rmi", imageName).Run()

dockerfile := fmt.Sprintf(`FROM %s
ARG SOURCE_DATE_EPOCH
RUN echo $SOURCE_DATE_EPOCH >/source-date-epoch
CMD ["cat", "/source-date-epoch"]
`, testutil.CommonImage)

buildCtx, err := createBuildContext(dockerfile)
assert.NilError(t, err)
defer os.RemoveAll(buildCtx)

const sourceDateEpochEnvStr = "1111111111"
t.Setenv("SOURCE_DATE_EPOCH", sourceDateEpochEnvStr)
base.Cmd("build", "-t", imageName, buildCtx).AssertOK()
base.Cmd("run", "--rm", imageName).AssertOutExactly(sourceDateEpochEnvStr + "\n")

const sourceDateEpochArgStr = "2222222222"
base.Cmd("build", "-t", imageName, "--build-arg", "SOURCE_DATE_EPOCH="+sourceDateEpochArgStr, buildCtx).AssertOK()
base.Cmd("run", "--rm", imageName).AssertOutExactly(sourceDateEpochArgStr + "\n")
}
10 changes: 10 additions & 0 deletions pkg/cmd/builder/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,10 @@ func generateBuildctlArgs(ctx context.Context, options types.BuilderBuildOptions
buildctlArgs = append(buildctlArgs, "--opt=platform="+strings.Join(options.Platform, ","))
}

seenBuildArgs := make(map[string]struct{})
for _, ba := range strutil.DedupeStrSlice(options.BuildArgs) {
arr := strings.Split(ba, "=")
seenBuildArgs[arr[0]] = struct{}{}
if len(arr) == 1 && len(arr[0]) > 0 {
// Avoid masking default build arg value from Dockerfile if environment variable is not set
// https://github.com/moby/moby/issues/24101
Expand Down Expand Up @@ -314,6 +316,14 @@ func generateBuildctlArgs(ctx context.Context, options types.BuilderBuildOptions
}
}

// Propagate SOURCE_DATE_EPOCH from the client env
// https://github.com/docker/buildx/pull/1482
if v := os.Getenv("SOURCE_DATE_EPOCH"); v != "" {
if _, ok := seenBuildArgs["SOURCE_DATE_EPOCH"]; !ok {
buildctlArgs = append(buildctlArgs, "--opt=build-arg:SOURCE_DATE_EPOCH="+v)
}
}

for _, l := range strutil.DedupeStrSlice(options.Label) {
buildctlArgs = append(buildctlArgs, "--opt=label:"+l)
}
Expand Down

0 comments on commit 148f022

Please sign in to comment.