{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "logo": {
            "type": "string"
        },
        "key": {
            "type": "string"
        },
        "label": {
            "type": "string"
        },
        "maintainer": {
            "type": "string"
        },
        "image": {
            "type": "object",
            "properties": {
                "registry": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "name",
                "tags"
            ]
        },
        "display": {
            "type": "string"
        },
        "access": {
            "type": "string"
        },
        "description": {
            "type": "string"
        },
        "depends": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "object",
                "properties": {
                    "key": {
                        "type": "string"
                    },
                    "required": {
                        "type": "boolean"
                    },
                    "useFrom": {
                        "type": "string"
                    }
                },
                "required": [
                    "key",
                    "required"
                ]
            }
        },
        "config": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "value": {
                        "type": "string"
                    },
                    "label": {
                        "type": "string"
                    },
                    "canOverride": {
                        "type": "boolean"
                    },
                    "isPassword": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "name",
                    "value"
                ]
            }
        },
        "command": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "string"
            }
        },
        "args": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "string"
            }
        },
        "ports": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "object",
                "properties": {
                    "port": {
                        "type": "integer"
                    },
                    "protocol": {
                        "type": "string"
                    }
                },
                "required": [
                    "port",
                    "protocol"
                ]
            }
        },
        "repositories": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    }
                },
                "required": [
                    "url",
                    "type"
                ]
            }
        },
        "developerEnvironment": {
            "type": "string"
        },
        "volumeMounts": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "object",
                "properties": {
                    "type": {
                        "type": "string"
                    },
                    "mountPath": {
                        "type": "string"
                    }
                },
                "required": [
                    "mountPath"
                ]
            }
        },
        "readinessProbe": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "port": {
                    "type": "integer"
                },
                "initialDelay": {
                    "type": "integer"
                },
                "timeout": {
                    "type": "integer"
                }
            },
            "required": [
                "type",
                "path",
                "port",
                "initialDelay",
                "timeout"
            ]
        },
        "resourceLimits": {
            "type": "object",
            "properties": {
                "cpuMax": {
                    "type": "integer"
                },
                "cpuDefault": {
                    "type": "integer"
                },
                "memMax": {
                    "type": "integer"
                },
                "memDefault": {
                    "type": "integer"
                }
            },
            "required": [
                "cpuMax",
                "cpuDefault",
                "memMax",
                "memDefault"
            ]
        },
        "tags": {
            "type": [
                "array",
                "null"
            ],
            "items": {
                "type": "string"
            }
        }
    },
    "required": [
        "key",
        "label",
        "image",
        "description",
        "resourceLimits"
    ]
}