211 lines
6.7 KiB
JSON
Executable File
211 lines
6.7 KiB
JSON
Executable File
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"$id": "https://example.invalid/version.schema.json",
|
|
"title": "Unified Package Version Schema",
|
|
"description": "Schema for a unified version.json used by packages/",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schemaVersion",
|
|
"sources"
|
|
],
|
|
"properties": {
|
|
"schemaVersion": {
|
|
"type": "integer",
|
|
"enum": [1],
|
|
"description": "Schema version. Start at 1; bump on breaking changes."
|
|
},
|
|
"variables": {
|
|
"type": "object",
|
|
"description": "Common variables available for template substitution in string fields.",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"defaultVariant": {
|
|
"type": "string",
|
|
"description": "Optional default variant name for consumers."
|
|
},
|
|
"sources": {
|
|
"type": "object",
|
|
"description": "Base component sources keyed by component name.",
|
|
"minProperties": 1,
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/SourceSpec"
|
|
}
|
|
},
|
|
"variants": {
|
|
"type": "object",
|
|
"description": "Optional variants/channels/flavors; each overlays the base.",
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/VariantSpec"
|
|
}
|
|
},
|
|
"notes": {
|
|
"type": "object",
|
|
"description": "Optional free-form human notes/documentation.",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"$defs": {
|
|
"SourceSpecBase": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"fetcher": {
|
|
"type": "string",
|
|
"enum": ["github", "git", "url", "pypi", "none"],
|
|
"description": "Fetcher type for this source."
|
|
},
|
|
"hash": {
|
|
"type": "string",
|
|
"pattern": "^sha[0-9]+-",
|
|
"description": "SRI hash for the fetched artifact. Required unless fetcher is 'none'."
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"description": "Optional version string metadata for this component."
|
|
},
|
|
"extra": {
|
|
"type": "object",
|
|
"description": "Optional free-form metadata for consumer logic.",
|
|
"additionalProperties": true
|
|
},
|
|
|
|
"owner": { "type": "string", "description": "GitHub owner/org (github fetcher)." },
|
|
"repo": { "type": "string", "description": "GitHub repository (github fetcher)." },
|
|
"tag": { "type": "string", "description": "Git tag (github fetcher). Mutually exclusive with 'rev'." },
|
|
"rev": { "type": "string", "description": "Commit revision (github/git fetchers)." },
|
|
"branch": { "type": "string", "description": "Branch to track for HEAD-commit updates (github/git fetchers). Stored alongside 'rev' to record which branch the pinned commit came from. Has no effect on the Nix fetcher itself — only used by the version management tooling." },
|
|
"submodules": { "type": "boolean", "description": "Whether to fetch submodules (github/git fetchers)." },
|
|
|
|
"url": { "type": "string", "description": "Final URL (url fetcher). May be templated." },
|
|
"urlTemplate": { "type": "string", "description": "Template for URL (url fetcher); supports ${var}." },
|
|
|
|
"name": { "type": "string", "description": "PyPI dist name (pypi fetcher)." }
|
|
}
|
|
},
|
|
|
|
"SourceSpec": {
|
|
"allOf": [
|
|
{ "$ref": "#/$defs/SourceSpecBase" },
|
|
{
|
|
"if": {
|
|
"properties": { "fetcher": { "const": "github" } },
|
|
"required": ["fetcher"]
|
|
},
|
|
"then": {
|
|
"required": ["owner", "repo"],
|
|
"oneOf": [
|
|
{ "required": ["tag"] },
|
|
{ "required": ["rev"] }
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": { "fetcher": { "const": "git" } },
|
|
"required": ["fetcher"]
|
|
},
|
|
"then": {
|
|
"required": ["url", "rev"]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": { "fetcher": { "const": "url" } },
|
|
"required": ["fetcher"]
|
|
},
|
|
"then": {
|
|
"oneOf": [
|
|
{ "required": ["url"] },
|
|
{ "required": ["urlTemplate"] }
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": { "fetcher": { "const": "pypi" } },
|
|
"required": ["fetcher"]
|
|
},
|
|
"then": {
|
|
"required": ["name", "version"]
|
|
}
|
|
},
|
|
{
|
|
"if": {
|
|
"properties": { "fetcher": { "enum": ["github", "git", "url", "pypi"] } },
|
|
"required": ["fetcher"]
|
|
},
|
|
"then": {
|
|
"required": ["hash"]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
|
|
"SourceOverride": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"description": "Partial override of a source within a variant. All fields optional.",
|
|
"properties": {
|
|
"fetcher": { "type": "string", "enum": ["github", "git", "url", "pypi", "none"] },
|
|
"hash": { "type": "string", "pattern": "^sha[0-9]+-" },
|
|
"version": { "type": "string" },
|
|
"extra": { "type": "object", "additionalProperties": true },
|
|
|
|
"owner": { "type": "string" },
|
|
"repo": { "type": "string" },
|
|
"tag": { "type": "string" },
|
|
"rev": { "type": "string" },
|
|
"branch": { "type": "string" },
|
|
"submodules": { "type": "boolean" },
|
|
|
|
"url": { "type": "string" },
|
|
"urlTemplate": { "type": "string" },
|
|
|
|
"name": { "type": "string" }
|
|
}
|
|
},
|
|
|
|
"VariantSpec": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"inherits": {
|
|
"type": "string",
|
|
"description": "Optional base variant to inherit from."
|
|
},
|
|
"variables": {
|
|
"type": "object",
|
|
"description": "Variant-level variables that overlay top-level variables.",
|
|
"additionalProperties": { "type": "string" }
|
|
},
|
|
"sources": {
|
|
"type": "object",
|
|
"description": "Per-component overrides for this variant.",
|
|
"additionalProperties": { "$ref": "#/$defs/SourceOverride" }
|
|
},
|
|
"platforms": {
|
|
"type": "object",
|
|
"description": "Optional per-system overrides to support differing hashes/fields by platform.",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"sources": {
|
|
"type": "object",
|
|
"additionalProperties": { "$ref": "#/$defs/SourceOverride" }
|
|
},
|
|
"variables": {
|
|
"type": "object",
|
|
"additionalProperties": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|