{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://deployer.org/schema.json#",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "version": {
      "type": "string"
    },
    "import": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "config": {
      "type": "object"
    },
    "hosts": {
      "type": "object",
      "patternProperties": {
        "^": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "local": {
                  "type": "boolean"
                }
              }
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "tasks": {
      "type": "object",
      "patternProperties": {
        "^": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "cd": {
                    "type": "string"
                  },
                  "run": {
                    "type": "string"
                  },
                  "run_locally": {
                    "type": "string"
                  },
                  "upload": {
                    "type": "object",
                    "required": [
                      "src",
                      "dest"
                    ],
                    "properties": {
                      "src": {
                        "oneOf": [
                          {
                          "type": "string"
                          },
                          {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        ]
                      },
                      "dest": {
                        "type": "string"
                      }
                    }
                  },
                  "download": {
                    "type": "object",
                    "required": [
                      "src",
                      "dest"
                    ],
                    "properties": {
                      "src": {
                        "type": "string"
                      },
                      "dest": {
                        "type": "string"
                      }
                    }
                  },
                  "desc": {
                    "type": "string"
                  },
                  "once": {
                    "type": "boolean"
                  },
                  "hidden": {
                    "type": "boolean"
                  },
                  "limit": {
                    "type": "number"
                  },
                  "select": {
                    "type": "string"
                  }
                }
              }
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      }
    },
    "before": {
      "type": "object"
    },
    "after": {
      "type": "object"
    }
  }
}
