Skip to content

Commit

Permalink
Fix content not found with push=true,rewrite-timestamp=true
Browse files Browse the repository at this point in the history
Fix issue 4793

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
(cherry picked from commit 8bd3dd8)
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
  • Loading branch information
AkihiroSuda committed Jun 13, 2024
1 parent 4d9a4e5 commit 5a7352c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 16 deletions.
13 changes: 1 addition & 12 deletions exporter/containerimage/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,18 +339,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)
}
Expand Down
22 changes: 18 additions & 4 deletions frontend/dockerfile/dockerfile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6882,6 +6882,7 @@ func testReproSourceDateEpoch(t *testing.T, sb integration.Sandbox) {
dockerfile string
files []fstest.Applier
expectedDigest string
noCacheExport bool
}
testCases := []testCase{
{
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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())

Expand All @@ -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.
Expand Down

0 comments on commit 5a7352c

Please sign in to comment.