Skip to content

Commit cc3684d

Browse files
authored
Merge pull request #1022 from vbatts/fix_descriptor_schema
descriptor schema: add missing data and artifactType definitions
2 parents 01dad0c + 4136bec commit cc3684d

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

schema/content-descriptor.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
"description": "a list of urls from which this object may be downloaded",
2121
"$ref": "defs-descriptor.json#/definitions/urls"
2222
},
23+
"data": {
24+
"description": "an embedding of the targeted content (base64 encoded)",
25+
"$ref": "defs.json#/definitions/base64"
26+
},
27+
"artifactType": {
28+
"description": "the IANA media type of this artifact",
29+
"$ref": "defs-descriptor.json#/definitions/mediaType"
30+
},
2331
"annotations": {
2432
"id": "https://opencontainers.org/schema/descriptor/annotations",
2533
"$ref": "defs-descriptor.json#/definitions/annotations"

schema/defs.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@
6161
}
6262
]
6363
},
64+
"base64": {
65+
"type": "string",
66+
"media": {
67+
"binaryEncoding": "base64"
68+
}
69+
},
6470
"stringPointer": {
6571
"oneOf": [
6672
{

schema/descriptor_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,46 @@ func TestDescriptor(t *testing.T) {
232232
`,
233233
fail: true,
234234
},
235+
236+
// expected success: artifactType is present and an IANA compliant value
237+
{
238+
descriptor: `
239+
{
240+
"mediaType": "application/vnd.oci.image.manifest.v1+json",
241+
"artifactType": "application/vnd.oci.image.manifest.v1+json",
242+
"size": 7682,
243+
"digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
244+
}
245+
`,
246+
fail: false,
247+
},
248+
249+
// expected failure: artifactType does not match pattern (invalid first subtype character)
250+
{
251+
descriptor: `
252+
{
253+
"mediaType": "application/vnd.oci.image.manifest.v1+json",
254+
"artifactType": "foo/.bar",
255+
"size": 7682,
256+
"digest": "sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270"
257+
}
258+
`,
259+
fail: true,
260+
},
261+
262+
// expected success: data field is present and has base64 content
263+
{
264+
descriptor: `
265+
{
266+
"mediaType": "text/plain",
267+
"size": 34,
268+
"data": "aHR0cHM6Ly9naXRodWIuY29tL29wZW5jb250YWluZXJzCg==",
269+
"digest": "sha256:2690af59371e9eca9453dc29882643f46e5ca47ec2862bd517b5e17351325153"
270+
}
271+
`,
272+
fail: false,
273+
},
274+
235275
{
236276
descriptor: `{
237277
"mediaType": "application/vnd.oci.image.config.v1+json",
@@ -292,6 +332,17 @@ func TestDescriptor(t *testing.T) {
292332
"mediaType": "application/vnd.oci.image.config.v1+json"
293333
}`,
294334
},
335+
{
336+
descriptor: `
337+
{
338+
"mediaType": "text/plain",
339+
"size": 34,
340+
"data": "aHR0cHM6Ly9naXRodWIuY29tL29wZW5jb250YWluZXJzCg",
341+
"digest": "sha256:2690af59371e9eca9453dc29882643f46e5ca47ec2862bd517b5e17351325153"
342+
}
343+
`,
344+
fail: true,
345+
},
295346
} {
296347
r := strings.NewReader(tt.descriptor)
297348
err := schema.ValidatorMediaTypeDescriptor.Validate(r)

0 commit comments

Comments
 (0)