123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package testutil
- import (
- "fmt"
- "github.com/docker/distribution"
- "github.com/docker/distribution/context"
- "github.com/docker/distribution/digest"
- "github.com/docker/distribution/manifest"
- "github.com/docker/distribution/manifest/manifestlist"
- "github.com/docker/distribution/manifest/schema1"
- "github.com/docker/distribution/manifest/schema2"
- "github.com/docker/libtrust"
- )
- // MakeManifestList constructs a manifest list out of a list of manifest digests
- func MakeManifestList(blobstatter distribution.BlobStatter, manifestDigests []digest.Digest) (*manifestlist.DeserializedManifestList, error) {
- ctx := context.Background()
- var manifestDescriptors []manifestlist.ManifestDescriptor
- for _, manifestDigest := range manifestDigests {
- descriptor, err := blobstatter.Stat(ctx, manifestDigest)
- if err != nil {
- return nil, err
- }
- platformSpec := manifestlist.PlatformSpec{
- Architecture: "atari2600",
- OS: "CP/M",
- Variant: "ternary",
- Features: []string{"VLIW", "superscalaroutoforderdevnull"},
- }
- manifestDescriptor := manifestlist.ManifestDescriptor{
- Descriptor: descriptor,
- Platform: platformSpec,
- }
- manifestDescriptors = append(manifestDescriptors, manifestDescriptor)
- }
- return manifestlist.FromDescriptors(manifestDescriptors)
- }
- // MakeSchema1Manifest constructs a schema 1 manifest from a given list of digests and returns
- // the digest of the manifest
- func MakeSchema1Manifest(digests []digest.Digest) (distribution.Manifest, error) {
- manifest := schema1.Manifest{
- Versioned: manifest.Versioned{
- SchemaVersion: 1,
- },
- Name: "who",
- Tag: "cares",
- }
- for _, digest := range digests {
- manifest.FSLayers = append(manifest.FSLayers, schema1.FSLayer{BlobSum: digest})
- manifest.History = append(manifest.History, schema1.History{V1Compatibility: ""})
- }
- pk, err := libtrust.GenerateECP256PrivateKey()
- if err != nil {
- return nil, fmt.Errorf("unexpected error generating private key: %v", err)
- }
- signedManifest, err := schema1.Sign(&manifest, pk)
- if err != nil {
- return nil, fmt.Errorf("error signing manifest: %v", err)
- }
- return signedManifest, nil
- }
- // MakeSchema2Manifest constructs a schema 2 manifest from a given list of digests and returns
- // the digest of the manifest
- func MakeSchema2Manifest(repository distribution.Repository, digests []digest.Digest) (distribution.Manifest, error) {
- ctx := context.Background()
- blobStore := repository.Blobs(ctx)
- builder := schema2.NewManifestBuilder(blobStore, []byte{})
- for _, digest := range digests {
- builder.AppendReference(distribution.Descriptor{Digest: digest})
- }
- manifest, err := builder.Build(ctx)
- if err != nil {
- return nil, fmt.Errorf("unexpected error generating manifest: %v", err)
- }
- return manifest, nil
- }
|