From 649ea391a4e06316eacb089f6dc3ec75ffa0f825 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Tue, 6 Sep 2016 16:19:52 +0200 Subject: [PATCH] vendor containers/image and OCI/image-spec Signed-off-by: Antonio Murdaca --- hack/vendor.sh | 1 + .../containers/image/manifest/manifest.go | 16 +- .../containers/image/oci/oci_dest.go | 34 +--- .../opencontainers/image-spec/LICENSE | 191 ++++++++++++++++++ .../image-spec/specs-go/descriptor.go | 27 +++ .../image-spec/specs-go/v1/config.go | 99 +++++++++ .../image-spec/specs-go/v1/manifest.go | 32 +++ .../image-spec/specs-go/v1/manifest_list.go | 62 ++++++ .../image-spec/specs-go/v1/mediatype.go | 32 +++ .../image-spec/specs-go/version.go | 32 +++ .../image-spec/specs-go/versioned.go | 26 +++ 11 files changed, 516 insertions(+), 36 deletions(-) create mode 100644 vendor/github.com/opencontainers/image-spec/LICENSE create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/descriptor.go create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest_list.go create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/version.go create mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/versioned.go diff --git a/hack/vendor.sh b/hack/vendor.sh index afba1357..3df9b023 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -24,6 +24,7 @@ clone git golang.org/x/net master https://github.com/golang/net.git clone git github.com/docker/distribution master clone git github.com/docker/libtrust master clone git github.com/opencontainers/runc master +clone git github.com/opencontainers/image-spec master clone git github.com/mtrmac/gpgme master # openshift/origin' k8s dependencies as of OpenShift v1.1.5 clone git github.com/golang/glog 44145f04b68cf362d9c4df2182967c2275eaefed diff --git a/vendor/github.com/containers/image/manifest/manifest.go b/vendor/github.com/containers/image/manifest/manifest.go index f56290a4..c33acba4 100644 --- a/vendor/github.com/containers/image/manifest/manifest.go +++ b/vendor/github.com/containers/image/manifest/manifest.go @@ -6,6 +6,7 @@ import ( "encoding/json" "github.com/docker/libtrust" + imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" ) // FIXME: Should we just use docker/distribution and docker/docker implementations directly? @@ -20,23 +21,12 @@ const ( DockerV2Schema2MIMEType = "application/vnd.docker.distribution.manifest.v2+json" // DockerV2ListMIMEType MIME type represents Docker manifest schema 2 list DockerV2ListMIMEType = "application/vnd.docker.distribution.manifest.list.v2+json" - - // OCIV1DescriptorMIMEType specifies the mediaType for a content descriptor. - OCIV1DescriptorMIMEType = "application/vnd.oci.descriptor.v1+json" - // OCIV1ImageManifestMIMEType specifies the mediaType for an image manifest. - OCIV1ImageManifestMIMEType = "application/vnd.oci.image.manifest.v1+json" - // OCIV1ImageManifestListMIMEType specifies the mediaType for an image manifest list. - OCIV1ImageManifestListMIMEType = "application/vnd.oci.image.manifest.list.v1+json" - // OCIV1ImageSerializationMIMEType is the mediaType used for layers referenced by the manifest. - OCIV1ImageSerializationMIMEType = "application/vnd.oci.image.layer.tar+gzip" - // OCIV1ImageSerializationConfigMIMEType specifies the mediaType for the image configuration. - OCIV1ImageSerializationConfigMIMEType = "application/vnd.oci.image.config.v1+json" ) // DefaultRequestedManifestMIMETypes is a list of MIME types a types.ImageSource // should request from the backend unless directed otherwise. var DefaultRequestedManifestMIMETypes = []string{ - OCIV1ImageManifestMIMEType, + imgspecv1.MediaTypeImageManifest, DockerV2Schema2MIMEType, DockerV2Schema1SignedMIMEType, DockerV2Schema1MIMEType, @@ -58,7 +48,7 @@ func GuessMIMEType(manifest []byte) string { } switch meta.MediaType { - case DockerV2Schema2MIMEType, DockerV2ListMIMEType, OCIV1DescriptorMIMEType, OCIV1ImageManifestMIMEType, OCIV1ImageManifestListMIMEType: // A recognized type. + case DockerV2Schema2MIMEType, DockerV2ListMIMEType, imgspecv1.MediaTypeImageManifest, imgspecv1.MediaTypeImageManifestList: // A recognized type. return meta.MediaType } // this is the only way the function can return DockerV2Schema1MIMEType, and recognizing that is essential for stripping the JWS signatures = computing the correct manifest digest. diff --git a/vendor/github.com/containers/image/oci/oci_dest.go b/vendor/github.com/containers/image/oci/oci_dest.go index 6222061e..40e2ec25 100644 --- a/vendor/github.com/containers/image/oci/oci_dest.go +++ b/vendor/github.com/containers/image/oci/oci_dest.go @@ -10,22 +10,10 @@ import ( "github.com/containers/image/manifest" "github.com/containers/image/types" + imgspec "github.com/opencontainers/image-spec/specs-go" + imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" ) -type ociManifest struct { - SchemaVersion int `json:"schemaVersion"` - MediaType string `json:"mediaType"` - Config descriptor `json:"config"` - Layers []descriptor `json:"layers"` - Annotations map[string]string `json:"annotations"` -} - -type descriptor struct { - Digest string `json:"digest"` - MediaType string `json:"mediaType"` - Size int64 `json:"size"` -} - type ociImageDestination struct { ref ociReference } @@ -91,7 +79,7 @@ func (d *ociImageDestination) PutBlob(digest string, expectedSize int64, stream } func createManifest(m []byte) ([]byte, string, error) { - om := ociManifest{} + om := imgspecv1.Manifest{} mt := manifest.GuessMIMEType(m) switch mt { case manifest.DockerV2Schema1MIMEType: @@ -104,11 +92,11 @@ func createManifest(m []byte) ([]byte, string, error) { if err := json.Unmarshal(m, &om); err != nil { return nil, "", err } - om.MediaType = manifest.OCIV1ImageManifestMIMEType + om.MediaType = imgspecv1.MediaTypeImageManifest for i := range om.Layers { - om.Layers[i].MediaType = manifest.OCIV1ImageSerializationMIMEType + om.Layers[i].MediaType = imgspecv1.MediaTypeImageSerialization } - om.Config.MediaType = manifest.OCIV1ImageSerializationConfigMIMEType + om.Config.MediaType = imgspecv1.MediaTypeImageSerializationConfig b, err := json.Marshal(om) if err != nil { return nil, "", err @@ -116,10 +104,10 @@ func createManifest(m []byte) ([]byte, string, error) { return b, om.MediaType, nil case manifest.DockerV2ListMIMEType: return nil, "", fmt.Errorf("can't create OCI manifest from Docker V2 schema 2 manifest list") - case manifest.OCIV1ImageManifestListMIMEType: + case imgspecv1.MediaTypeImageManifestList: return nil, "", fmt.Errorf("can't create OCI manifest from OCI manifest list") - case manifest.OCIV1ImageManifestMIMEType: - return m, om.MediaType, nil + case imgspecv1.MediaTypeImageManifest: + return m, mt, nil } return nil, "", fmt.Errorf("Unrecognized manifest media type") } @@ -135,7 +123,7 @@ func (d *ociImageDestination) PutManifest(m []byte) error { if err != nil { return err } - desc := descriptor{} + desc := imgspec.Descriptor{} desc.Digest = digest // TODO(runcom): beaware and add support for OCI manifest list desc.MediaType = mt @@ -176,7 +164,7 @@ func ensureParentDirectoryExists(path string) error { func (d *ociImageDestination) SupportedManifestMIMETypes() []string { return []string{ - manifest.OCIV1ImageManifestMIMEType, + imgspecv1.MediaTypeImageManifest, manifest.DockerV2Schema2MIMEType, } } diff --git a/vendor/github.com/opencontainers/image-spec/LICENSE b/vendor/github.com/opencontainers/image-spec/LICENSE new file mode 100644 index 00000000..9fdc20fd --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/LICENSE @@ -0,0 +1,191 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2016 The Linux Foundation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/descriptor.go b/vendor/github.com/opencontainers/image-spec/specs-go/descriptor.go new file mode 100644 index 00000000..7a206559 --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/descriptor.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package specs + +// Descriptor describes the disposition of targeted content. +type Descriptor struct { + // MediaType contains the MIME type of the referenced object. + MediaType string `json:"mediaType"` + + // Digest is the digest of the targeted content. + Digest string `json:"digest"` + + // Size specifies the size in bytes of the blob. + Size int64 `json:"size"` +} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go new file mode 100644 index 00000000..1a677074 --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go @@ -0,0 +1,99 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +// ImageConfig defines the execution parameters which should be used as a base when running a container using an image. +type ImageConfig struct { + // User defines the username or UID which the process in the container should run as. + User string `json:"User"` + + // Memory defines the memory limit. + Memory int64 `json:"Memory"` + + // MemorySwap defines the total memory usage limit (memory + swap). + MemorySwap int64 `json:"MemorySwap"` + + // CPUShares is the CPU shares (relative weight vs. other containers). + CPUShares int64 `json:"CpuShares"` + + // ExposedPorts a set of ports to expose from a container running this image. + ExposedPorts map[string]struct{} `json:"ExposedPorts"` + + // Env is a list of environment variables to be used in a container. + Env []string `json:"Env"` + + // Entrypoint defines a list of arguments to use as the command to execute when the container starts. + EntryPoint []string `json:"EntryPoint"` + + // Cmd defines the default arguments to the entrypoint of the container. + Cmd []string `json:"Cmd"` + + // Volumes is a set of directories which should be created as data volumes in a container running this image. + Volumes map[string]struct{} `json:"Volumes"` + + // WorkingDir sets the current working directory of the entrypoint process in the container. + WorkingDir string `json:"WorkingDir"` +} + +// RootFS describes a layer content addresses +type RootFS struct { + // Type is the type of the rootfs. + Type string `json:"type"` + + // DiffIDs is an array of layer content hashes (DiffIDs), in order from bottom-most to top-most. + DiffIDs []string `json:"diff_ids"` +} + +// History describes the history of a layer. +type History struct { + // Created is the creation time. + Created string `json:"created"` + + // CreatedBy is the command which created the layer. + CreatedBy string `json:"created_by"` + + // Author is the author of the build point. + Author string `json:"author"` + + // Comment is a custom message set when creating the layer. + Comment string `json:"comment"` + + // EmptyLayer is used to mark if the history item created a filesystem diff. + EmptyLayer bool `json:"empty_layer"` +} + +// Image is the JSON structure which describes some basic information about the image. +type Image struct { + // Created defines an ISO-8601 formatted combined date and time at which the image was created. + Created string `json:"created"` + + // Author defines the name and/or email address of the person or entity which created and is responsible for maintaining the image. + Author string `json:"author"` + + // Architecture is the CPU architecture which the binaries in this image are built to run on. + Architecture string `json:"architecture"` + + // OS is the name of the operating system which the image is built to run on. + OS string `json:"os"` + + // Config defines the execution parameters which should be used as a base when running a container using the image. + Config ImageConfig `json:"config"` + + // RootFS references the layer content addresses used by the image. + RootFS RootFS `json:"rootfs"` + + // History describes the history of each layer. + History []History `json:"history"` +} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go new file mode 100644 index 00000000..10bde087 --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go @@ -0,0 +1,32 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +import "github.com/opencontainers/image-spec/specs-go" + +// Manifest defines a schema2 manifest +type Manifest struct { + specs.Versioned + + // Config references a configuration object for a container, by digest. + // The referenced configuration object is a JSON blob that the runtime uses to set up the container. + Config specs.Descriptor `json:"config"` + + // Layers is an indexed list of layers referenced by the manifest. + Layers []specs.Descriptor `json:"layers"` + + // Annotations contains arbitrary metadata for the manifest list. + Annotations map[string]string `json:"annotations"` +} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest_list.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest_list.go new file mode 100644 index 00000000..8c02ee28 --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest_list.go @@ -0,0 +1,62 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +import "github.com/opencontainers/image-spec/specs-go" + +// Platform describes the platform which the image in the manifest runs on. +type Platform struct { + // Architecture field specifies the CPU architecture, for example + // `amd64` or `ppc64`. + Architecture string `json:"architecture"` + + // OS specifies the operating system, for example `linux` or `windows`. + OS string `json:"os"` + + // OSVersion is an optional field specifying the operating system + // version, for example `10.0.10586`. + OSVersion string `json:"os.version,omitempty"` + + // OSFeatures is an optional field specifying an array of strings, + // each listing a required OS feature (for example on Windows `win32k`). + OSFeatures []string `json:"os.features,omitempty"` + + // Variant is an optional field specifying a variant of the CPU, for + // example `ppc64le` to specify a little-endian version of a PowerPC CPU. + Variant string `json:"variant,omitempty"` + + // Features is an optional field specifying an array of strings, each + // listing a required CPU feature (for example `sse4` or `aes`). + Features []string `json:"features,omitempty"` +} + +// ManifestDescriptor describes a platform specific manifest. +type ManifestDescriptor struct { + specs.Descriptor + + // Platform describes the platform which the image in the manifest runs on. + Platform Platform `json:"platform"` +} + +// ManifestList references manifests for various platforms. +type ManifestList struct { + specs.Versioned + + // Manifests references platform specific manifests. + Manifests []ManifestDescriptor `json:"manifests"` + + // Annotations contains arbitrary metadata for the manifest list. + Annotations map[string]string `json:"annotations"` +} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go new file mode 100644 index 00000000..80971d0e --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go @@ -0,0 +1,32 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +const ( + // MediaTypeDescriptor specifies the mediaType for a content descriptor. + MediaTypeDescriptor = "application/vnd.oci.descriptor.v1+json" + + // MediaTypeImageManifest specifies the mediaType for an image manifest. + MediaTypeImageManifest = "application/vnd.oci.image.manifest.v1+json" + + // MediaTypeImageManifestList specifies the mediaType for an image manifest list. + MediaTypeImageManifestList = "application/vnd.oci.image.manifest.list.v1+json" + + // MediaTypeImageSerialization is the mediaType used for layers referenced by the manifest. + MediaTypeImageSerialization = "application/vnd.oci.image.layer.tar+gzip" + + // MediaTypeImageSerializationConfig specifies the mediaType for the image configuration. + MediaTypeImageSerializationConfig = "application/vnd.oci.image.config.v1+json" +) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/version.go b/vendor/github.com/opencontainers/image-spec/specs-go/version.go new file mode 100644 index 00000000..77704299 --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/version.go @@ -0,0 +1,32 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package specs + +import "fmt" + +const ( + // VersionMajor is for an API incompatible changes + VersionMajor = 0 + // VersionMinor is for functionality in a backwards-compatible manner + VersionMinor = 3 + // VersionPatch is for backwards-compatible bug fixes + VersionPatch = 0 + + // VersionDev indicates development branch. Releases will be empty string. + VersionDev = "-dev" +) + +// Version is the specification version that the package types support. +var Version = fmt.Sprintf("%d.%d.%d%s", VersionMajor, VersionMinor, VersionPatch, VersionDev) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go b/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go new file mode 100644 index 00000000..ca0bd412 --- /dev/null +++ b/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go @@ -0,0 +1,26 @@ +// Copyright 2016 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package specs + +// Versioned provides a struct with the manifest schemaVersion and mediaType. +// Incoming content with unknown schema version can be decoded against this +// struct to check the version. +type Versioned struct { + // SchemaVersion is the image manifest schema that this image follows + SchemaVersion int `json:"schemaVersion"` + + // MediaType is the media type of this schema. + MediaType string `json:"mediaType,omitempty"` +}