Skip to content

Commit 8d80ba7

Browse files
committed
Signed-off-by: Aviral Takkar <[email protected]>
1 parent 906a2ab commit 8d80ba7

File tree

7 files changed

+31
-44
lines changed

7 files changed

+31
-44
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module github.com/docker/distribution
22

33
go 1.12
44

5-
replace github.com/opencontainers/artifacts => github.com/aviral26/artifacts v0.0.0-20210401062346-2b83ac8c6d72
5+
replace github.com/opencontainers/artifacts => github.com/aviral26/artifacts v0.0.3
66

77
require (
88
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/O
88
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
99
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
1010
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
11-
github.com/aviral26/artifacts v0.0.0-20210401062346-2b83ac8c6d72 h1:wdeNiQZOLF3PTtEQ2xndkMV7kQC1qejSdZidszgWpaY=
12-
github.com/aviral26/artifacts v0.0.0-20210401062346-2b83ac8c6d72/go.mod h1:IBQOjhxIKxb9G4h9NiWAJLGBgKPlIy27tcpPDTAfUQw=
11+
github.com/aviral26/artifacts v0.0.3 h1:F+XBw93sXm9H7iajUEl0DhbbvCg2e/k6e4lVY2EYhC4=
12+
github.com/aviral26/artifacts v0.0.3/go.mod h1:IBQOjhxIKxb9G4h9NiWAJLGBgKPlIy27tcpPDTAfUQw=
1313
github.com/aws/aws-sdk-go v1.15.11 h1:m45+Ru/wA+73cOZXiEGLDH2d9uLN3iHqMc0/z4noDXE=
1414
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
1515
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=

manifest/artifact/artifact.go

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
// ArtifactVersion provides a pre-initialized version structure for this
1515
// packages Artifact version of the manifest.
1616
var ArtifactVersion = manifest.Versioned{
17-
SchemaVersion: 2,
17+
SchemaVersion: 3,
1818
MediaType: v2.MediaTypeArtifactManifest,
1919
}
2020

@@ -62,30 +62,16 @@ func (a Artifact) References() []distribution.Descriptor {
6262
Size: a.inner.Blobs[i].Size,
6363
}
6464
}
65-
66-
if a.inner.Config != nil {
67-
blobs = append(blobs, distribution.Descriptor{
68-
MediaType: a.inner.Config.MediaType,
69-
Digest: a.inner.Config.Digest,
70-
Size: a.inner.Config.Size,
71-
})
72-
}
73-
7465
return blobs
7566
}
7667

77-
// Manifests returns the distribution descriptors for the manifests that this artifact is linked to.
78-
func (a Artifact) Manifests() []distribution.Descriptor {
79-
dependsOn := make([]distribution.Descriptor, len(a.inner.Manifests))
80-
for i := range a.inner.Manifests {
81-
dependsOn[i] = distribution.Descriptor{
82-
MediaType: a.inner.Manifests[i].MediaType,
83-
Digest: a.inner.Manifests[i].Digest,
84-
Size: a.inner.Manifests[i].Size,
85-
}
68+
// SubjectManifest returns the the subject manifest this artifact is linked to.
69+
func (a Artifact) SubjectManifest() distribution.Descriptor {
70+
return distribution.Descriptor{
71+
MediaType: a.inner.SubjectManifest.MediaType,
72+
Digest: a.inner.SubjectManifest.Digest,
73+
Size: a.inner.SubjectManifest.Size,
8674
}
87-
88-
return dependsOn
8975
}
9076

9177
// DeserializedArtifact wraps Artifact with a copy of the original JSON.

registry/api/v2/descriptors.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ var routeDescriptors = []RouteDescriptor{
707707

708708
{
709709
Name: RouteNameManifestLinkedArtifacts,
710-
Path: "/v2/_ext/oci-artifacts/v1/{name:" + reference.NameRegexp.String() + "}/manifests/{reference:" + reference.TagRegexp.String() + "|" + digest.DigestRegexp.String() + "}/references",
710+
Path: "/v2/_ext/oci-artifacts/v1-rc1/{name:" + reference.NameRegexp.String() + "}/manifests/{reference:" + reference.TagRegexp.String() + "|" + digest.DigestRegexp.String() + "}/referrers",
711711
Entity: "Linked artifacts",
712712
Description: "Retrieve information about artifacts linked to this manifest.",
713713
Methods: []MethodDescriptor{
@@ -728,7 +728,7 @@ var routeDescriptors = []RouteDescriptor{
728728
},
729729
QueryParameters: []ParameterDescriptor{
730730
{
731-
Name: "artifact-type",
731+
Name: "referenceType",
732732
Type: "query",
733733
Format: "<artifactType>",
734734
Description: `Artifact type of the requested linked artifacts.`,

registry/handlers/referrers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (mrmh *referrersHandler) Artifacts(w http.ResponseWriter, r *http.Request)
5555
dcontext.GetLogger(mrmh).Debug("Artifacts")
5656

5757
// This can be empty
58-
artifactType := r.FormValue("artifact-type")
58+
artifactType := r.FormValue("referenceType")
5959

6060
if mrmh.Tag != "" {
6161
tags := mrmh.Repository.Tags(mrmh)

registry/storage/manifeststore.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,6 @@ func (ms *manifestStore) Get(ctx context.Context, dgst digest.Digest, options ..
116116
return ms.ocischemaHandler.Unmarshal(ctx, dgst, content)
117117
case manifestlist.MediaTypeManifestList, v1.MediaTypeImageIndex:
118118
return ms.manifestListHandler.Unmarshal(ctx, dgst, content)
119-
case v2.MediaTypeArtifactManifest:
120-
return ms.ociArtifactHandler.Unmarshal(ctx, dgst, content)
121119
case "":
122120
// OCI image or image index - no media type in the content
123121

@@ -133,6 +131,11 @@ func (ms *manifestStore) Get(ctx context.Context, dgst digest.Digest, options ..
133131
default:
134132
return nil, distribution.ErrManifestVerification{fmt.Errorf("unrecognized manifest content type %s", versioned.MediaType)}
135133
}
134+
case 3:
135+
switch versioned.MediaType {
136+
case v2.MediaTypeArtifactManifest:
137+
return ms.ociArtifactHandler.Unmarshal(ctx, dgst, content)
138+
}
136139
}
137140

138141
return nil, fmt.Errorf("unrecognized manifest schema version %d", versioned.SchemaVersion)

registry/storage/ociartifacthandler.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,13 @@ func (ah *ociArtifactHandler) verifyManifest(ctx context.Context, da artifact.De
9292
return err
9393
}
9494

95-
// All manifests to link to must exist.
96-
for _, manifestDesc := range da.Manifests() {
97-
exists, err := manifestService.Exists(ctx, manifestDesc.Digest)
98-
if err != nil {
99-
errs = append(errs, err)
100-
} else {
101-
if !exists {
102-
errs = append(errs, distribution.ErrManifestUnknownRevision{Revision: manifestDesc.Digest})
103-
}
104-
}
95+
// Validate subject manifest.
96+
subject := da.SubjectManifest()
97+
exists, err := manifestService.Exists(ctx, subject.Digest)
98+
if !exists || err == distribution.ErrBlobUnknown {
99+
errs = append(errs, distribution.ErrManifestBlobUnknown{Digest: subject.Digest})
100+
} else if err != nil {
101+
errs = append(errs, err)
105102
}
106103
}
107104

@@ -114,11 +111,12 @@ func (ah *ociArtifactHandler) verifyManifest(ctx context.Context, da artifact.De
114111

115112
func (ah *ociArtifactHandler) linkManifests(ctx context.Context, da artifact.DeserializedArtifact, revision digest.Digest) error {
116113
daArtifactType := da.ArtifactType()
117-
// Link the artifact as referrer metadata to each dependsOn manifest.
118-
for _, manifestDesc := range da.Manifests() {
119-
if err := ah.referrersStoreFunc(manifestDesc.Digest, daArtifactType).linkBlob(ctx, distribution.Descriptor{Digest: revision}); err != nil {
120-
return err
121-
}
114+
115+
// Index referrer metadata for the subject.
116+
subject := da.SubjectManifest()
117+
if err := ah.referrersStoreFunc(subject.Digest, daArtifactType).linkBlob(ctx, distribution.Descriptor{Digest: revision}); err != nil {
118+
return err
122119
}
120+
123121
return nil
124122
}

0 commit comments

Comments
 (0)