Skip to content

Commit faed462

Browse files
authored
Merge pull request #6464 from tonistiigi/image-attestation-lease-fix
containerimage: fix missing lease on fetching attestationchain
2 parents 870da9c + 3402a0c commit faed462

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

source/containerimage/source.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"slices"
66
"strconv"
7+
"time"
78

89
"github.com/containerd/containerd/v2/core/content"
910
"github.com/containerd/containerd/v2/core/diff"
@@ -25,6 +26,7 @@ import (
2526
"github.com/moby/buildkit/util/contentutil"
2627
"github.com/moby/buildkit/util/flightcontrol"
2728
"github.com/moby/buildkit/util/imageutil"
29+
"github.com/moby/buildkit/util/leaseutil"
2830
"github.com/moby/buildkit/util/pull"
2931
"github.com/moby/buildkit/util/resolver"
3032
"github.com/moby/buildkit/util/tracing"
@@ -193,14 +195,22 @@ func (is *Source) ResolveImageMetadata(ctx context.Context, id *ImageIdentifier,
193195
ret.Config = res.dt
194196
}
195197
if opt.AttestationChain {
198+
ctx, done, err := leaseutil.WithLease(ctx, is.LeaseManager, leases.WithExpiration(5*time.Minute), leaseutil.MakeTemporary)
199+
if err != nil {
200+
return nil, errors.WithStack(err)
201+
}
202+
defer func() {
203+
// this lease is not deleted to allow other components to access manifest/config from cache. It will be deleted after 5 min deadline or on pruning inactive builder
204+
imageutil.AddLease(done)
205+
}()
196206
res, err := is.gAttestChain.Do(ctx, key, func(ctx context.Context) (*sourceresolver.AttestationChain, error) {
197207
refStr, desc, err := rslvr.Resolve(ctx, ref)
198208
if err != nil {
199-
return nil, err
209+
return nil, errors.WithStack(err)
200210
}
201211
f, err := rslvr.Fetcher(ctx, refStr)
202212
if err != nil {
203-
return nil, err
213+
return nil, errors.WithStack(err)
204214
}
205215
named, err := distreference.ParseNormalizedNamed(ref)
206216
if err != nil {
@@ -230,14 +240,14 @@ func (is *Source) ResolveImageMetadata(ctx context.Context, id *ImageIdentifier,
230240
descs = append(descs, sc.SignatureManifest.Descriptor)
231241
mfst, err := sc.OCIManifest(ctx, sc.SignatureManifest)
232242
if err != nil {
233-
return nil, err
243+
return nil, errors.WithStack(err)
234244
}
235245
descs = append(descs, mfst.Layers...)
236246
}
237247
for _, desc := range descs {
238248
dt, err := policyimage.ReadBlob(ctx, prov, desc)
239249
if err != nil {
240-
return nil, err
250+
return nil, errors.WithStack(err)
241251
}
242252
if ac.Blobs == nil {
243253
ac.Blobs = make(map[digest.Digest]sourceresolver.Blob)
@@ -248,7 +258,7 @@ func (is *Source) ResolveImageMetadata(ctx context.Context, id *ImageIdentifier,
248258
}
249259
}
250260
if err := prov.SetGCLabels(ctx, desc); err != nil {
251-
return nil, err
261+
return nil, errors.WithStack(err)
252262
}
253263
return ac, nil
254264
})

0 commit comments

Comments
 (0)