diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 48ccbcaca..4297256db 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,5 +28,12 @@ repos: - repo: https://github.com/python-jsonschema/check-jsonschema rev: "0.28.0" hooks: + - id: check-jsonschema + files: ^[^/]*\.json$ + args: + [ + "--schemafile", + "schemas/slicer-extension-catalog-entry-schema-v1.0.0.json", + ] - id: check-dependabot - id: check-github-workflows diff --git a/schemas/slicer-extension-catalog-entry-schema-v1.0.0.json b/schemas/slicer-extension-catalog-entry-schema-v1.0.0.json new file mode 100644 index 000000000..a9f7746ab --- /dev/null +++ b/schemas/slicer-extension-catalog-entry-schema-v1.0.0.json @@ -0,0 +1,58 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/Slicer/Slicer/main/Schemas/slicer-extension-catalog-item-schema-v1.0.0.json#", + "type": "object", + "title": "3D Slicer extensions catalog entry schema", + "description": "Schema for storing information about a 3D Slicer extension to allow it to be listed in the extension catalog.", + "required": ["$schema", "category", "scm_url"], + "additionalProperties": true, + "properties": { + "@schema": { + "$id": "#schema", + "type": "string", + "title": "Schema", + "description": "URL of versioned schema." + }, + "category": { + "$id": "#category", + "type": "string", + "title": "Category used to organize the extension in the extension catalog." + }, + "scm_url": { + "$id": "#scm_url", + "type": "string", + "title": "Filename or URL of the repository." + }, + "scm_revision": { + "$id": "#scm_revision", + "type": "string", + "title": "Hash, branch or tag name to identify the revision within the repository." + }, + "scm_type": { + "$id": "#scm_type", + "type": "string", + "title": "Type of revision control system.", + "enum": ["git", "local"], + "default": "git" + }, + "build_dependencies": { + "$id": "#build_dependencies", + "type": "array", + "title": "List of extensions required to build this extension.", + "additionalItems": false, + "items": { "type": "string" } + }, + "build_subdirectory": { + "$id": "#build_subdirectory", + "type": "string", + "title": "Name of the inner build directory in case of superbuild based extension.", + "default": "." + }, + "enabled": { + "$id": "#enabled", + "type": "boolean", + "title": "Specify if the extension should be enabled after its installation.", + "default": true + } + } +} diff --git a/scripts/check_filenames.sh b/scripts/check_filenames.sh index f27120a56..494286a94 100755 --- a/scripts/check_filenames.sh +++ b/scripts/check_filenames.sh @@ -18,6 +18,7 @@ unexpected_files=$(find . -mindepth 1 \( -type d \( \ -path ./.github -o \ -path ./.git -o \ -path ./ARCHIVE -o \ + -path ./schemas -o \ -path ./scripts \ \) -o -type f \( \ -name .pre-commit-config.yaml -o \