{
    "$ref": "#/definitions/AssetManifest",
    "definitions": {
        "AssetManifest": {
            "description": "Definitions for the asset manifest",
            "type": "object",
            "properties": {
                "version": {
                    "description": "Version of the manifest",
                    "type": "string"
                },
                "files": {
                    "description": "The file assets in this manifest (Default - No files)",
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/FileAsset"
                    }
                },
                "dockerImages": {
                    "description": "The Docker image assets in this manifest (Default - No Docker images)",
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/DockerImageAsset"
                    }
                }
            },
            "required": [
                "version"
            ]
        },
        "FileAsset": {
            "description": "A file asset",
            "type": "object",
            "properties": {
                "displayName": {
                    "description": "A display name for this asset (Default - The identifier will be used as the display name)",
                    "type": "string"
                },
                "source": {
                    "$ref": "#/definitions/FileSource",
                    "description": "Source description for file assets"
                },
                "destinations": {
                    "description": "Destinations for this file asset",
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/FileDestination"
                    }
                }
            },
            "required": [
                "destinations",
                "source"
            ]
        },
        "FileSource": {
            "description": "Describe the source of a file asset",
            "type": "object",
            "properties": {
                "executable": {
                    "description": "External command which will produce the file asset to upload. (Default - Exactly one of `executable` and `path` is required.)",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "path": {
                    "description": "The filesystem object to upload\n\nThis path is relative to the asset manifest location. (Default - Exactly one of `executable` and `path` is required.)",
                    "type": "string"
                },
                "packaging": {
                    "description": "Packaging method\n\nOnly allowed when `path` is specified. (Default FILE)",
                    "enum": [
                        "file",
                        "zip"
                    ],
                    "type": "string"
                }
            }
        },
        "FileDestination": {
            "description": "Where in S3 a file asset needs to be published",
            "type": "object",
            "properties": {
                "bucketName": {
                    "description": "The name of the bucket",
                    "type": "string"
                },
                "objectKey": {
                    "description": "The destination object key",
                    "type": "string"
                },
                "region": {
                    "description": "The region where this asset will need to be published (Default - Current region)",
                    "type": "string"
                },
                "assumeRoleArn": {
                    "description": "The role that needs to be assumed while publishing this asset (Default - No role will be assumed)",
                    "type": "string"
                },
                "assumeRoleExternalId": {
                    "description": "The ExternalId that needs to be supplied while assuming this role (Default - No ExternalId will be supplied)",
                    "type": "string"
                },
                "assumeRoleAdditionalOptions": {
                    "description": "Additional options to pass to STS when assuming the role.\n\n- `RoleArn` should not be used. Use the dedicated `assumeRoleArn` property instead.\n- `ExternalId` should not be used. Use the dedicated `assumeRoleExternalId` instead. (Default - No additional options.)",
                    "type": "object",
                    "additionalProperties": {}
                }
            },
            "required": [
                "bucketName",
                "objectKey"
            ]
        },
        "DockerImageAsset": {
            "description": "A file asset",
            "type": "object",
            "properties": {
                "displayName": {
                    "description": "A display name for this asset (Default - The identifier will be used as the display name)",
                    "type": "string"
                },
                "source": {
                    "$ref": "#/definitions/DockerImageSource",
                    "description": "Source description for container assets"
                },
                "destinations": {
                    "description": "Destinations for this container asset",
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/DockerImageDestination"
                    }
                }
            },
            "required": [
                "destinations",
                "source"
            ]
        },
        "DockerImageSource": {
            "description": "Properties for how to produce a Docker image from a source",
            "type": "object",
            "properties": {
                "directory": {
                    "description": "The directory containing the Docker image build instructions.\n\nThis path is relative to the asset manifest location. (Default - Exactly one of `directory` and `executable` is required)",
                    "type": "string"
                },
                "executable": {
                    "description": "A command-line executable that returns the name of a local\nDocker image on stdout after being run. (Default - Exactly one of `directory` and `executable` is required)",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "dockerFile": {
                    "description": "The name of the file with build instructions\n\nOnly allowed when `directory` is set. (Default Dockerfile)",
                    "type": "string"
                },
                "dockerBuildTarget": {
                    "description": "Target build stage in a Dockerfile with multiple build stages\n\nOnly allowed when `directory` is set. (Default - The last stage in the Dockerfile)",
                    "type": "string"
                },
                "dockerBuildArgs": {
                    "description": "Additional build arguments\n\nOnly allowed when `directory` is set. (Default - No additional build arguments)",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "dockerBuildContexts": {
                    "description": "Additional build contexts\n\nOnly allowed when `directory` is set. (Default - No additional build contexts)",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "dockerBuildSsh": {
                    "description": "SSH agent socket or keys\n\nRequires building with docker buildkit. (Default - No ssh flag is set)",
                    "type": "string"
                },
                "dockerBuildSecrets": {
                    "description": "Additional build secrets\n\nOnly allowed when `directory` is set. (Default - No additional build secrets)",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "networkMode": {
                    "description": "Networking mode for the RUN commands during build. _Requires Docker Engine API v1.25+_.\n\nSpecify this property to build images on a specific networking mode. (Default - no networking mode specified)",
                    "type": "string"
                },
                "platform": {
                    "description": "Platform to build for. _Requires Docker Buildx_.\n\nSpecify this property to build images on a specific platform/architecture. (Default - current machine platform)",
                    "type": "string"
                },
                "dockerOutputs": {
                    "description": "Outputs (Default - no outputs are passed to the build command (default outputs are used))",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "cacheFrom": {
                    "description": "Cache from options to pass to the `docker build` command. (Default - no cache from options are passed to the build command)",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/DockerCacheOption"
                    }
                },
                "cacheTo": {
                    "description": "Cache to options to pass to the `docker build` command. (Default - no cache to options are passed to the build command)",
                    "$ref": "#/definitions/DockerCacheOption"
                },
                "cacheDisabled": {
                    "description": "Disable the cache and pass `--no-cache` to the `docker build` command. (Default - cache is used)",
                    "type": "boolean"
                }
            }
        },
        "DockerCacheOption": {
            "description": "Options for configuring the Docker cache backend",
            "type": "object",
            "properties": {
                "type": {
                    "description": "The type of cache to use.\nRefer to https://docs.docker.com/build/cache/backends/ for full list of backends. (Default - unspecified)",
                    "type": "string"
                },
                "params": {
                    "description": "Any parameters to pass into the docker cache backend configuration.\nRefer to https://docs.docker.com/build/cache/backends/ for cache backend configuration. (Default {} No options provided)",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "type"
            ]
        },
        "DockerImageDestination": {
            "description": "Where to publish docker images",
            "type": "object",
            "properties": {
                "repositoryName": {
                    "description": "Name of the ECR repository to publish to",
                    "type": "string"
                },
                "imageTag": {
                    "description": "Tag of the image to publish",
                    "type": "string"
                },
                "region": {
                    "description": "The region where this asset will need to be published (Default - Current region)",
                    "type": "string"
                },
                "assumeRoleArn": {
                    "description": "The role that needs to be assumed while publishing this asset (Default - No role will be assumed)",
                    "type": "string"
                },
                "assumeRoleExternalId": {
                    "description": "The ExternalId that needs to be supplied while assuming this role (Default - No ExternalId will be supplied)",
                    "type": "string"
                },
                "assumeRoleAdditionalOptions": {
                    "description": "Additional options to pass to STS when assuming the role.\n\n- `RoleArn` should not be used. Use the dedicated `assumeRoleArn` property instead.\n- `ExternalId` should not be used. Use the dedicated `assumeRoleExternalId` instead. (Default - No additional options.)",
                    "type": "object",
                    "additionalProperties": {}
                }
            },
            "required": [
                "imageTag",
                "repositoryName"
            ]
        }
    },
    "$schema": "http://json-schema.org/draft-07/schema#"
}