{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://porter.sh/schema/v1/manifest.schema.json", "title": "Porter manifest json schema", "description": "Describes the format of the Porter manifest, porter.yaml. This does not include the schema of the mixins, use the porter schema command to generate a schema document that includes all installed mixins.", "type": "object", "definitions": { "applyTo": { "description": "An optional exhaustive list of actions that apply to this item. When none are specified, all actions apply.", "type": "array", "items": { "type": "string" } }, "credential": { "description": "Credential defines a particular credential, and where it should be placed in the invocation image", "properties": { "applyTo": { "$ref": "#/definitions/applyTo" }, "description": { "description": "A user-friendly description of this credential", "type": "string" }, "env": { "description": "The environment variable name, such as MY_VALUE, into which the credential value is stored", "type": "string" }, "name": { "description": "The name of this credential", "type": "string" }, "path": { "description": "The path inside of the invocation image where credentials will be mounted", "type": "string" }, "required": { "description": "Indicates whether this credential must be supplied. By default, credentials are optional.", "type": "boolean" } }, "required": [ "name" ], "type": "object" }, "output": { "description": "A value that is produced by running an invocation image", "allOf": [ { "$ref": "https://porter.sh/schema/json-schema.json" }, { "properties": { "applyTo": { "$ref": "#/definitions/applyTo" }, "description": { "description": "A user-friendly description of this output", "type": "string" }, "name": { "description": "The name of this output", "type": "string" }, "sensitive": { "description": "Indicates whether this output's value is sensitive and should not be logged.", "type": "boolean" }, "path": { "description": "The path to the location of the output", "type": "string" } }, "required": [ "name" ], "type": "object" } ] }, "parameter": { "description": "A parameter that can be passed into the invocation image", "allOf": [ { "$ref": "https://porter.sh/schema/json-schema.json" }, { "properties": { "applyTo": { "$ref": "#/definitions/applyTo" }, "description": { "description": "A user-friendly description of this parameter", "type": "string" }, "env": { "description": "The environment variable name, such as MY_VALUE, in which the parameter value is stored", "type": "string" }, "path": { "description": "The path inside of the invocation image where parameter data is mounted", "type": "string" }, "name": { "description": "The name of this parameter", "type": "string" }, "sensitive": { "description": "Indicates whether this parameter's value is sensitive and should not be logged.", "type": "boolean" }, "source": { "description": "Indicates that the parameter should get its value from an external source.", "type": "object", "properties": { "dependency": { "description": "The name of the dependency that generated the output. If not set, the output must be generated by the current bundle.", "type": "string", "minLength": 1 }, "output": { "description": "An output name. The parameter's value is set to output's last value.", "type": "string", "minLength": 1 } }, "required": [ "output" ], "additionalProperties": false } }, "required": [ "name" ], "type": "object" } ] }, "stateVar": { "description": "A state variable that is generated by the bundle and injected on subsequent runs.", "properties": { "description": { "description": "Description of how the variable is used by the bundle.", "type": "string" }, "path": { "description": "The path inside of the invocation image where the state variable data is mounted", "type": "string" }, "name": { "description": "The name of this state variable", "type": "string" }, "mixin": { "description": "The name of the mixin that generates and manages this state variable", "type": "string" } }, "required": [ "name", "path" ], "type": "object" }, "dependency": { "additionalProperties": false, "properties": { "name": { "type": "string" }, "bundle": { "$ref": "#/definitions/bundle" }, "parameters": { "description": "Map of parameter names to a parameter source, such as bundle.parameters.PARAM, bundle.dependencies.DEP.outputs.OUTPUT, or bundle.credentials.CRED", "type": "object", "additionalProperties": { "type": "string" } } }, "required": [ "name", "bundle" ], "type": "object" }, "bundle": { "description": "The definition of a bundle reference", "properties": { "reference": { "description": "The full bundle reference for the dependency in the format REGISTRY/NAME:TAG", "type": "string" }, "version": { "description": "Bundle version constraint for version matching, see https://github.com/Masterminds/semver/blob/master/README.md#checking-version-constraints", "type": "string" } }, "required": [ "reference" ], "type": "object" }, "customAction": { "type": "object", "properties": { "description": { "type": "string", "description": "A description of the custom action" }, "modifies": { "type": "boolean", "description": "Specifies that the action will modify resources in any way." }, "stateless": { "type": "boolean", "description": "Specifies that the action does not act on a claim, and does not require credentials." } }, "additionalProperties": false }, "image": { "description": "An image represents an application image used in a bundle", "type": "object", "properties": { "description": { "description": "A user-friendly description of this image", "type": "string" }, "imageType": { "description": "The type of this image, i.e. docker", "type": "string" }, "repository": { "description": "The repository portion of the image reference, i.e. deislabs/coolapp", "type": "string" }, "digest": { "description": "The content digest of the image, i.e. sha256:cafebabe...", "type": "string" }, "size": { "description": "The size of the image", "type": "integer" }, "mediaType": { "description": "The media type of the image", "type": "string" }, "tag": { "description": "The tag the image", "type": "string" }, "labels": { "description": "Key/value pairs that used to specify identifying attributes of images", "type": "object", "additionalProperties": { "type": "string" } } }, "required": [ "repository" ], "additionalProperties": false }, "maintainer": { "additionalProperties": false, "description": "Bundle Maintainer", "properties": { "email": { "description": "Email of the maintainer", "type": "string" }, "name": { "description": "Name of the maintainer", "type": "string" }, "url": { "description": "Url of the maintainer", "type": "string" } }, "type": "object" } }, "properties": { "schemaType": { "description": "The resource type of the current document.", "type": "string", "default": "Bundle" }, "schemaVersion": { "description": "The version of the schema used in this file", "type": "string", "default": "1.0.1" }, "credentials": { "type": "array", "items": { "$ref": "#/definitions/credential" }, "description": "Credentials to be injected into the invocation image" }, "description": { "type": "string", "description": "A description of the bundle" }, "install": { "type": "array", "items": { "anyOf": [] } }, "reference": { "description": "The full reference to use when the bundle is published to an OCI registry", "type": "string" }, "registry": { "description": "The OCI registry to use when the bundle is published", "type": "string" }, "mixins": { "type": "array", "items": { "oneOf": [ { "description": "Declare a mixin without configuration", "type": "string", "enum": [] } ] } }, "name": { "type": "string", "description": "The name of the bundle" }, "outputs": { "type": "array", "items": { "$ref": "#/definitions/output" }, "description": "Values that are produced by executing the invocation image" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter" }, "description": "Parameters that can be injected into the invocation image" }, "state": { "description": "State variables that are generated by the bundle and injected on subsequent runs.", "type": "array", "items": { "$ref": "#/definitions/stateVar" } }, "dependencies": { "additionalProperties": false, "description": "Dependent bundles that must be executed with the bundle", "properties": { "requires": { "description": "Required dependent bundles", "items": { "$ref": "#/definitions/dependency" }, "type": "array" } }, "required": [ "requires" ], "type": "object" }, "required": { "description": "Required extensions for this bundle", "type": "array", "items": [ { "type": [ "string", "object" ], "properties": { "docker": { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "privileged": { "description": "Option to set the --privileged flag when running the Docker container", "type": "boolean" } }, "additionalProperties": false } } } ], "uniqueItems": true, "additionalItems": true }, "uninstall": { "type": "array", "items": { "anyOf": [] } }, "upgrade": { "type": "array", "items": { "anyOf": [] } }, "version": { "type": "string", "description": "The version of the bundle, uses semver" }, "dockerfile": { "type": "string", "description": "The relative path to a Dockerfile to use as a template during porter build" }, "customActions": { "type": "object", "additionalProperties": { "$ref": "#/definitions/customAction" } }, "images": { "type": "object", "additionalProperties": { "$ref": "#/definitions/image" } }, "custom": { "description": "Custom bundle metadata", "type": "object", "additionalProperties": true }, "maintainers": { "description": "Bundle maintainers", "items": { "$ref": "#/definitions/maintainer" }, "type": "array" } }, "additionalProperties": { "type": "array", "items": { "anyOf": [] } }, "required": [ "schemaVersion", "name", "mixins", "install", "upgrade", "uninstall" ] }