Skip to content

Commit 05fb30a

Browse files
authored
feat: index referrers on manifest push (#348)
Signed-off-by: Lixia (Sylvia) Lei <lixlei@microsoft.com>
1 parent 1969551 commit 05fb30a

File tree

4 files changed

+1304
-132
lines changed

4 files changed

+1304
-132
lines changed

registry/remote/example_test.go

+38-31
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import (
4040
const (
4141
exampleRepositoryName = "example"
4242
exampleTag = "latest"
43-
exampleManifest = "Example manifest content"
43+
exampleConfig = "Example config content"
4444
exampleLayer = "Example layer content"
4545
exampleUploadUUid = "0bc84d80-837c-41d9-824e-1907463c53b3"
4646
ManifestDigest = "sha256:0b696106ecd0654e031f19e0a8cbd1aee4ad457d7c9cea881f07b12a930cd307"
@@ -49,12 +49,19 @@ const (
4949
)
5050

5151
var (
52-
exampleLayerDigest = digest.FromBytes([]byte(exampleLayer)).String()
53-
exampleManifestDigest = digest.FromBytes([]byte(exampleManifest)).String()
54-
exampleManifestDescriptor = ocispec.Descriptor{
55-
MediaType: ocispec.MediaTypeImageManifest,
56-
Digest: digest.Digest(exampleManifestDigest),
57-
Size: int64(len(exampleManifest))}
52+
exampleLayerDescriptor = content.NewDescriptorFromBytes(ocispec.MediaTypeImageLayer, []byte(exampleLayer))
53+
exampleLayerDigest = exampleLayerDescriptor.Digest.String()
54+
exampleManifest, _ = json.Marshal(ocispec.Manifest{
55+
Versioned: specs.Versioned{
56+
SchemaVersion: 2, // historical value. does not pertain to OCI or docker version
57+
},
58+
Config: content.NewDescriptorFromBytes(ocispec.MediaTypeImageConfig, []byte(exampleConfig)),
59+
Layers: []ocispec.Descriptor{
60+
exampleLayerDescriptor,
61+
},
62+
})
63+
exampleManifestDescriptor = content.NewDescriptorFromBytes(ocispec.MediaTypeImageManifest, exampleManifest)
64+
exampleManifestDigest = exampleManifestDescriptor.Digest.String()
5865
exampleSignatureManifest, _ = json.Marshal(ocispec.Artifact{
5966
MediaType: ocispec.MediaTypeArtifactManifest,
6067
ArtifactType: "example/signature",
@@ -322,8 +329,8 @@ func ExampleRepository_Resolve_byTag() {
322329

323330
// Output:
324331
// application/vnd.oci.image.manifest.v1+json
325-
// sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b
326-
// 24
332+
// sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7
333+
// 337
327334
}
328335

329336
// ExampleRepository_Resolve_byDigest gives example snippets for resolving a digest to a manifest descriptor.
@@ -333,7 +340,7 @@ func ExampleRepository_Resolve_byDigest() {
333340
panic(err)
334341
}
335342
ctx := context.Background()
336-
exampleDigest := "sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b"
343+
exampleDigest := "sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7"
337344
descriptor, err := repo.Resolve(ctx, exampleDigest)
338345
if err != nil {
339346
panic(err)
@@ -345,8 +352,8 @@ func ExampleRepository_Resolve_byDigest() {
345352

346353
// Output:
347354
// application/vnd.oci.image.manifest.v1+json
348-
// sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b
349-
// 24
355+
// sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7
356+
// 337
350357
}
351358

352359
// ExampleRepository_Fetch_byTag gives example snippets for downloading a manifest by tag.
@@ -375,7 +382,7 @@ func ExampleRepository_Fetch_manifestByTag() {
375382
fmt.Println(string(pulledBlob))
376383

377384
// Output:
378-
// Example manifest content
385+
// {"schemaVersion":2,"config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:569224ae188c06e97b9fcadaeb2358fb0fb7c4eb105d49aee2620b2719abea43","size":22},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ef79e47691ad1bc702d7a256da6323ec369a8fc3159b4f1798a47136f3b38c10","size":21}]}
379386
}
380387

381388
// ExampleRepository_Fetch_manifestByDigest gives example snippets for downloading a manifest by digest.
@@ -386,7 +393,7 @@ func ExampleRepository_Fetch_manifestByDigest() {
386393
}
387394
ctx := context.Background()
388395

389-
exampleDigest := "sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b"
396+
exampleDigest := "sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7"
390397
// resolve the blob descriptor to obtain the size of the blob
391398
descriptor, err := repo.Resolve(ctx, exampleDigest)
392399
if err != nil {
@@ -404,7 +411,7 @@ func ExampleRepository_Fetch_manifestByDigest() {
404411

405412
fmt.Println(string(pulled))
406413
// Output:
407-
// Example manifest content
414+
// {"schemaVersion":2,"config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:569224ae188c06e97b9fcadaeb2358fb0fb7c4eb105d49aee2620b2719abea43","size":22},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ef79e47691ad1bc702d7a256da6323ec369a8fc3159b4f1798a47136f3b38c10","size":21}]}
408415
}
409416

410417
// ExampleRepository_Fetch_artifactReferenceManifest gives an example of fetching
@@ -443,8 +450,8 @@ func ExampleRepository_Fetch_artifactReferenceManifest() {
443450
panic(err)
444451
}
445452
// Output:
446-
// {"mediaType":"application/vnd.oci.artifact.manifest.v1+json","artifactType":"example/SBoM","subject":{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b","size":24}}
447-
// {"mediaType":"application/vnd.oci.artifact.manifest.v1+json","artifactType":"example/signature","subject":{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b","size":24}}
453+
// {"mediaType":"application/vnd.oci.artifact.manifest.v1+json","artifactType":"example/SBoM","subject":{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7","size":337}}
454+
// {"mediaType":"application/vnd.oci.artifact.manifest.v1+json","artifactType":"example/signature","subject":{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7","size":337}}
448455
}
449456

450457
// ExampleRepository_fetchArtifactBlobs gives an example of pulling the blobs
@@ -457,7 +464,7 @@ func ExampleRepository_fetchArtifactBlobs() {
457464
ctx := context.Background()
458465

459466
// 1. Fetch the artifact manifest by digest.
460-
exampleDigest := "sha256:1907bb31b7add4d47d74d2c5c1c10d67b757a996f8e8186e562113bc9879b1a3"
467+
exampleDigest := "sha256:f3550fd0947402d140fd0470702abc92c69f7e9b08d5ca2438f42f8a0ea3fd97"
461468
descriptor, rc, err := repo.FetchReference(ctx, exampleDigest)
462469
if err != nil {
463470
panic(err)
@@ -484,7 +491,7 @@ func ExampleRepository_fetchArtifactBlobs() {
484491
}
485492

486493
// Output:
487-
// {"mediaType":"application/vnd.oci.artifact.manifest.v1+json","artifactType":"example/manifest","blobs":[{"mediaType":"application/tar","digest":"sha256:8d6497c94694a292c04f85cd055d8b5c03eda835dd311e20dfbbf029ff9748cc","size":20}],"subject":{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b","size":24}}
494+
// {"mediaType":"application/vnd.oci.artifact.manifest.v1+json","artifactType":"example/manifest","blobs":[{"mediaType":"application/tar","digest":"sha256:8d6497c94694a292c04f85cd055d8b5c03eda835dd311e20dfbbf029ff9748cc","size":20}],"subject":{"mediaType":"application/vnd.oci.image.manifest.v1+json","digest":"sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7","size":337}}
488495
// example blob content
489496
}
490497

@@ -510,7 +517,7 @@ func ExampleRepository_FetchReference_manifestByTag() {
510517
fmt.Println(string(pulledBlob))
511518

512519
// Output:
513-
// Example manifest content
520+
// {"schemaVersion":2,"config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:569224ae188c06e97b9fcadaeb2358fb0fb7c4eb105d49aee2620b2719abea43","size":22},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ef79e47691ad1bc702d7a256da6323ec369a8fc3159b4f1798a47136f3b38c10","size":21}]}
514521
}
515522

516523
// ExampleRepository_FetchReference_manifestByDigest gives example snippets for downloading a manifest by digest.
@@ -521,7 +528,7 @@ func ExampleRepository_FetchReference_manifestByDigest() {
521528
}
522529
ctx := context.Background()
523530

524-
exampleDigest := "sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b"
531+
exampleDigest := "sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7"
525532
descriptor, rc, err := repo.FetchReference(ctx, exampleDigest)
526533
if err != nil {
527534
panic(err)
@@ -535,7 +542,7 @@ func ExampleRepository_FetchReference_manifestByDigest() {
535542
fmt.Println(string(pulled))
536543

537544
// Output:
538-
// Example manifest content
545+
// {"schemaVersion":2,"config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:569224ae188c06e97b9fcadaeb2358fb0fb7c4eb105d49aee2620b2719abea43","size":22},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ef79e47691ad1bc702d7a256da6323ec369a8fc3159b4f1798a47136f3b38c10","size":21}]}
539546
}
540547

541548
// ExampleRepository_Fetch_layer gives example snippets for downloading a layer blob by digest.
@@ -593,7 +600,7 @@ func ExampleRepository_Tag() {
593600
}
594601
ctx := context.Background()
595602

596-
exampleDigest := "sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b"
603+
exampleDigest := "sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7"
597604
descriptor, err := repo.Resolve(ctx, exampleDigest)
598605
if err != nil {
599606
panic(err)
@@ -623,7 +630,7 @@ func ExampleRepository_TagReference() {
623630
}
624631

625632
// tag a manifest referenced by the exampleDigest below
626-
exampleDigest := "sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b"
633+
exampleDigest := "sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7"
627634
tag := "latest"
628635
err = oras.Tag(ctx, repo, exampleDigest, tag)
629636
if err != nil {
@@ -685,9 +692,9 @@ func Example_pullByTag() {
685692
fmt.Println(string(pulledBlob))
686693

687694
// Output:
688-
// sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b
689-
// 24
690-
// Example manifest content
695+
// sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7
696+
// 337
697+
// {"schemaVersion":2,"config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:569224ae188c06e97b9fcadaeb2358fb0fb7c4eb105d49aee2620b2719abea43","size":22},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ef79e47691ad1bc702d7a256da6323ec369a8fc3159b4f1798a47136f3b38c10","size":21}]}
691698
}
692699

693700
func Example_pullByDigest() {
@@ -697,7 +704,7 @@ func Example_pullByDigest() {
697704
}
698705
ctx := context.Background()
699706

700-
exampleDigest := "sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b"
707+
exampleDigest := "sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7"
701708
// 1. resolve the descriptor
702709
descriptor, err := repo.Resolve(ctx, exampleDigest)
703710
if err != nil {
@@ -714,9 +721,9 @@ func Example_pullByDigest() {
714721
fmt.Println(string(pulledBlob))
715722

716723
// Output:
717-
// sha256:00e5ffa7d914b4e6aa3f1a324f37df0625ccc400be333deea5ecaa199f9eff5b
718-
// 24
719-
// Example manifest content
724+
// sha256:b53dc03a49f383ba230d8ac2b78a9c4aec132e4a9f36cc96524df98163202cc7
725+
// 337
726+
// {"schemaVersion":2,"config":{"mediaType":"application/vnd.oci.image.config.v1+json","digest":"sha256:569224ae188c06e97b9fcadaeb2358fb0fb7c4eb105d49aee2620b2719abea43","size":22},"layers":[{"mediaType":"application/vnd.oci.image.layer.v1.tar","digest":"sha256:ef79e47691ad1bc702d7a256da6323ec369a8fc3159b4f1798a47136f3b38c10","size":21}]}
720727
}
721728

722729
// Example_pushAndTag gives example snippet of pushing an OCI image with a tag.

0 commit comments

Comments
 (0)