Skip to content

Commit 19d3c26

Browse files
committed
Fixed the issue that a new output tag would not be uploaded if a cache was found in the database during the dup convert process.
Signed-off-by: fourierrr <[email protected]>
1 parent 0c2f057 commit 19d3c26

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

cmd/convertor/builder/builder.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (b *graphBuilder) Build(ctx context.Context) error {
100100
if err != nil {
101101
return fmt.Errorf("failed to obtain new pusher: %w", err)
102102
}
103-
tagPusher, err := b.Resolver.Pusher(ctx, b.TargetRef) // append '@' to avoid tag
103+
tagPusher, err := b.Resolver.Pusher(ctx, b.TargetRef)
104104
if err != nil {
105105
return fmt.Errorf("failed to obtain new tag pusher: %w", err)
106106
}
@@ -283,8 +283,10 @@ func (b *graphBuilder) buildOne(ctx context.Context, src v1.Descriptor, tag bool
283283

284284
// build
285285
builder := &overlaybdBuilder{
286-
layers: len(engineBase.manifest.Layers),
287-
engine: engine,
286+
layers: len(engineBase.manifest.Layers),
287+
engine: engine,
288+
pusher: engineBase.pusher,
289+
fetcher: engineBase.fetcher,
288290
}
289291
desc, err := builder.Build(ctx)
290292
if err != nil {
@@ -347,8 +349,10 @@ func Build(ctx context.Context, opt BuilderOptions) error {
347349
}
348350

349351
type overlaybdBuilder struct {
350-
layers int
351-
engine builderEngine
352+
layers int
353+
engine builderEngine
354+
pusher remotes.Pusher
355+
fetcher remotes.Fetcher
352356
}
353357

354358
// Build return a descriptor of the converted target, as the caller may need it
@@ -363,6 +367,21 @@ func (b *overlaybdBuilder) Build(ctx context.Context) (v1.Descriptor, error) {
363367
// when errors are encountered fallback to regular conversion
364368
if convertedDesc, err := b.engine.CheckForConvertedManifest(ctx); err == nil && convertedDesc.Digest != "" {
365369
logrus.Infof("Image found already converted in registry with digest %s", convertedDesc.Digest)
370+
// fetch the already converted manifest and push with new tag
371+
convertedManifest, err := fetchManifest(ctx, b.fetcher, convertedDesc)
372+
if err != nil {
373+
return v1.Descriptor{}, fmt.Errorf("failed to fetch converted manifest: %w", err)
374+
}
375+
cbuf, err := json.Marshal(convertedManifest)
376+
if err != nil {
377+
return v1.Descriptor{}, fmt.Errorf("failed to marshal converted manifest: %w", err)
378+
}
379+
// ensure that output tag is pushed even if the manifest is already converted and found in registry
380+
// push output tag only if the pusher is tagPusher
381+
if err := uploadBytes(ctx, b.pusher, convertedDesc, cbuf); err != nil {
382+
return v1.Descriptor{}, fmt.Errorf("failed to upload converted manifest: %w", err)
383+
}
384+
log.G(ctx).Infof("converted manifest uploaded, %s", convertedDesc.Digest)
366385
return convertedDesc, nil
367386
}
368387

0 commit comments

Comments
 (0)