mirror of
https://github.com/imjasonh/kontain.me
synced 2026-07-08 00:55:14 +00:00
flatten images concurrently
This commit is contained in:
parent
e02f0a0d54
commit
197dd2d0f5
1 changed files with 31 additions and 24 deletions
|
|
@ -23,13 +23,13 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/google/go-containerregistry/pkg/name"
|
||||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
"github.com/google/go-containerregistry/pkg/v1/empty"
|
||||
"github.com/google/go-containerregistry/pkg/v1/mutate"
|
||||
"github.com/google/go-containerregistry/pkg/v1/remote"
|
||||
"github.com/google/go-containerregistry/pkg/v1/tarball"
|
||||
"github.com/google/go-containerregistry/pkg/v1/types"
|
||||
"github.com/imjasonh/kontain.me/pkg/serve"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
|
@ -126,31 +126,38 @@ func (s *server) serveFlattenManifest(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
// Flatten each image in the manifest.
|
||||
var fidx v1.ImageIndex = empty.Index
|
||||
for _, m := range im.Manifests {
|
||||
img, err := idx.Image(m.Digest)
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (idx.Image): %v", err)
|
||||
serve.Error(w, err)
|
||||
return
|
||||
}
|
||||
l, err := tarball.LayerFromOpener(func() (io.ReadCloser, error) { return mutate.Extract(img), nil })
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (tarball.LayerFromOpener): %v", err)
|
||||
serve.Error(w, err)
|
||||
return
|
||||
}
|
||||
fimg, err := mutate.AppendLayers(empty.Image, l)
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (mutate.AppendLayers): %v", err)
|
||||
serve.Error(w, err)
|
||||
return
|
||||
}
|
||||
fidx = mutate.AppendManifests(fidx, mutate.IndexAddendum{
|
||||
Add: fimg,
|
||||
Descriptor: m,
|
||||
var g errgroup.Group
|
||||
adds := make([]mutate.IndexAddendum, len(im.Manifests))
|
||||
for i, m := range im.Manifests {
|
||||
i, m := i, m
|
||||
g.Go(func() error {
|
||||
img, err := idx.Image(m.Digest)
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (idx.Image): %v", err)
|
||||
return err
|
||||
}
|
||||
l, err := tarball.LayerFromOpener(func() (io.ReadCloser, error) { return mutate.Extract(img), nil })
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (tarball.LayerFromOpener): %v", err)
|
||||
return err
|
||||
}
|
||||
fimg, err := mutate.AppendLayers(empty.Image, l)
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (mutate.AppendLayers): %v", err)
|
||||
return err
|
||||
}
|
||||
adds[i] = mutate.IndexAddendum{
|
||||
Add: fimg,
|
||||
Descriptor: m,
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
if err := g.Wait(); err != nil {
|
||||
serve.Error(w, err)
|
||||
return
|
||||
}
|
||||
fidx := mutate.AppendManifests(empty.Index, adds...)
|
||||
if err := serve.Index(w, r, fidx); err != nil {
|
||||
s.error.Printf("ERROR (serve.Index): %v", err)
|
||||
serve.Error(w, err)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue