{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/Abdess/retrobios/schemas/install-manifest.schema.json", "title": "RetroBIOS installer manifest", "type": "object", "additionalProperties": false, "required": [ "manifest_version", "source", "regions", "platform", "display_name", "version", "generated", "base_destination", "detect", "standalone_copies", "total_files", "total_size", "total_omitted", "omitted_files", "files" ], "properties": { "manifest_version": { "const": 2 }, "source": { "enum": [ "full", "platform", "truth" ] }, "regions": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "target": { "type": "string", "minLength": 1, "description": "Hardware target this manifest was filtered for; absent when unfiltered" }, "platform": { "type": "string", "minLength": 1 }, "display_name": { "type": "string", "minLength": 1 }, "version": { "type": "string" }, "generated": { "type": "string", "format": "date-time" }, "base_destination": { "type": "string" }, "detect": { "type": "array", "items": { "type": "object" } }, "standalone_copies": { "type": "array", "items": { "type": "object" } }, "total_files": { "type": "integer", "minimum": 0 }, "total_size": { "type": "integer", "minimum": 0 }, "pack_files": { "description": "Files the platform's pack holds once extracted: this list, the data directories and the pack's own documents.", "type": "integer", "minimum": 0 }, "pack_size": { "description": "Bytes those files occupy once extracted.", "type": "integer", "minimum": 0 }, "total_omitted": { "type": "integer", "minimum": 0 }, "omitted_files": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "dest", "name", "system", "required", "reason", "cores" ], "properties": { "dest": { "type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+$" }, "name": { "type": "string", "minLength": 1 }, "system": { "type": "string" }, "required": { "type": "boolean" }, "reason": { "enum": [ "hash_mismatch", "not_found", "external", "user_provided", "no_platform_slug" ] }, "cores": { "oneOf": [ { "type": "null" }, { "type": "array", "items": { "type": "string" }, "uniqueItems": true } ] }, "regions": { "description": "The regions the emulator code selects the file for. Absent when it never competes.", "type": "array", "items": { "type": "string", "enum": [ "argentina", "asia", "asia-ntsc", "asia-pal", "australia", "brazil", "canada", "china", "denmark", "europe", "finland", "france", "germany", "greece", "hong-kong", "india", "italy", "japan", "latin-america", "mexico", "netherlands", "new-zealand", "north-america", "norway", "oceania", "poland", "portugal", "russia", "singapore", "south-korea", "spain", "sweden", "taiwan", "uk", "world" ] }, "minItems": 1, "maxItems": 1000, "uniqueItems": true }, "region_groups": { "description": "Groups the file competes in as a core extra, whatever systems are chosen.", "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 256 }, "minItems": 1, "maxItems": 1000, "uniqueItems": true }, "region_system_groups": { "description": "Groups the file competes in as the platform's own declaration: present only when that system is kept.", "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 256 }, "minItems": 1, "maxItems": 1000, "uniqueItems": true }, "systems": { "description": "Every platform system that declares the file, for the installer's --system.", "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 256 }, "minItems": 1, "maxItems": 1000, "uniqueItems": true } } } }, "files": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "dest", "sha1", "sha256", "size", "repo_path", "cores" ], "properties": { "dest": { "type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+$" }, "sha1": { "type": "string", "pattern": "^[a-f0-9]{40}$" }, "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "size": { "type": "integer", "minimum": 0 }, "repo_path": { "type": "string" }, "cores": { "oneOf": [ { "type": "null" }, { "type": "array", "items": { "type": "string" }, "uniqueItems": true } ] }, "storage": { "const": "release" }, "release_asset": { "type": "string", "pattern": "^[^/\\\\]+$" }, "systems": { "description": "Every platform system that declares the file, for the installer's --system.", "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 256 }, "minItems": 1, "maxItems": 1000, "uniqueItems": true }, "regions": { "description": "The regions the emulator code selects the file for. Absent when it never competes.", "type": "array", "items": { "type": "string", "enum": [ "argentina", "asia", "asia-ntsc", "asia-pal", "australia", "brazil", "canada", "china", "denmark", "europe", "finland", "france", "germany", "greece", "hong-kong", "india", "italy", "japan", "latin-america", "mexico", "netherlands", "new-zealand", "north-america", "norway", "oceania", "poland", "portugal", "russia", "singapore", "south-korea", "spain", "sweden", "taiwan", "uk", "world" ] }, "minItems": 1, "maxItems": 1000, "uniqueItems": true }, "region_groups": { "description": "Groups the file competes in as a core extra, whatever systems are chosen.", "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 256 }, "minItems": 1, "maxItems": 1000, "uniqueItems": true }, "region_system_groups": { "description": "Groups the file competes in as the platform's own declaration: present only when that system is kept.", "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 256 }, "minItems": 1, "maxItems": 1000, "uniqueItems": true } }, "oneOf": [ { "required": [ "release_asset" ] }, { "properties": { "repo_path": { "type": "string", "pattern": "^bios/" } }, "not": { "required": [ "release_asset" ] } } ] } } } }