From 2ec9dbd41480df76881d31fc71cbf393cb5aea04 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Thu, 26 Jan 2017 16:37:54 -0500 Subject: [PATCH] image-layout: OPTIONAL index.json From the 2017-01-25 call we agreed to keep the manifest list as the entry point for accessing objects. The index concept is only a more generic use of the manifest-list. https://github.com/opencontainers/image-spec/pull/438#issuecomment-275252735 This change uses the manifest-list as an index that allows implementations to work around needing to walk/traverse the `./refs/` or `./blobs/` directories. This includes validating the image-layout example. This also makes `validate-examples` automatically update `schema-fs` if there have been changes to the JSON schema. Obsoletes #438 Signed-off-by: Vincent Batts --- Makefile | 8 +- config.md | 2 +- image-layout.md | 74 +++++-- manifest-list.md | 6 +- schema/content-descriptor.json | 4 + schema/defs-image.json | 14 +- schema/fs.go | 363 +++++++++++++++++++++++++------ schema/manifest-list-schema.json | 6 + schema/spec_test.go | 4 + 9 files changed, 386 insertions(+), 95 deletions(-) diff --git a/Makefile b/Makefile index 05e033e82..04753ba4b 100644 --- a/Makefile +++ b/Makefile @@ -76,12 +76,14 @@ $(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: $(DOC_FILES) $(FIGURE_FILES) ls -sh $(shell readlink -f $@) endif -validate-examples: +validate-examples: schema/fs.go go test -run TestValidate ./schema -schema-fs: +schema/fs.go: $(wildcard schema/*.json) + cd schema && printf "%s\n\n%s\n" "$$(cat ../.header)" "$$(go generate)" > fs.go + +schema-fs: schema/fs.go @echo "generating schema fs" - @cd schema && printf "%s\n\n%s\n" "$$(cat ../.header)" "$$(go generate)" > fs.go check-license: @echo "checking license headers" diff --git a/config.md b/config.md index 1a3e81627..ae3c8adcf 100644 --- a/config.md +++ b/config.md @@ -229,4 +229,4 @@ Here is an example image configuration JSON document: ``` [rfc3339-s5.6]: https://tools.ietf.org/html/rfc3339#section-5.6 -[runtime-platform]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md#platform +[runtime-platform]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/config.md#platform diff --git a/image-layout.md b/image-layout.md index 125566269..d03c6e7b4 100644 --- a/image-layout.md +++ b/image-layout.md @@ -3,22 +3,24 @@ The OCI Image Layout is a slash separated layout of OCI content-addressable blobs and [location-addressable](https://en.wikipedia.org/wiki/Content-addressable_storage#Content-addressed_vs._location-addressed) references (refs). This layout MAY be used in a variety of different transport mechanisms: archive formats (e.g. tar, zip), shared filesystem environments (e.g. nfs), or networked file fetching (e.g. http, ftp, rsync). -Given an image layout and a ref, a tool can create an [OCI Runtime Specification bundle](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/bundle.md) by: +Given an image layout and a ref, a tool can create an [OCI Runtime Specification bundle](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/bundle.md) by: * Following the ref to find a [manifest](manifest.md#image-manifest), possibly via a [manifest list](manifest-list.md#manifest-list) * [Applying the filesystem layers](layer.md#applying) in the specified order -* Converting the [image configuration](config.md) into an [OCI Runtime Specification `config.json`](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md) +* Converting the [image configuration](config.md) into an [OCI Runtime Specification `config.json`](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/config.md) # Content The image layout MUST contain two top level directories: - `blobs` contains content-addressable blobs. - A blob has no schema and should be considered opaque. + - A blob has no schema and should be considered opaque. + - Directory MAY be empty. + - See [blobs](#blobs) section - `refs` contains [descriptors][descriptors]. - Commonly pointing to an [image manifest](manifest.md#image-manifest) or an [image manifest list](manifest-list.md#oci-image-manifest-list-specification). - -Both `blobs` and `refs` MAY be empty. + - Commonly pointing to an [image manifest](manifest.md#image-manifest) or an [image manifest list](manifest-list.md#oci-image-manifest-list-specification). + - Directory MAY be empty. + - See [refs](#refs) section The image layout MUST also contain an `oci-layout` file: @@ -27,23 +29,26 @@ The image layout MUST also contain an `oci-layout` file: - The `imageLayoutVersion` value will align with the OCI Image Specification version at the time changes to the layout are made, and will pin a given version until changes to the layout are required - It MAY include additional fields +The image layout MAY also contain an `index.json` file: + +- It MUST be a JSON object +- It MUST have the base properties of [manifest-list](manifest-list.md). +- See [index.json](#index.json) section + ## Example Layout This is an example image layout: ``` $ cd example.com/app/ -$ find . -. -./blobs -./blobs/sha256/e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f -./blobs/sha256/afff3924849e458c5ef237db5f89539274d5e609db5db935ed3959c90f1f2d51 -./blobs/sha256/9b97579de92b1c195b85bb42a11011378ee549b02d7fe9c17bf2a6b35d5cb079 -./blobs/sha256/5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270 -./oci-layout -./refs +$ find . -type f +./index.json ./refs/v1.0 ./refs/stable-release +./oci-layout +./blobs/sha256/3588d02542238316759cbf24502f4344ffcc8a60c803870022f335d1390c13b4 +./blobs/sha256/4b0bc1c4050b03c95ef2a8e36e25feac42fd31283e8c30b3ee5df6b043155d3c +./blobs/sha256/7968321274dc6b6171697c33df7815310468e694ac5be0ec03ff053bb135e768 ``` Blobs are named by their contents: @@ -156,4 +161,43 @@ $ cat ./blobs/sha256/e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7f [tar stream] ``` +## index.json + +This OPTIONAL file is for use indexing references and elements of the image-layout, where walking the `refs` and `blobs` is sub-optimal. +It is intended to be generated from the content in an image-layout after any changes. + +From the base properties of the [manifest-list](manifest-list.md), this object will us + +### Index Example + +```json,title=Manifest%20List&mediatype=application/vnd.oci.image.manifest.list.v1%2Bjson +{ + "schemaVersion": 2, + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "size": 7143, + "digest": "sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f", + "annotations": { + "org.opencontainers.ref.name": "v1.0" + } + } + ], + "elements": [ + { + "mediaType": "application/xml", + "size": 7143, + "digest": "sha256:b3d63d132d21c3ff4c35a061adf23cf43da8ae054247e32faa95494d904a007e", + "annotations": { + "org.freedesktop.specifications.metainfo.version": "1.0", + "org.freedesktop.specifications.metainfo.type": "AppStream" + } + } + ], + "annotations": { + "com.example.index.revision": "r124356" + } +} +``` + [descriptors]: ./descriptor.md diff --git a/manifest-list.md b/manifest-list.md index f2a276c97..41f53f56c 100644 --- a/manifest-list.md +++ b/manifest-list.md @@ -11,7 +11,9 @@ For the media type(s) that this document is compatible with, see the [matrix][ma - **`schemaVersion`** *int* This REQUIRED property specifies the image manifest schema version. - For this version of the specification, this MUST be `2` to ensure backward compatibility with older versions of Docker. The value of this field will not change. This field MAY be removed in a future version of the specification. + For this version of the specification, this MUST be `2` to ensure backward compatibility with older versions of Docker. + The value of this field will not change + This field MAY be removed in a future version of the specification. - **`mediaType`** *string* @@ -114,5 +116,5 @@ For the media type(s) that this document is compatible with, see the [matrix][ma } ``` -[runtime-platform2]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md#platform +[runtime-platform2]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/config.md#platform [matrix]: media-types.md#compatibility-matrix diff --git a/schema/content-descriptor.json b/schema/content-descriptor.json index 9d9b54896..28c810189 100644 --- a/schema/content-descriptor.json +++ b/schema/content-descriptor.json @@ -23,6 +23,10 @@ "type": "string", "format": "uri" } + }, + "annotations": { + "id": "https://opencontainers.org/schema/image/descriptor/annotations", + "$ref": "defs-image.json#/definitions/annotations" } }, "required": [ diff --git a/schema/defs-image.json b/schema/defs-image.json index ad584dac0..431b070a0 100644 --- a/schema/defs-image.json +++ b/schema/defs-image.json @@ -17,8 +17,7 @@ "required": [ "mediaType", "size", - "digest", - "platform" + "digest" ], "properties": { "mediaType": { @@ -78,6 +77,17 @@ } } } + }, + "annotations": { + "id": "https://opencontainers.org/schema/image/annotations", + "oneOf": [ + { + "$ref": "defs.json#/definitions/mapStringString" + }, + { + "type": "null" + } + ] } } }, diff --git a/schema/fs.go b/schema/fs.go index 48a2beb81..51ecdf158 100644 --- a/schema/fs.go +++ b/schema/fs.go @@ -202,99 +202,302 @@ func _escFSMustString(useLocal bool, name string) string { var _escData = map[string]*_escFile{ + "/.content-descriptor.json.un~": { + local: ".content-descriptor.json.un~", + size: 1548, + modtime: 1485467092, + compressed: ` +H4sIAAAJbogA/wrLzJ0fmueS/5SBSaMjRGHmQ/EFfl9eT6850djLIrZo9xKlhtQ9qr06a//Zz2RgYFBl +YGAIUAADpcwUJSsFpYySkoJiK339/ILUvOT8vJLEzLzUomK9/KJ0/eLkjNTcRP3M3MT0VP3cxLzMtNTi +Et2czOIS/cS8vPySxJLM/LxiJR0GBgYZBgYGUwYGBkYGBgZmBghgRsIMEV25F1lAskwM8RegCpgYEAAk +JQXj/P///z9YZBTQCER05R5jgYTwVwlo0MszMDAooohIw0RMG8GRhhy7DNAIBKljZRiNNDoAeKQxQqJI +EhpFqtCoYQVl61poXDGhaWZGyqWjcUUpgIcklO0IZZfB2BFduReg5R04rkDxJIsUV1QvhE0bn68CBAAA +///GLb+iDAYAAA== +`, + }, + + "/.defs-image.json.swp": { + local: ".defs-image.json.swp", + size: 16384, + modtime: 1485547506, + compressed: ` +H4sIAAAJbogA/+yaTYwbSRXHf7HHHtsz3WbDiQPQ2zNiDjMeT5bVQkazi9AuHyvtsocEiBh5l3K7PO7F +7u7tLmeZjIaV9hAhoURISHDgwCESkRAKIXwoAikHBImQEAIOcEBRQEgBJDgA4gIoQj22Z+y2PZ9RJof6 +XTpdVe/V/72qyqieu7r0qRdftj6w+DTAO+A9wZfOvf3EJwhPwvmqUCpiT6rCE56o+kLtPu4LHYflKHTK +a65qtKuLjt8q+4H0HN9TwvVkGJXdlliTpSiQTjlyGrIlyjVZj0pbzYuvR763tyCNRjNIW9VLHzR4/1On +luLXGftJ650nP3ncqjQajUaj0Wg0Gs0jRAUp3gJS3feXu88TiWe6+3x39xkk+jUajUaj0Wg0Go1Go9E8 +vogaXJqAu5nO7/+9+/+DIlwrwteL8MUifKwI5SL8woSfmfADEz5kwpwJ/zHgXwb8zoBLBrQNEAa8ZMCK +AfMG2AZMG/DvabgxDRenYWMa3Gmwp+EfU3B/Cn4zBeemoDwFs1NwcgpuFeBKAS4XICjA2QJ8vADPFmCu +AH/Kw508fCcPX8nD23lo52E1D8/m4S85+HkOfpSDb+ZgNQcrOSjl4Ikc3JqEb0zClychmoT3TgKT8Ocs +3M7CD7NwNQuXs+Bn4bNZ+GgW5rJgZuHvmU7+fpuBX2bgpxm4mYFvZeBSBt7KQJCBUxmYyYCZgTsTcG0C +rkzAhQlgAv6Whj+m4Xoa3DR8Og0vpcFKw90U3E7B9RRcTcFXU3AxBW+koJKCj6TgvyfgDyfgXl9Rxhpg +M/G+a5et1gNpL1t2pELXW7MTA2xXyVZkL1sb+5xkVPvIscnG8apH94wZf6gID+JinMoRZofP9tHc7Gr7 +MDfBtp0IQ7FuLwx023Up1L5nPlAERwxjf/6PMFPC/GC+j8ajXNx2KIcNNxfG+Rk1v31ehK7w1N5uHlFg +sV0t7mwoFUTL5cSHa4t+uNb7Ym3rY7Vy0BSq7oetsh8tbiclkaz+rqPl60jyzsswcn1vhLpez/GJGxZ1 +bGJE6DRcJZ14vZKyBvoGBdpB6AcyVO7QIleGY9vFa/9gO5RvtN1QxoGsMiJyv/q6dNSgzeHC7vNhb7f1 +xzGQ/s3E/wZ+2BLxIbbboZsILrFIg1JHHNFdjqddk5ETuoHq7FVbWE03UpZft9phM7Lqod+y3my4TsNS +DTeyOsmxWmLdqkqr5r/pNX1Rk7X+UGPD8WHas6GsxzPNlGuy7npuPHNUrrlrMlL2LspUQ1pOuB4ofy0U +QcN1LKchnc9F7ZbVMY5Fx4M6Ghcs19t6DYRSMvSsuZWGiBrPLa805OdFTTpuSzS7ls/N9evvStk7gpqs +R1tf1g6G4nrqmaf3iiRyL8hYYXVdyainPJR1GUrPkTVraBfascWB09qSNVecjVd/Dz1bA+Ntsi8tO253 +BI0+rJXhxCZCGum21zjqtI47qQc8pS3huXUZqRe6yfDDrid7RE8voO2c291tFc/46qooXVgqnX5tfrFU +mV9eFaX6Uul0ZX7WTipOHNjj2OLJ7T0mog+XPtMJqrLzzydnZt9XevW1xfnKxtLCqaee2Szvb9jeeTjg +yiW2ydB2tPuOwE7TQKpf2BlhBSJUrtNuitBSvvVKIL3ne7NbL8YzWmcC6bh11xGq88d+Y+v+H9/Nbxid ++3/v9/1/FuF+EX5fhJ8UYaMI9SKcK8K7ilAowv9MuGfCr7s1gR+b8D0Tvm3C10w4a8LzJpw24UG3RvBX +A35lwG0Dbhlw04Dvd+f/rnEcFRCNRqPRaDQajUajeVzZpFdj61XaKjullFHFMq/dbO4UKw5ZDGqJ4MzW +ZfdMoqC6XTbxPflKvb+8cbDLsPA8X4nOVbd7He5vGrrmb44MujJYFh5XFR5MyWBahlJzpPQkfQ+l6aGk +amy6hoLZTCTo/wEAAP//OcNq/QBAAAA= +`, + }, + + "/.defs-image.json.un~": { + local: ".defs-image.json.un~", + size: 16432, + modtime: 1485547506, + compressed: ` +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 +AA== +`, + }, + + "/.defs.json.swp": { + local: ".defs.json.swp", + size: 12288, + modtime: 1485533446, + compressed: ` +H4sIAAAJbogA/+yaXWgc5RrHf+1+z+zsnva0F4denDmTQwuHNrs7+5X0WKGYtgkaUy2tlZKLyWaSTOzO +bGdmS2KNVdSqhRZBFKEKXhRRsUUQVIoIFlFLb8SCXvRCrKiIoMWrqlhkm/1qs9lN0mgR5gfZ2Xn3ff/P +f57neWd3yY4k9wwMyvnuDMA/4PYDR/eeW3k39mo4OKK5rkNHRjRTM7URS3Pbz3t4VjDh2IXEuOFOlEe6 +C1YxYZV0s2CZrmaYuu0kjKI2rm9ySnoh4RQm9KKWGNXHnO5JxzI7W/Hw8JgXibSaSlaedSn/kf+5evet +NuTh4eHh4eHh4eHh8RfillZwGFhZPX+1elxxw9HDw8PDw8PDw8PDw8PDw+PvizYK54EnfbP//699/78a +h9NxOBGHY3Fw4zAch/44bI2DGod/xYE4fB+DSzG4EIMzMXgxBo/EYDoGkzG4Jwb/i0EgBlcl+EmCzyU4 +K8EpCV6R4HkJZiQwJLhXgjsl+L8EigQxCX6Owg9RuBiFs1E4HYWnovBoFCajcH8UhqKwPgrrorAqCldE ++FGEb0X4UoRPRHhHhFMiPC7CtAiWCHtEuEuEPhG2iLBehLUiiCJcFuAbAS4KcFaAdwV4U4DXBHhGgCkB +9gnQL8AmAboEWCfAGgF+i8DXEfgoAm9F4IUIHI/AkQgcjoAdgcEIbI9AbwTWRECKwJUwfBWGT8PwRhhO +huGlMDwRBjMMw2HoC8NtYciGoSsM0TAEwnAlBOdD8GEI3g7ByyE4HoJCCPaGYHsI1oZACMEvQbgQhHNB ++CAIZ4JwMgjHgvBQEO4LwlAQ+oOQDcK/gyAG4VIAvgjA+wF4LgBHAzAVgKEAbAvAlgDkArAhAKsC8Lsf +PvPDx3447YfH/DDlh4IfVD9s8MNaP/zqg8s++M4HF3zwng9e98EJHzzrg2M+eNo326tHfLd44ywvM8hy +5a/2KMvD1aMsK+50SVcap45Vtgu6srExMqo7rmFqrmGZ9WHF1g+UDVsfVTbL+6pjM401M/VntQCbZcVx +bcMcV7jxhUONZRub1/3X1scq67oSo/qYYRoVA05iq21r00Nju66JOU1qVunahEULbjf26zs1d0JpfcXL +IFdNaUNJKdlWSbddQ2/YVQatsunWT+uhZlontXXwsmG6abU5tPHg4lM8R6X++6mBvpsXm7Ac9zqdltkY +6BvUSqVKv7TJyDwh+y3rgVpAxXD1YnNT1NtRqzRStaGValdVVjo3WYNt5sGmq9XNg8vX4po9viz9Xaqc +dijAtSTOycQiHCvbmi69IdDqbqDUPbYrduv7yOIKXHO4+KbaMdC3tJA7BvpaxFvAblF2NG2TRS3c3Wrh +PE1cs26NTOoFt6lJug+lNs5c1yWa6+q2uXNus8yVqaagqJVmMz40O7xYU3PeMpbV1OzjXFPD7U2Z5f37 +G5bm24zzXULdnGXqQ2P1t8/qvJ2WYbq6/Sd5mr91cpnODmfn3SqHqdzCHKZy8zpUitqUUSwXlc1yqieT +yeUzmWQ+nU/2ZrNqMpmszzLM6qzknLtWRXlct2utVE1du0gZtTfTm8urvdkl6qfVtvq5bDa9VOlUrq20 +ml2qcE9b3V5VTafzajKd68lm8vlcy9xvajGrU+jO1VBTmXymJ53L5FtErL/Ys4BAHcqSVvO5VjEq4wuR +71CalNpKPKUuRLpWHKVpizWGnIJtlKqffJW+xgy57OijsjthW+XxCavsyu6ELg+VdPOO2odDeVdJLxhj +RqH2VeEQfwQAAP//Qe1ZpQAwAAA= +`, + }, + + "/.manifest-list-schema.json.swp": { + local: ".manifest-list-schema.json.swp", + size: 12288, + modtime: 1485547045, + compressed: ` +H4sIAAAJbogA/+yaT2sDRRjGnxYPirvZUi+Cl9dJ8SDZbK1FZW/+uRSsPVSLICKT3dlkQnd2nZkUS1sF +PfZbKPgh/A6evPsp9Cqyu9m2SbFVFIvy/g6ZzMvM8z7zzlxC3snuycEhvTneB4AtYPD99cc/bX4Auw2c +TaT3Do8ykUYaOamkf3jdl51g4myWTLWfLSbjrCqTqlYmq4yX2ijrEl3KqYpdrbLEZTNVyqSURhfK+fhU +Ox93wfHcVeZxawzDNCx8Eb8V4vW913ab6VC8TC9sf/TUrhiGYRiGYRiG+Rfx9Qa+ArC5nA+X48bayDAM +wzAMwzAMwzDMfxeZA5fPAztB9/9///v/twj4IQK+joC3IyCOgJci4JkI+HYAHA2ANwaAGADRAHh2APwa +Aj+HwI8hcB0C34TAZQjMQ+A4BN4JgRdDYCsEnguBXwLguwCYB0AeAJ8FwFEApAHwagC8EnS+guCJi8Qw +DMMwDMMw/0euQPQpiIhE33PrBOgPws28a8Y9UdbpyogRiIRVny+0VblI6RMQXY3alVftJ5HYsaoQKYlc +FS5ue33bVt5hkqtCG+11ZVwijam8bL+LfqNuFMXM+9qlyVrT8Liy075buNVc7Rle0ev8iLuhlC46k6Nl +st7tHb9NMmV8nCuXWV37yra+b+15Vd4qEQl/Xqtmo7RWnvdZ1akqlfF/LuWDJeoP+N6Nn79o5fYq73kR +pfxCl4tSpLR3E9KmD43WdbXxaqqsGP0Td3X/SbWSfd2bYEriw5l2VGh1mpOrVaYLrRz5maJWklYkqZOk +s06TpCNpaNX02kvuSiJqW9XKeq36It0cuZrMVea7F/83TtsJ7HQLepU0SZr77jvdG4XcysLHu/tLqWG3 +b60mR7Uy7/aZ6aAtxOEyG73fFOK4K1XWvnsxwgV+DwAA//+N1L6RADAAAA== +`, + }, + + "/.manifest-list-schema.json.un~": { + local: ".manifest-list-schema.json.un~", + size: 23207, + modtime: 1485547022, + compressed: ` +H4sIAAAJbogA/+zcS28bVRTA8VM7fSdNk6ZxmjSt46RJ8/CDR3iEV4Hw6AJ2FLNCVTNBrogdxQYBRUis +kNo1S2CBVCQk+AKwYMcWsesexJIVsEAo6Lj3xie+M5NjnwOr85cqTSfOnFF/Gie2b+dabeuL1+rrjV8h +c/W7ya9e+eejv8d+vpn98l79yo+fvfPNvVcrf/3y7Sd/fv7p73UAmAWAZ/OuwtxOtFlYyxc2os1msbZ1 +/a2odLPZqM+WN6LNWr3WqjXqzfLW9XptM2q21qPmjZ3adquxUwCAHACUAOAQAFTgfhXyB6p37p4awK8O +wJs/uQdkoBN+6Yz/y+7u7m57j9Vfp8j2GbJ9zW9Ub29PD9z/F/5jwj1oEgCm9+0Z83tWP26j4TdkyeEy +7jGHwdDkcdDybbRDHaKz7irG3aPtq9hfoM3CWv6Wg8u0L7xOWXfJjoDByePAvU6vtnEAmCBw8qdg55z1 +F6NrwJwVEztfCZz7Y0bWI+QEDhuzYmLmZwLmvpRR9SiZf8SUFeMoV9OUnw6U+0FG1GNk/FFDVkyM/FSA +3Icxmh4n04+ZsWJi4ycD496JkfQEGX7ciBUTEz8REPcsjKInyewTJqyYWHgtEO4VGEEHyeiTBqyYGPjx +ALhHX/QcIpMHzVcxju8bab6Pha+Ne+Id7DqJIeNVjMO7kcb7aMDbky5qDnedD+ougunK4+i+l6Z7NdC9 +0ai3onqruLFH2ZM3ntFpcibD5q0Yx/v9NO+X2d487mH/RO06bdyKiblfYnOztFF3lJzHiGkrJtZ+ka3N +wR7pOo1Rw1ZMjP0CG5thPerWA9AzMmutxNbrbOuDqf3aA9+YUSsmpn6ef1kfJD3mDu87a9KKiaWfY0sf +BO1hfeMGrZgYOlwklHhJpzv7A/ty5qyY2DlcJJTknM6MpOfICUwYs2Ji5nCRUOIvY2nKE27hru+cKSsm +Vg4XCSUppyEj6hQZP2nIiomRw0VCie9+Jxuj6XkyfcqMFRMbh4uEkoyTiaf8f6dwnTdixcTE4SKhJOJE +YRS9QGZPm7BiYuFwkVDyG2DxwAh6kYy+YMCKiYHDRUKJr5HjfdEzTyZfdL6XwXzlcXw/6G2RUOJHU7G8 +yDlDBueNVzExb7hIKIE3Xhc1C2TujOkqJtZ9hKsbizvjjuQrGK5iYtxVLm6cLVrOkamzZqsYx/ZWmu3D +XNsYWjzGJTJ0zmgVE9M+xKUNZVFynsy8ZLKKiWUf5P+07YJFyAUyct5gFRPDPsD+SdvlOu8NXQvmqpjY +tcJ17WJd8G8/uS4bq2Ji1jKXdb8q6i2ReYumqphYtcRV3YeKiMtk3JKhKsZB/TANtchFpaZouEKmLZup +YmLTFfZr1w4pEhbJsBUjVUxMuswl7YiuuNtT+oomqhhfNBMvusT+HcmDImCZjCrRtcsGKiyXsE1Bv4+7 +RAt7e3LBnnFyMPzWRS66Ny+Re8uC8/f3nTVzaTnyFInbq277Xb9dvb39Q9s8+x/fxLLcdWYVu5PD/1n1 +zt0hd6dm5vr0VOfo7Wgr6vpk4Lev/w0AAP//DEZu9qdaAAA= +`, + }, + "/config-schema.json": { local: "config-schema.json", size: 774, - modtime: 1485388791, + modtime: 1485467966, compressed: ` -H4sIAAAJbogA/5SRvW7rMAyFdz+F4WS8ju7QKWsfoEPHooMqUzEDWFRJZgiKvHv1EzcxEBTuEsSH/M4R -ya+mbbsBxDFGRQrdvu1eIoRnCmoxALfpn8dD+xrBoUdnS9e/jG3FjTDZjIyqcW/MUSj0Vd0RH8zA1mv/ -/8lUbVM5HGZEEkMpzc1pUrDabXCyBzCu5FdSzxEySx9HcFq1yMmBFUFSJY+TNMdgFYYf4Q4VZQzVruie -eLKaK0NCesUJulK71JbOnnQk/sVq2c1uRE2POzGsZUjWdl53cde9ZfDl8eClr+VdvsLGJAUD5mvJvMOF -FxOpl797XbmF14iixOdHY1hme76tO+1mug9dHTtHXLlLM/+WN3QMnyfkcvK3B5e4bXo5ffp4by7NdwAA -AP//XlvgsQYDAAA= +H4sIAAAJbogA/5SRsW4DIQyG93sKRDL2QodOt+YBOnSsOlAwOUc6TI0zRFXevQJyTU6KquvCYP/f/2P7 +u1NKe8iOMQlS1IPSrwninqJYjMBqTzHgQb0lcBjQ2ap6Ktg2uxEmW5BRJA3GHDPFvlV3xAfj2Qbpn19M +q20ah35G8mAMJYhuTssVa2qDkz2AcTW/kXJOUFj6PIKTVktMCVgQsh5UGUcp7RisgP8t3KFZGGOzq/VA +PFkpHW8FesEJdO1dmkTbk4zEf1gt1exGFHByYljLUF6rvO7iTr1lCPXzEHLf2rtyhY3xEDBiuVaed7jw +YiIJ+f9eV27hNWIW4vOjMSyzPd/WjQLTfejq2Dniyl26+a1/0AxfJ+R68vcHl7htejl9p9RHd+l+AgAA +//9eW+CxBgMAAA== `, }, "/content-descriptor.json": { local: "content-descriptor.json", - size: 956, - modtime: 1485388791, + size: 1119, + modtime: 1485547273, + compressed: ` +H4sIAAAJbogA/5STQW/UMBCF7/kVI7dSL92aQ8UhqnqBOwe4IQ5eexJP2dhmPKsS0P535DjpJoAoe0ue +3pv5ZuT52QAoh9kyJaEYVAvqQ8LwLgYxFJChfGEQeD+bIsPHhJY6smZK3JYS19l6HEyJe5HUav2UY9hV +9S5yrx2bTnZv7nXVrmqO3BLJrdYxYbBL5zzFqlu7l+41J2PCkoz7J7RStcQxIQthVi2UwQDUgI7Mp2qu +0p/zikeYfKUoxA6KwNghY7DoYNVjil8zdiXnsMs7GkyPd2XYK+2wo0ClbNbnxlPsVNMq04/XUIoFKMB+ +FMwX4vwFhIK8vd9COOoxyysYlscksWeTPFmwHu3XfBygZhesynJbcMtvMiLIAW4evMn+sX3w+N04tDSY +w5x8vLlwkTPsZoAjH/I/8A0cqDIWI3QcB3j2ZD2IpzxDw2BG2CO4+BwO0Th0Z7DldRlmM55lEhzWfVfO +LEyhf7ECqC7yYMqS1ZFJzfppM4YJIcp0RJtp/vcmpo2tLkOv61225HWyWUAnTMX47UiMhenz7ze1ftTb +t9UAfGlOza8AAAD//0l7cGRfBAAA +`, + }, + + "/content-descriptor.json~": { + local: "content-descriptor.json~", + size: 1122, + modtime: 1485467079, compressed: ` -H4sIAAAJbogA/5STP2/bMBDFd3+KgxIgSxx1CDoYQZZ279BuRQeaPEmXmn96PCNVC3/3HkUpttsigRfD -fHyP9zvy9HsF0DjMlikJxdBsoPmUMHyIQQwFZCj/MAh8nE2R4XNCSx1ZMyVuyxHX2Q7oTYkPImnTtk85 -hnVV7yL3rWPTyfrdfVu1q5ojt0SyZqJWtkvlPMWqu3Uv1WtOxoQlGbdPaKVqiTXPQph1pzSmmkdH5ks1 -V+nffmVAmHzlUIgdFIGxQ1YadHBSY4pf617JOezymrzp8a40e6WQHQUqx+b2WHiKHWq6yfTrLZRiAQqw -HQXzhTj/AaEg7+/PIRz1mOUNDMujXnfPJg1kQV/Bfs97DzW7YFWW24JblsmIIAe4eRhMHh43DwP+NE6H -xZvdnHy8ufAiZ9izBva8y6/gG9hRZSxG6Dh6eNYuBoWkPEODNyNsEVx8DruolO4ItkyXYTbjUSZBf1r3 -xJmFKfQvVt3pIntTLllpqZn1w2r5nVppGH/sibF8BF//HtjTiTl/OF18Wx1WfwIAAP//z1UgVLwDAAA= +H4sIAAAJbogA/5STz24TMRCH73mKkVupl6bmUHGIql7gzgFuiINjj+Mp8R/GE5WA8u7I691mFxAlt93R +7/N8M7J/rgCUw2qZilBOagPqQ8H0LicxlJChfWESeD+GMsPHgpY8WTMQt+2I62oDRtPwIFI2Wj/VnNa9 +epd5px0bL+s397rXrjpHbkLqRutcMNmpcx2wntbupXvn5FiwkXn7hFZ6rXAuyEJY1QbaYAAqoiPzqYd7 +6c95JSAMuXYoZA+twOiRMVl0MOsx4NeMvnEOfV1TNDu8a8NeaYeeErVjqz43HrBTp1WlH6+ptAhQgu1R +sF6o8xcRSvL2finhaIdVXtGwfCySd2xKIAs2oP1aDxE6O2l1l9um236LEUFOcPMQTA2Pm4eA341DS9Hs +R/Lx5sJFjrKLAQ68r//QN7Cn7tiC4DlHeA5kA0igOkpDNEfYIrj8nPbZOHRnsel2GWZzPJdJMM77zpJV +mNLuJQqgfOZo2pLVgUmN9dNiDJNSluERLab53zcxbExHk8hjlXWbWc+PvGzPc3I1uQ6mivHbgRib1uff +n9X8Xi+v1wrgy+q0+hUAAP//qPU6nmIEAAA= `, }, "/defs-config.json": { local: "defs-config.json", size: 2236, - modtime: 1485388791, + modtime: 1485467966, compressed: ` -H4sIAAAJbogA/+RVzY7TMBC+5yksw7Gwd6673JCKVAEHhCo3Ge/OEnvMeIKI0L47TrZ0888qpac9VG0m -/n7m89j9nSmlC4g5YxAkr98pfQMWPTZPUQXDgnlVGlZCahvAX5MXgx5YpV8Wb9UuQI4Wc9PiN4+EJ4ZE -2GikYt4uPz2nitQBGkE63EMuLbStB6YASRdiZ3Wqf4rAvUqHIwqjv9WnVw+bJ9z7X4EiFB+JJQ7xrxls -g0+W49v7SP7VVcf9lTNh1zJvHz1O8/ufc7YMs6n1pvsKBdzQxkIjSWpGVLgOhF6G2uRh2/T0tSfQl1u0 -uGDzH1b7dgeWF134qiz7TF2eb5MRXLvixfb+mcrKwWicn9n/2qm/dFdfiL8n2Rtcdc4/mAOUl45kN7Hx -/z2SrPt9ZNdMJDaec4EWaO0ei1FEl7+tjuuXtrQnC75yoz3TpamBo17O7JQCw48KGYoez1MGQ3dZl/Fv -5ncYhbg+J/ScwQiMbqql7i2xM9JOY4K+EXQwPfGmkjtadVaOrvaHehWanIPxP89zoOCC1Pt2J+fgB6IS -jNdz5yFrPg/ZnwAAAP//3oH4m7wIAAA= +H4sIAAAJbogA/+RVzY7TMBC+5ylGhmNh73vtckMqUgUcEKrcZNydJfaY8QQRob47SrZ089OEVZaeOFRV +Yn8/883Y+ZUBmAJTLhSVOJhbMHfoKFDzlCBaUcqr0goowyZiWHNQSwEF1hwcHWAbMSdHuW3xq0fCM4O5 +hUYDwOTt9vMzgNE6YiPI+wfMtYW276NwRFHC1NkNYD4mlN6bDkdSoXAw56Xj6gn37mfkhMUHFk1D/GtB +1+ALdOntQ+Lw6qbj/sbbuG2ZN48eL/OHH1O2rIitzaq7RIp+aGOmEIDjhKhKHZmCDrU54Kap6UtPoC83 +a3HG5l+s9u0OLM+6CFVZ9pm6PF8vRrD2xX9b+ycuK4+jcX5m/Uun/tpVfWb5RuFwR4vO+Xu7x/LakWwv +NP6fR5J1/0/sRpjVpZdcoAU5t6NiFNH1b6vT/rmW9mQxVH7UM1PaGiWZ+czOKQh+r0iw6PE8ZTB0l3UZ +/2R+T0lZ6peEngtaxdFNNVe9Y/FW22m0im+UPF6eeFvpPS86KydXu329CM3e4/jL8xwo+qj1ru3kFHzP +XKINZuo8ZM3vmP0OAAD//96B+Ju8CAAA `, }, "/defs-image.json": { local: "defs-image.json", - size: 2916, - modtime: 1485388791, + size: 3185, + modtime: 1485547506, + compressed: ` +H4sIAAAJbogA/8RWTW/bOBC9+1fMKsHm4A9lF4sAawQBiubSUw7pqYETTKiRNalEqiSd1DH03wtKsvUd +143R3swh+ea9NzO0NiMALyAjNKeWlfTm4F1TyJLdykCK2rJYxajBKrhJSX5U0iJL0vApwSXBbUqCQxaY +X58UeDsAbw4uBYCXUMD4eZ3SLgTgceASRtamZu77KiUptvBmpvTSNyKiBH12qfwKYrIFsAWgZ6xmuazi +KVpLOpdzf/dh+gWnr+fT/xfVz79OTv+e3j/MxovN+eSffy8y/+eOnXp5iqzI5AW8JGPrklpm2ohA6HVq +1VJjGrEAEZH4alYJFHdBheAOqccnEnYCLPNlKQDOLiM00dX8MqLvGJDgBOPy5tXZgT4Ukh7Gs+liPL/D +aei0jluKEpQckrHXpQ6l31GwLlaHcaG7imv6tmJNLs9dGWt0z6QKGn5trMtilIFFZYJWKWnLZGpSBlpy +qIb5Wcd5Wy9NIWmSggJoScghTjWF7u6JX5uGWgfvzmZtQfu5uGOuTx7XlsyBfAIKzezJKNkkxtJe/NdP +qtPif67N33C2WfumgpWOzR7+CDEXJN1hCLVK4CViEYGN2JSsIcE1PBIE6kXGCgMKmsy2LY1a47q5xZaS +NofhsS13Q6UTdM57K81ebS/rlZnGaN2VttTDZnaH0iutr7V6JzbfQS0itiTsSlNbnDJ1RYsG4sDAdjHb +u7+s1n+DardOje2sK+x4tJR5L5nZM2lTdPnxSO1A30suJHSOH9eyCnWQXndEYXhM9wqrT2Sf0GfUjLL9 +hh7s11tm/SZhex8hlFJZbH77bTkcVM86UONxUJJuws5b0zFkzx9egultLvh2v/GDZstVHHuDBi1G7WjW ++NLqt+oINvVYtDngW2DQmpotm74/h6YdW9GFDW6VjbLRjwAAAP//FgEL5nEMAAA= +`, + }, + + "/defs-image.json~": { + local: "defs-image.json~", + size: 4206, + modtime: 1485547273, compressed: ` -H4sIAAAJbogA/8SWTU/bTBDH7/kU+xj0cMiLaVUhNUJIVbn0xIGeigIa1uN4qL3r7m6gIfJ3767t+D3Q -lKg9wc6u//P/zc443owY8wLUXFFqSApvzrxLDEmQW2mWgjLEVzEoZiS7SlF8lsIACVTsSwJLZNcpcgqJ -Q/74pNCrBKyeS2GDCQYEX9cpViEbpMAljIxJ9dz3pZXnW3k9k2rpax5hAj65VH4tMdkKmELQ00aRWNbx -FIxBlePc3nyafoPp8+n046L+97+j4/+nt3ez8WJzOnn3/izzf+/YsZenyIpMXkBL1KaJ1CmmiZBxtU6N -XCpII+LMEvHvepWw4lkmQ+YOyfsH5GbCSOTLEoCdnEego4v5eYQ/IbClTiAun7w42bMOBdLdeDZdjOd2 -FTrWcYcoAUGhVb8sOaR6w4X1tXqOC+46rvDHihS6PDdlrNU9kzqo6bm1Li+jEUljMKFUiVeGFnVhlDVv -ext1A29Hm+661/ys49jeocIQlS0JBqyDlUsc23337JHfmJBGV1dnsy7k617cMdc792uDek8/1o2ePWgp -2sZImLMPw6Z6bf/vWv+FypYuBwlWKtav+AcWU2HSHWahkgl7shiRdUm6dM0SWLN7ZIF8ErG0NoO2s22b -g1Kwbm+RwaTrYfcol7uum8FV3hKQ19jLBjGrAeig7jfHlcog2lBrDU5xvgOKR5acm5XCLpzUTaJFS3HH -wPY1u7t/TOu/YLV/T63trA92OFtW7I1mZo82Q9HlhzNVib7VXIjgKn7YktWqO+31R7RIOTimr4I1J3II -9BEUgei+Q/eu10vF+ktgwy+hUfPv9uMChJAG2l+Ge99qU6T6PZcCr8LW22azx09dAul1jnrdAW6UezP0 -7hOrOPZ60IvRdpWNstGvAAAA//83ffekZAsAAA== +H4sIAAAJbogA/+xWTW/bOBS8+1e8VYLNwR/KLhYB1ggCFM2lpxzSUwMneKGeLKYSqZJ0UsfQfy8oyZao +D7uOjRYFooNhfg1nhm8orQYAXkCaKZ4aLoU3Be+aQi64bWlIURnOFjEqMBJuUhIfpTDIBSn4lOCc4DYl +xkPOMF8+KvA2AN4U7BYAXkIBx8/LlDZdAB4P7IaRMame+r5MSbA1vJ5INfc1iyhBn9ut/ApitAYwBaCn +jeJiXvWnaAypXM793YfxFxy/no//n1V//zo5/Xt8/zAZzlbno3/+vcj8n5t26uVbZMVOXsDnpE1dUsNM +ExEwtUyNnCtMI86ARcS+6kUCxVqQIdhJ8vGJmBkBF3mzFABnlxHq6Gp6GdF3DIjxBONy5dXZnj4Ukh6G +k/FsOL3DcWi1DhuKKKaEhLkuZUh1wHmh4CHpOlaLcCG76lf0bcEV2X3uyj6neEZVp+avTrs8i7JjVnmg +ZErKcNI1KT0V2XeE+VzLeX1cikJSJBgF0JCQQ5wqCu3aE78WhloBb+ZmTUG7udhptkwel4b0nnwCCvXk +SUvhEuPCXPzXTapV4b+vyrc46569qwCFkAbd6+hN9VwHcjhJQTehU7H2WTmt3YeQYHqbx7f49Zzl2Wg7 +9jpPYhHHjZW11mzQ7M2c8Hck9j397+n/k9O/UHEr9g3+CDEvSNrJECqZwEvEWQQm4rpkDQku4ZEgkC8i +lhhQ4DJblzQqhUt3iBtKmhz639nlaChVgtZ5b6F4PdFZp8w0RmOXHHbDbVA6pXWVVmdi8xFULOKGmFko +aoqTuq5o5iD2BLaN2Rx9s1p/C9X2OW27lq2w49GS+lAyk2dSuqjy45HagB5KLiS0jh/Xsgq1l147otAf +053C3DdsW+gzKo6ieYfu7dc2s36RsJ2X0PuX1ubZ9aXVbdURbOqwaLXHt0CvNTVbVl0vB9eOtejCBtvK +BtngRwAAAP//NI6tWW4QAAA= `, }, "/defs.json": { local: "defs.json", size: 3193, - modtime: 1485388791, + modtime: 1485467966, compressed: ` -H4sIAAAJbogA/7RWTXPaMBC98ys8tEfa2PIX9NYp/cghAzOZnjo9uGYBtSCpstxpmuG/VzLGWPZiMKWH -JPau9r23T6tYzwPHGS4gSyUVinI2fOMMp7CkjJq3zMkzWDhqLXm+WvNc6UdwZgLYO85UQhlI51FASpc0 -TYry0R6vAtB4hkIHKVPj6k2/qycBhk3HYQWyqCwSW127zbc698oj42M4+V2GPRIXwd2oQvaivtA+iSMM -3MRb8D7pC0+8IA7GfhRgHFWyRRQFfYkmhPh+TFw/GodBHEeu6yKMyCqLOr9idzAeEoYt3N57gwFHYei3 -oXvvCwYdkEkwiWIyaeP33g4M3xsHQRQHgRv7sTsJQ4KZ70VzbnBlnZAzmC114EsZcKpUkX4pwWSHL+5q -B+6utLxauBvh1YduWL7Z1FaXT18RL26pUDt7U4WZkpSt+is8cOzrb6tpm4jHAnb/Gxsl/u07pOo4SSJR -Wj+bSy5AKgpZrUinXz97o50V6mphUP/bEjXbU/9nUSXWGVGf76d1IafHRh94q/DjtYVvpUyeZktdn2EW -JCZ9dIAq2Da6xqmMHrTDkm9v/ZWU+EbbPB/oBuaJWmMM9brD+vfs13kDG+ItgE+c/6gjiBNTImxRHWxV -C9hh1DatsstwMNVNNLDa7wAzPp0Z4pLPGHLTmSocRhnvpw+JEI1/Lac2YM0zZZ2WDsr6iWlalh5ufrcA -y+gfuBIFdeSB50xd4kbGc5leSN09kPryrChLysvzP8NxYd+bO6EuGfFy/Pp9MqoplfAzpxIW1hfU6nnU -MrVJbn8cB+ZnN/gbAAD//0JyEpx5DAAA +H4sIAAAJbogA/7SWQZPSMBTH73yKTPSIbpumLXBzRNc97MDMjifHQy0PiEIS09Rx3eG7OymlNG0oFPGw +C03yfv/3/nmheRkghBeQpYpJzQTHE4SnsGScmacM5RkskF4rka/WItdIrwHNJPD3guuEcVDoSULKlixN +ivDhnlcB8AQZCYQw43pUPSGE9bMEo8a4hhWoIrKY2DLOtvkWT9Abn4yOw8nvctgncTG4G1ZkP+qLDkgc +ueBmvIUPSF888WlMR0FEXRrVZEsoon2FxoQEQUy8IBqFNI4jz/Mcio5VlnR+xe64dEgYtri998YFjsIw +aKN774sLTcmYjqOYjNv83tvh4vsjSqOYUi8OYm8chsRlvh/NheGquqDgMFviCfpSDqBqqph+rcDM4ld3 +tQN3V1peLdwN3dGHani+2dRWl9++Ory4ZYYRvW2GmVaMr/pneNDYx982p20inwrs/r+rlcS375DqYyfJ +RGtQfK6EBKUZZLUghPDbF3+4s4a6ShjUP1tJzfbS/zmpknUmqc8P03oip9smINgKvL828J1SyfNsef8w +zVwWJGb66ADTsG1U7ZYy+TgrLPX21l8p6d5oW+cj28A80WuXQj3usP4D/3XewEbyFuCTED/qBHmiS6Sd +VIdaVYLrMOJErbLLOK6smzSwyu+AGZ/ONHGpZwy5aU8VDjsVH6aPiZSNn5ZTG7AWmbZOS4dk/cQ0LUsP +N79bwDL2B66kOB15FDnXl7iRiVylF0p3N+QCMs14Ul6e/xknpH1v7kRd0uJl+/V7ZVRdquBnzhQsrDeo +VfOwZWpT3H45DszfbvA3AAD//0JyEpx5DAAA `, }, "/image-layout-schema.json": { local: "image-layout-schema.json", size: 414, - modtime: 1485388791, + modtime: 1485467966, compressed: ` -H4sIAAAJbogA/2yPsU7EMAyG9z6FFRhpUySmW286CekGJBbEEFpfmxNNQuIinVDfHSduYbhbWvmPP3/2 -TwWgekxdtIGsd2oH6hjQ7b0jYx1GOExmQHg2Fz8TvHQjTkY9ZOo+ScHESBR2Wp+Td7WkjY+D7qM5Ud0+ -acnuhLP9hiRmPMu6TZYKJt3aZnH9WcRC0iVgZv3HGbs1C5EnRLKY+CVfkw2ZlI1feaicJW/X135LB/gT -0Ihw3B/gyly4zZ4oWjf85+jmifO3tebksWmbVq31e/kv/F3KwhG/Zhux/0NurVtlbql+AwAA//8bwMuB +H4sIAAAJbogA/2yPwUrEMBCG732KIXq0TQVPue5pQdiD4EU8xHa2zWKTOJkKi/TdJZlWD91TmD/z8c3/ +UwGoHlNHLrILXhlQp4j+EDxb55HgONkB4dlew8zw0o04WfWQqfskgwE1Mkej9SUFX0vaBBp0T/bMdfuk +JbsTzvUbkozWIaLvNlkqmGxrl8X1ZxELydeImQ0fF+zWLFKISOwwKQO5TTZkUi5+RUpSS/72bb9lA8IZ +eEQ4HY6wMxdusycm54f/HP08KQNv6wygHpu2adU6v5d3qQCWcjDh1+wI+z/k1rlV5pbqNwAA//8bwMuB ngEAAA== `, }, @@ -302,29 +505,45 @@ ngEAAA== "/image-manifest-schema.json": { local: "image-manifest-schema.json", size: 921, - modtime: 1485389045, + modtime: 1485467966, compressed: ` -H4sIAAAJbogA/5ySMU/rMBSF9/yKq7RjU7/39KauTB0QA4gFMZjkJrlVbQfbRVSo/51ru6Y1ZUAdc+xz -7ndP/FEB1B261tLkyeh6BfXdhPrGaC9Jo4W1kgPCrdTUo/NwP2FLPbUy3l4E+9y1IyoZrKP300qIjTO6 -SerS2EF0Vva++fNfJG2WfNRli2OP4altnuqiLd0WFAiEOhIkr99PGNzmZYPtUZssZ1hP6PgkLMZainjk -xLRcki93fhjJQU+47cClDdGBHxHicMjDIeXBWwoE6UBqIO1xQBspYvh1m4kS9ist73oxRpEmtVN89u+k -yfesRemQTmoG6Gk4b2BusQ+xAQ21b3Ijxi7D/6sL+1buGevcnqmktXJfMK09qnD176mPo5LNv53O8wsK -qbXx8eUVKNfV3WyJOz+PXHyvpsPeNdEVoWaCBe483i6cVWaNpLXF1x1ZDFhPP73D8p+UFfPHc3WoPgMA -AP//UcoRdpkDAAA= +H4sIAAAJbogA/5ySMW/bMBCFd/2KA+3RMtuik9ZOHooODbIEGRjpKJ1hkQyPDmIE/u8BSTM24wyB16d7 +77574lsDIAbk3pMLZI3oQPxzaP5YExQZ9LCZ1YjwVxnSyAH+O+xJU6/S9Cral9xPOKtonUJwnZRbtqbN +6tr6UQ5e6dD++C2ztsg+GoqFOymtQ9OXrZxseVpSJJDziSB7w8FhdNunLfYnzXnr0AdCFh3EwwBEjrhH +z/m4LF/ffDcRgybcDcD5QmQIE0JaDmU55Dx4yYGgGJQBMgFH9Ikihd92maxhP9LKrVdrZjI072fRwa+z +pl6LlqRj/iJ6azSNlw0sPeoYG9HQhLY0Yv06/j9R2XfqgJ4v7YVKea8OFdMm4BxHf577OCnF/N3tAMeK +QhljQ3p5Fcptdbc74iAvI1efqxlQc5tcCWohB9RkKE1XzqawJlLh8XlPHiPWw1fvsP4ndcUNwGNzbN4D +AAD//1HKEXaZAwAA `, }, "/manifest-list-schema.json": { local: "manifest-list-schema.json", - size: 873, - modtime: 1485389045, + size: 988, + modtime: 1485547278, + compressed: ` +H4sIAAAJbogA/6SSP2/bMBDFd32KA92xMouik9Z2KdCiQ4MsQQZGOllnmH/COwcxAn/3gKSkSLCHAF6f +eO/93p3eKgDVIbeRgpB3qgH1L6D76Z0YchjhtzU7hL/GUY8s8IdY4H/AlnpqTR75mjy+cDugNWl+EAmN +1nv2ri7q1sed7qLppf72QxdtU+aom0a40doHdO0UzXmsvNaUMLQdMeoDsRQDOQVMFv5pj+2ohegDRiFk +1UCqCKCKzz1GLjWLfNn+biCGnvDQAZeayCADQiaAFQEUU3gprmAYjANygjuMGSUn3NBRr7Fny6n1RZYl +R/ZoVQPfPzTzOmlZOpcvakri5TomZxOjOS06CNrlu3TyiH162WHPdWbfpptvdIc9OUoL5bnNr3HLPqrR +4bxiwQNadLeipL2ik7qb0zLS9UjjnJf8C69Sb7nW0nLm/dSelpPVxJpJVcTnI0VMWA/X/uWLa1YAj9W5 +eg8AAP//7F2XUNwDAAA= +`, + }, + + "/manifest-list-schema.json~": { + local: "manifest-list-schema.json~", + size: 1011, + modtime: 1485533214, compressed: ` -H4sIAAAJbogA/6SSv0/7MBDF9/wVp/Q7flMjxNQVFiQQA4gFMZjk0lzV2OHORVSo/zv+EZdEZUDqUqnP -fu8+7+KvAqBsUGqmwZE15QrKhwHNtTVOk0GG216vEe61oRbFwR35n8cBa2qp1tHyP2T8k7rDXgd/59yw -Umoj1lRJXVpeq4Z166qLK5W0RfJRky3iPdaPrvNoibZ0W1HAUP2IUW09Rgpw+wFDhH3bYD1qA/sgdoTi -T0JFr6WcZx+baib5tP1TRwIt4bYBSTVRwHUIkQBmBJBC4SOlghbQBsg4XCNHlDjhjI5qjn2MzK1PZvVk -qN/1/uzyR9OfWYvSIZ2UeZJM15GTNbPeTzo47Kf3widnbMPNBlupIvsyfPOF8oKnCAuVY5ubccuWyzHh -MGPRxlgX39OM5pzVTSOPPf4EPXUWmTWSlozvO2IMWC+/PayT1fr/r8Wh+A4AAP//b2/SMmkDAAA= +H4sIAAAJbogA/7SSz07zMBDE73mKlfsdv9QIccoVLkggDiAuiINJNs1W9R+8LqJCfXdkOy6JigRSxXXi +mf3Nbj4qANEht55cIGtEA+LOobm0Jigy6OFaqxXCrTLUIwe4IQ5w77ClnlqVLP9jxj9uB9Qq+ocQXCPl +mq2ps7q0fiU7r/pQn13IrC2yj7pi4UZK69C0ZTQnW34tKWJIPWLUG+KQA8LOYYywL2tsR81569AHQhYN +xIoAIuc8oudcM8vH7R8GYugJNx1wrokMYUBIBDAjgBwKbzkVFIMyQCbgCn1CSRNO6Cjn2IfI0vpoliZD +eqtFA+dfmnovWpL2+Ysok3i6jpKsvFe7SYeAevountxjH1922HOd2Jfx5gvZYU+G4kL50OZq3LL1YkzY +z1hwgxrNn6KMI34iUcbYkP7sGcwpR5xGHmr8innqrAprIhUeX7fkMWI9ffeLHx25Aniu9tVnAAAA//+b +GIGn8wMAAA== `, }, diff --git a/schema/manifest-list-schema.json b/schema/manifest-list-schema.json index 5887682c7..ac6fc0f42 100644 --- a/schema/manifest-list-schema.json +++ b/schema/manifest-list-schema.json @@ -17,6 +17,12 @@ "$ref": "defs-image.json#/definitions/manifestDescriptor" } }, + "elements": { + "type": "array", + "items": { + "$ref": "content-descriptor.json" + } + }, "annotations": { "id": "https://opencontainers.org/schema/image/manifest-list/annotations", "$ref": "defs-image.json#/definitions/annotations" diff --git a/schema/spec_test.go b/schema/spec_test.go index 2a6f4a493..d9222f39e 100644 --- a/schema/spec_test.go +++ b/schema/spec_test.go @@ -45,6 +45,10 @@ func TestValidateManifestList(t *testing.T) { validate(t, "../manifest-list.md") } +func TestValidateImageLayout(t *testing.T) { + validate(t, "../image-layout.md") +} + func TestValidateConfig(t *testing.T) { validate(t, "../config.md") }