{
  "$id": "https://json.schemastore.org/azure-deviceupdate-update-manifest-5.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "miniUpdateManifest": {
      "type": "object",
      "title": "Mini update manifest",
      "description": "Manifest containing metadata of the detached, downloadable, complete update manifest.",
      "properties": {
        "detachedManifestFileId": {
          "$ref": "#/definitions/fileId"
        },
        "files": {
          "type": "object",
          "title": "Update manifest file",
          "description": "Map of '#/definitions/fileId' to file metadata.",
          "additionalProperties": {
            "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/file"
          },
          "minProperties": 1,
          "maxProperties": 1
        }
      },
      "required": ["detachedManifestFileId", "files"]
    },
    "fullUpdateManifest": {
      "type": "object",
      "title": "Complete update manifest.",
      "description": "Full update manifest containing metadata of the update being deployed.",
      "properties": {
        "compatibility": {
          "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/compatibility"
        },
        "instructions": {
          "type": "object",
          "title": "Installation instructions",
          "properties": {
            "steps": {
              "type": "array",
              "title": "Installation steps",
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/inlineStep"
                  },
                  {
                    "$ref": "#/definitions/referenceStep"
                  }
                ]
              },
              "minItems": 1,
              "maxItems": 10
            }
          },
          "required": ["steps"]
        },
        "files": {
          "type": "object",
          "title": "Update files",
          "description": "Map of '#/definitions/fileId' to file metadata.",
          "additionalProperties": {
            "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/file"
          },
          "minProperties": 1,
          "maxProperties": 20
        },
        "createdDateTime": {
          "type": "string",
          "title": "Created date & time",
          "description": "Date & time update was created in ISO 8601 format.",
          "examples": ["2020-10-02T22:18:04.9446744Z"]
        }
      },
      "required": ["compatibility", "instructions", "files", "createdDateTime"]
    },
    "fileId": {
      "type": "string",
      "title": "Update file id",
      "description": "Server generated file identifier to be used for retrieving file metadata and download URL.",
      "minLength": 1
    },
    "inlineStep": {
      "type": "object",
      "title": "Inline installation step",
      "description": "Installation instruction step that performs code execution.",
      "properties": {
        "type": {
          "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/inlineStepType"
        },
        "handler": {
          "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/inlineStepHandler"
        },
        "files": {
          "type": "array",
          "title": "Step update files",
          "description": "'fileId' of update files that agent will pass to handler.",
          "items": {
            "$ref": "#/definitions/fileId"
          },
          "minItems": 1,
          "maxItems": 10
        },
        "handlerProperties": {
          "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/inlineStepHandlerProperties"
        }
      },
      "additionalProperties": false,
      "required": ["handler", "files"]
    },
    "referenceStep": {
      "type": "object",
      "title": "Reference installation step",
      "description": "Installation instruction step that installs another update.",
      "properties": {
        "type": {
          "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/referenceStepType"
        },
        "detachedManifestFileId": {
          "$ref": "#/definitions/fileId"
        }
      },
      "additionalProperties": false,
      "required": ["type", "detachedManifestFileId"]
    }
  },
  "description": "JSON schema of update manifest sent by Device Update for IoT Hub to device agent during deployment.",
  "examples": [
    {
      "manifestVersion": "4",
      "updateId": {
        "provider": "Microsoft",
        "name": "Toaster",
        "version": "1.0"
      },
      "compatibility": [
        {
          "deviceManufacturer": "Microsoft",
          "deviceModel": "Toaster"
        }
      ],
      "instructions": {
        "steps": [
          {
            "handler": "microsoft/script:1",
            "handlerProperties": {
              "arguments": "--pre-install"
            },
            "files": ["fileId0"]
          },
          {
            "type": "reference",
            "detachedManifestFileId": "fileId1"
          }
        ]
      },
      "files": {
        "fileId0": {
          "filename": "configure.sh",
          "sizeInBytes": 718,
          "hashes": {
            "sha256": "mcB5SexMU4JOOzqmlJqKbue9qMskWY3EI/iVjJxCtAs="
          },
          "relatedFiles": [
            {
              "filename": "in1_in2_deltaupdate.dat",
              "sizeInBytes": 102910752,
              "hashes": {
                "sha256": "2MIldV8LkdKenjJasgTHuYi+apgtNQ9FeL2xsV3ikHY="
              },
              "properties": {
                "microsoft.sourceFileHashAlgorithm": "sha256",
                "microsoft.sourceFileHash": "YmFYwnEUddq2nZsBAn5v7gCRKdHx+TUntMz5tLwU+24="
              }
            }
          ],
          "downloadHandler": {
            "id": "microsoft/delta:1"
          }
        },
        "fileId1": {
          "filename": "microsoft.sensor.1.0.updatemanifest.json",
          "sizeInBytes": 2048,
          "hashes": {
            "sha256": "789s9PDfX4uA9wFUubyC30BWkLFbgmpkpmz1fEdqo2U="
          }
        }
      },
      "createdDateTime": "2021-09-28T18:32:01.8404544Z"
    }
  ],
  "oneOf": [
    {
      "$ref": "#/definitions/miniUpdateManifest"
    },
    {
      "$ref": "#/definitions/fullUpdateManifest"
    }
  ],
  "properties": {
    "$schema": {
      "type": "string",
      "description": "JSON schema reference"
    },
    "updateId": {
      "$ref": "azure-deviceupdate-manifest-definitions-5.0.json#/definitions/updateId"
    },
    "manifestVersion": {
      "type": "string",
      "title": "Update manifest schema version",
      "const": "4"
    }
  },
  "required": ["updateId", "manifestVersion"],
  "title": "JSON Schema for Azure Device Update for IoT Hub 'Update Manifest' version 4.0",
  "type": "object"
}
