mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-23 20:29:06 -05:00
Platform pages link each reader's source line at its pinned revision, name the collection file that serves each entry, show launcher records with their lines, name systems with the id beside them and the list they were read from in words. The largest system lists move to pages of their own so a platform page stays under 500 KB. Gaps: plain numbers with a bar, a badge only for missing required firmware, Files to source as a heading. Cross-reference: counts per platform, one page per platform, one row per upstream project. Exports: gaps listed once, status, category and the serving file in the CSVs and SQLite, the commit in each API envelope, the provenance Wanted list as CSV. Catalog dates in words on the provenance page.
404 lines
9.4 KiB
JSON
404 lines
9.4 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://github.com/Abdess/retrobios/schemas/site-api-envelope.schema.json",
|
|
"title": "RetroBIOS static API v1 envelope",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"generated_at",
|
|
"kind",
|
|
"count",
|
|
"items"
|
|
],
|
|
"properties": {
|
|
"schema_version": {
|
|
"const": 1
|
|
},
|
|
"generated_at": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"commit": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$",
|
|
"description": "The repository commit the data was read at."
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"catalog",
|
|
"platforms",
|
|
"emulators",
|
|
"systems",
|
|
"verification-and-coverage-gaps",
|
|
"file-locations",
|
|
"file-lookup"
|
|
]
|
|
},
|
|
"count": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
},
|
|
"description": "Every endpoint shares this envelope. Within v1 an item keeps the fields listed for its kind and their types: fields may be added, never renamed or removed. A breaking change takes a new prefix.",
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "catalog"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"bytes",
|
|
"media_type",
|
|
"sha256",
|
|
"title",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"title": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"media_type": {
|
|
"type": "string"
|
|
},
|
|
"bytes": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"sha256": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{64}$"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "emulators"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"id",
|
|
"profile"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"profile": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "platforms"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"contract",
|
|
"coverage",
|
|
"id",
|
|
"name"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"contract": {
|
|
"type": "object"
|
|
},
|
|
"coverage": {
|
|
"type": "object"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "verification-and-coverage-gaps"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"destination",
|
|
"discrepancy",
|
|
"emulator",
|
|
"expected",
|
|
"in_repo",
|
|
"layer",
|
|
"name",
|
|
"platform",
|
|
"platform_id",
|
|
"reason",
|
|
"required",
|
|
"status",
|
|
"system"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"platform": {
|
|
"type": "string"
|
|
},
|
|
"platform_id": {
|
|
"type": "string"
|
|
},
|
|
"system": {
|
|
"type": "string"
|
|
},
|
|
"emulator": {
|
|
"type": "string"
|
|
},
|
|
"destination": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string"
|
|
},
|
|
"layer": {
|
|
"type": "string"
|
|
},
|
|
"reason": {
|
|
"type": "string"
|
|
},
|
|
"expected": {
|
|
"type": "string"
|
|
},
|
|
"discrepancy": {
|
|
"type": "string"
|
|
},
|
|
"required": {
|
|
"type": "boolean"
|
|
},
|
|
"in_repo": {
|
|
"type": [
|
|
"boolean",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "file-locations"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"sha1",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"sha1": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "systems"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"consoles",
|
|
"id",
|
|
"name"
|
|
],
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"consoles": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"name",
|
|
"path",
|
|
"sha1"
|
|
],
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
},
|
|
"size": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"sha1": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"md5": {
|
|
"type": "string"
|
|
},
|
|
"sha256": {
|
|
"type": "string"
|
|
},
|
|
"crc32": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": {
|
|
"kind": {
|
|
"const": "file-lookup"
|
|
}
|
|
}
|
|
},
|
|
"then": {
|
|
"properties": {
|
|
"items": {
|
|
"items": {
|
|
"type": "object",
|
|
"required": [
|
|
"value",
|
|
"algorithm",
|
|
"layer",
|
|
"name",
|
|
"url"
|
|
],
|
|
"properties": {
|
|
"value": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]+$"
|
|
},
|
|
"algorithm": {
|
|
"enum": [
|
|
"sha1",
|
|
"md5",
|
|
"crc32",
|
|
"sha256"
|
|
]
|
|
},
|
|
"layer": {
|
|
"enum": [
|
|
"collection",
|
|
"data-directory",
|
|
"platform",
|
|
"emulator"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"sha1": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"owner": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|