0
0
Fork 0
mirror of https://github.com/crazy-max/diun.git synced 2025-03-17 21:02:39 +00:00
crazy-max_diun/pkg/registry/manifest.go
2020-02-17 19:29:38 +01:00

66 lines
1.4 KiB
Go

package registry
import (
"time"
"github.com/containers/image/v5/manifest"
"github.com/opencontainers/go-digest"
)
type Manifest struct {
Name string
Tag string
MIMEType string
Digest digest.Digest
Created *time.Time
DockerVersion string
Labels map[string]string
Architecture string
Os string
Layers []string
}
// Manifest returns the manifest for a specific image
func (c *Client) Manifest(image Image) (Manifest, error) {
ctx, cancel := c.timeoutContext()
defer cancel()
imgCls, err := c.newImage(ctx, image.String())
if err != nil {
return Manifest{}, err
}
defer imgCls.Close()
rawManifest, _, err := imgCls.Manifest(ctx)
if err != nil {
return Manifest{}, err
}
imgInspect, err := imgCls.Inspect(ctx)
if err != nil {
return Manifest{}, err
}
imgDigest, err := manifest.Digest(rawManifest)
if err != nil {
return Manifest{}, err
}
imgTag := imgInspect.Tag
if imgTag == "" {
imgTag = image.Tag
}
return Manifest{
Name: imgCls.Reference().DockerReference().Name(),
Tag: imgTag,
MIMEType: manifest.GuessMIMEType(rawManifest),
Digest: imgDigest,
Created: imgInspect.Created,
DockerVersion: imgInspect.DockerVersion,
Labels: imgInspect.Labels,
Architecture: imgInspect.Architecture,
Os: imgInspect.Os,
Layers: imgInspect.Layers,
}, nil
}