Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[vcpkg] Add a schema file for vcpkg.json #12178

Merged
merged 7 commits into from
Jul 13, 2020
Merged
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 205 additions & 0 deletions scripts/vcpkg.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Vcpkg manifest",
"description": "Vcpkg manifest file. See https:/microsoft/vcpkg/blob/master/docs/specifications/manifests.md.",
"definitions": {
"identifier": {
"description": "Identifiers used for feature names.",
"allOf": [
{
"description": "Identifier are lowercase with digits and dashes.",
"type": "string",
"pattern": "[a-z0-9]+(-[a-z0-9]+)*"
},
{
"not": {
"description": "Identifiers must not be a Windows filesystem reserved name.",
edhebi marked this conversation as resolved.
Show resolved Hide resolved
"type": "string",
"pattern": "^prn|aux|nul|con|lpt[1-9]|com[1-9]|core|default$"
}
}
]
},
"package-name": {
"description": "Name of a package.",
"allOf": [
{
"description": "Package name must be a dot-separated list of valid identifiers",
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*(\\.[a-z0-9]+(-[a-z0-9]+)*)*$"
},
{
"not": {
"description": "Identifiers must not be a Windows filesystem reserved name.",
edhebi marked this conversation as resolved.
Show resolved Hide resolved
"type": "string",
"pattern": "(^|\\.)(prn|aux|nul|con|lpt[1-9]|com[1-9]|core|default)(\\.|$)"
}
}
]
},
"description-field": {
"description": "A string or array of strings containing the description of a package or feature.",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"dependency-object": {
"description": "Expanded form of a dependency with explicit features and platform.",
"type": "object",
"properties": {
"name": {
"$ref": "#/definitions/package-name"
},
"features": {
"type": "array",
"items": {
"$ref": "#/definitions/identifier"
}
},
"default-features": {
"type": "boolean",
"default": true
},
"platform": {
"$ref": "#/definitions/platform-expression"
}
},
"patternProperties": {
"^[$]": {}
},
"required": [
"name"
],
"additionalProperties": false
},
"dependency": {
"description": "A dependency fetchable by Vcpkg.",
"oneOf": [
{
"$ref": "#/definitions/package-name"
},
{
"$ref": "#/definitions/dependency-object"
}
]
},
"platform-expression": {
"description": "A specification of a set of platforms. See https:/microsoft/vcpkg/blob/master/docs/specifications/manifests.md#definitions.",
"type": "string"
},
"feature": {
"description": "A package feature that can be activated by consumers.",
"type": "object",
"properties": {
"name": {
"$ref": "#/definitions/identifier"
},
"description": {
"$ref": "#/definitions/description-field"
},
"dependencies": {
"description": "Dependencies used by this feature.",
"type": "array",
"items": {
"$ref": "#/definitions/dependency"
}
}
},
"patternProperties": {
"^[$]": {}
edhebi marked this conversation as resolved.
Show resolved Hide resolved
},
"required": [
"name",
"description"
],
"additionalProperties": false
}
},
"type": "object",
"properties": {
"name": {
"$ref": "#/definitions/package-name"
},
"version-string": {
"description": "A string without semantic meaning, equivalent to `CONTROL`'s `Version` field.",
"type": "string"
},
"port-version": {
"description": "A non-negative integer. If this field doesn't exist, it's assumed to be `0`.",
"type": "integer",
"minimum": 0,
"default": 0
},
"maintainers": {
"description": "An array of strings which contain the authors of a package",
"type": "array",
"items": {
"type": "string"
}
},
"description": {
"$ref": "#/definitions/description-field"
},
"homepage": {
"description": "A url which points to the homepage of a package.",
"type": "string",
"format": "uri"
},
"documentation": {
"description": "A url which points to the documentation of a package.",
"type": "string",
"format": "uri"
},
"license": {
"description": "An SPDX license expression at version 3.9.",
"type": "string"
},
"dependencies": {
"description": "Dependencies that are always required.",
"type": "array",
"items": {
"$ref": "#/definitions/dependency"
}
},
"dev-dependencies": {
"description": "Dependencies only required for developers (testing and the like).",
"type": "array",
"items": {
"$ref": "#/definitions/dependency"
}
},
"features": {
"description": "An array of features supported by the package",
"type": "array",
"items": {
"$ref": "#/definitions/feature"
}
},
"default-features": {
"description": "Features enabled by default with the package.",
"type": "array",
"items": {
"$ref": "#/definitions/identifier"
}
},
"supports": {
"$ref": "#/definitions/platform-expression"
}
},
"patternProperties": {
"^[$]": {}
},
"required": [
"name",
"version-string"
],
"additionalProperties": false
}