Skip to content

Commit d39e9c8

Browse files
authored
Merge pull request containerd#1926 from AkihiroSuda/propagate-source-date-epoch
build: propagate SOURCE_DATE_EPOCH from the client env
2 parents ccb2f94 + 0f254af commit d39e9c8

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

cmd/nerdctl/builder_build_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,3 +420,32 @@ CMD ["echo", "nerdctl-build-notag-string"]
420420
base.Cmd("images").AssertOutContains("<none>")
421421
base.Cmd("image", "prune", "--force", "--all").AssertOK()
422422
}
423+
424+
// TestBuildSourceDateEpoch tests that $SOURCE_DATE_EPOCH is propagated from the client env
425+
// https://github.com/docker/buildx/pull/1482
426+
func TestBuildSourceDateEpoch(t *testing.T) {
427+
testutil.RequiresBuild(t)
428+
testutil.DockerIncompatible(t) // Needs buildx v0.10 (https://github.com/docker/buildx/pull/1489)
429+
base := testutil.NewBase(t)
430+
imageName := testutil.Identifier(t)
431+
defer base.Cmd("rmi", imageName).AssertOK()
432+
433+
dockerfile := fmt.Sprintf(`FROM %s
434+
ARG SOURCE_DATE_EPOCH
435+
RUN echo $SOURCE_DATE_EPOCH >/source-date-epoch
436+
CMD ["cat", "/source-date-epoch"]
437+
`, testutil.CommonImage)
438+
439+
buildCtx, err := createBuildContext(dockerfile)
440+
assert.NilError(t, err)
441+
defer os.RemoveAll(buildCtx)
442+
443+
const sourceDateEpochEnvStr = "1111111111"
444+
t.Setenv("SOURCE_DATE_EPOCH", sourceDateEpochEnvStr)
445+
base.Cmd("build", "-t", imageName, buildCtx).AssertOK()
446+
base.Cmd("run", "--rm", imageName).AssertOutExactly(sourceDateEpochEnvStr + "\n")
447+
448+
const sourceDateEpochArgStr = "2222222222"
449+
base.Cmd("build", "-t", imageName, "--build-arg", "SOURCE_DATE_EPOCH="+sourceDateEpochArgStr, buildCtx).AssertOK()
450+
base.Cmd("run", "--rm", imageName).AssertOutExactly(sourceDateEpochArgStr + "\n")
451+
}

pkg/cmd/builder/build.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,10 @@ func generateBuildctlArgs(ctx context.Context, client *containerd.Client, option
272272
buildctlArgs = append(buildctlArgs, "--opt=platform="+strings.Join(options.Platform, ","))
273273
}
274274

275+
seenBuildArgs := make(map[string]struct{})
275276
for _, ba := range strutil.DedupeStrSlice(options.BuildArgs) {
276277
arr := strings.Split(ba, "=")
278+
seenBuildArgs[arr[0]] = struct{}{}
277279
if len(arr) == 1 && len(arr[0]) > 0 {
278280
// Avoid masking default build arg value from Dockerfile if environment variable is not set
279281
// https://github.com/moby/moby/issues/24101
@@ -304,6 +306,14 @@ func generateBuildctlArgs(ctx context.Context, client *containerd.Client, option
304306
}
305307
}
306308

309+
// Propagate SOURCE_DATE_EPOCH from the client env
310+
// https://github.com/docker/buildx/pull/1482
311+
if v := os.Getenv("SOURCE_DATE_EPOCH"); v != "" {
312+
if _, ok := seenBuildArgs["SOURCE_DATE_EPOCH"]; !ok {
313+
buildctlArgs = append(buildctlArgs, "--opt=build-arg:SOURCE_DATE_EPOCH="+v)
314+
}
315+
}
316+
307317
for _, l := range strutil.DedupeStrSlice(options.Label) {
308318
buildctlArgs = append(buildctlArgs, "--opt=label:"+l)
309319
}

0 commit comments

Comments
 (0)