Skip to content

Commit 8fed5b1

Browse files
Add ArtifactType in index
1 parent 0ebd490 commit 8fed5b1

3 files changed

Lines changed: 29 additions & 23 deletions

File tree

pkg/storage/common.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import (
1616
"github.com/sigstore/cosign/pkg/oci/remote"
1717

1818
zerr "zotregistry.io/zot/errors"
19-
"zotregistry.io/zot/pkg/scheduler"
2019
zcommon "zotregistry.io/zot/pkg/common"
20+
"zotregistry.io/zot/pkg/scheduler"
2121
storageConstants "zotregistry.io/zot/pkg/storage/constants"
2222
)
2323

@@ -59,19 +59,21 @@ func GetManifestDescByReference(index ispec.Index, reference string) (ispec.Desc
5959

6060
func ValidateManifest(imgStore ImageStore, repo, reference, mediaType string, body []byte,
6161
log zerolog.Logger,
62-
) (godigest.Digest, error) {
62+
) (ispec.Descriptor, error) {
6363
// validate the manifest
6464
if !IsSupportedMediaType(mediaType) {
6565
log.Debug().Interface("actual", mediaType).
6666
Msg("bad manifest media type")
6767

68-
return "", zerr.ErrBadManifest
68+
return ispec.Descriptor{}, zerr.ErrBadManifest
6969
}
7070

71+
var descriptor ispec.Descriptor
72+
7173
if len(body) == 0 {
7274
log.Debug().Int("len", len(body)).Msg("invalid body length")
7375

74-
return "", zerr.ErrBadManifest
76+
return ispec.Descriptor{}, zerr.ErrBadManifest
7577
}
7678

7779
switch mediaType {
@@ -80,15 +82,15 @@ func ValidateManifest(imgStore ImageStore, repo, reference, mediaType string, bo
8082
if err := json.Unmarshal(body, &manifest); err != nil {
8183
log.Error().Err(err).Msg("unable to unmarshal JSON")
8284

83-
return "", zerr.ErrBadManifest
85+
return ispec.Descriptor{}, zerr.ErrBadManifest
8486
}
8587

8688
if manifest.Config.MediaType == ispec.MediaTypeImageConfig {
8789
digest, err := validateOCIManifest(imgStore, repo, reference, &manifest, log)
8890
if err != nil {
8991
log.Error().Err(err).Msg("invalid oci image manifest")
9092

91-
return digest, err
93+
return ispec.Descriptor{Digest: digest}, err
9294
}
9395
}
9496

@@ -97,19 +99,33 @@ func ValidateManifest(imgStore ImageStore, repo, reference, mediaType string, bo
9799
if err := json.Unmarshal(body, &m); err != nil {
98100
log.Error().Err(err).Msg("unable to unmarshal JSON")
99101

100-
return "", zerr.ErrBadManifest
102+
return ispec.Descriptor{}, zerr.ErrBadManifest
101103
}
102104
}
105+
106+
descriptor = ispec.Descriptor{
107+
MediaType: mediaType,
108+
Digest: godigest.FromBytes(body),
109+
Size: int64(len(body)),
110+
ArtifactType: zcommon.GetManifestArtifactType(manifest),
111+
}
103112
case oras.MediaTypeArtifactManifest:
104113
var m oras.Descriptor
105114
if err := json.Unmarshal(body, &m); err != nil {
106115
log.Error().Err(err).Msg("unable to unmarshal JSON")
107116

108-
return "", zerr.ErrBadManifest
117+
return ispec.Descriptor{}, zerr.ErrBadManifest
118+
}
119+
120+
descriptor = ispec.Descriptor{
121+
MediaType: mediaType,
122+
Digest: godigest.FromBytes(body),
123+
Size: int64(len(body)),
124+
ArtifactType: m.ArtifactType,
109125
}
110126
}
111127

112-
return "", nil
128+
return descriptor, nil
113129
}
114130

115131
func validateOCIManifest(imgStore ImageStore, repo, reference string, manifest *ispec.Manifest, //nolint:unparam

pkg/storage/local/local.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -467,9 +467,9 @@ func (is *ImageStoreLocal) PutImageManifest(repo, reference, mediaType string, /
467467
is.Lock(&lockLatency)
468468
defer is.Unlock(&lockLatency)
469469

470-
digest, err := storage.ValidateManifest(is, repo, reference, mediaType, body, is.log)
470+
desc, err := storage.ValidateManifest(is, repo, reference, mediaType, body, is.log)
471471
if err != nil {
472-
return digest, err
472+
return desc.Digest, err
473473
}
474474

475475
refIsDigest := true
@@ -488,11 +488,6 @@ func (is *ImageStoreLocal) PutImageManifest(repo, reference, mediaType string, /
488488
return "", err
489489
}
490490

491-
// create a new descriptor
492-
desc := ispec.Descriptor{
493-
MediaType: mediaType, Size: int64(len(body)), Digest: mDigest,
494-
}
495-
496491
if !refIsDigest {
497492
desc.Annotations = map[string]string{ispec.AnnotationRefName: reference}
498493
}

pkg/storage/s3/s3.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -372,9 +372,9 @@ func (is *ObjectStorage) PutImageManifest(repo, reference, mediaType string, //n
372372
is.Lock(&lockLatency)
373373
defer is.Unlock(&lockLatency)
374374

375-
dig, err := storage.ValidateManifest(is, repo, reference, mediaType, body, is.log)
375+
desc, err := storage.ValidateManifest(is, repo, reference, mediaType, body, is.log)
376376
if err != nil {
377-
return dig, err
377+
return desc.Digest, err
378378
}
379379

380380
refIsDigest := true
@@ -393,11 +393,6 @@ func (is *ObjectStorage) PutImageManifest(repo, reference, mediaType string, //n
393393
return "", err
394394
}
395395

396-
// create a new descriptor
397-
desc := ispec.Descriptor{
398-
MediaType: mediaType, Size: int64(len(body)), Digest: mDigest,
399-
}
400-
401396
if !refIsDigest {
402397
desc.Annotations = map[string]string{ispec.AnnotationRefName: reference}
403398
}

0 commit comments

Comments
 (0)