diff --git a/exporter/containerimage/export.go b/exporter/containerimage/export.go index 883be1fb50fe..db2778de042f 100644 --- a/exporter/containerimage/export.go +++ b/exporter/containerimage/export.go @@ -338,18 +338,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source } } if e.push { - if opts.RewriteTimestamp { - annotations := map[digest.Digest]map[string]string{} - addAnnotations(annotations, *desc) - // e.pushImage cannot be used because src ref does not point to the rewritten image - // - // TODO: change e.pushImage so that it takes Result[Remote] as parameter. - // https://github.com/moby/buildkit/pull/4057#discussion_r1324106088 - err = push.Push(ctx, e.opt.SessionManager, sessionID, e.opt.ImageWriter.opt.ContentStore, e.opt.ImageWriter.ContentStore(), - desc.Digest, targetName, e.insecure, e.opt.RegistryHosts, e.pushByDigest, annotations) - } else { - err = e.pushImage(ctx, src, sessionID, targetName, desc.Digest) - } + err = e.pushImage(ctx, src, sessionID, targetName, desc.Digest) if err != nil { return nil, nil, errors.Wrapf(err, "failed to push %v", targetName) } diff --git a/frontend/dockerfile/dockerfile_test.go b/frontend/dockerfile/dockerfile_test.go index ab34060498b2..43dd5cee8e3d 100644 --- a/frontend/dockerfile/dockerfile_test.go +++ b/frontend/dockerfile/dockerfile_test.go @@ -6882,6 +6882,7 @@ func testReproSourceDateEpoch(t *testing.T, sb integration.Sandbox) { dockerfile string files []fstest.Applier expectedDigest string + noCacheExport bool } testCases := []testCase{ { @@ -6909,6 +6910,14 @@ COPY --link foo foo files: []fstest.Applier{fstest.CreateFile("foo", []byte("foo"), 0600)}, expectedDigest: "sha256:9f75e4bdbf3d825acb36bb603ddef4a25742afb8ccb674763ffc611ae047d8a6", }, + { + // https://github.com/moby/buildkit/issues/4793 + name: "NoAdditionalLayer", + dockerfile: `FROM amd64/debian:bullseye-20230109-slim +`, + expectedDigest: "sha256:eeba8ef81dec46359d099c5d674009da54e088fa8f29945d4d7fb3a7a88c450e", + noCacheExport: true, // "skipping cache export for empty result" + }, } // https://explore.ggcr.dev/?image=amd64%2Fdebian%3Abullseye-20230109-slim @@ -6968,7 +6977,10 @@ COPY --link foo foo require.NoError(t, err) desc, manifest, img := readImage(t, ctx, target) - _, cacheManifest, _ := readImage(t, ctx, target+"-cache") + var cacheManifest ocispecs.Manifest + if !tc.noCacheExport { + _, cacheManifest, _ = readImage(t, ctx, target+"-cache") + } t.Log("The digest may change depending on the BuildKit version, the snapshotter configuration, etc.") require.Equal(t, tc.expectedDigest, desc.Digest.String()) @@ -6986,9 +6998,11 @@ COPY --link foo foo require.Equal(t, fmt.Sprintf("%d", tm.Unix()), l.Annotations["buildkit/rewritten-timestamp"]) } } - // Cache layers must *not* have rewritten-timestamp - for _, l := range cacheManifest.Layers { - require.Empty(t, l.Annotations["buildkit/rewritten-timestamp"]) + if !tc.noCacheExport { + // Cache layers must *not* have rewritten-timestamp + for _, l := range cacheManifest.Layers { + require.Empty(t, l.Annotations["buildkit/rewritten-timestamp"]) + } } // Build again, after pruning the base image layer cache.