{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://git.thyme-labs.com/khodo/modulus/schemas/modulus.schema.json", "type": "object", "required": [ "package" ], "additionalProperties": false, "properties": { "package": { "$ref": "#/$defs/package" }, "boost": { "$ref": "#/$defs/boost" }, "tests": { "$ref": "#/$defs/tests" }, "tooling": { "$ref": "#/$defs/tooling" } }, "$defs": { "package_name": { "type": "string", "pattern": "^[a-z0-9_][a-z0-9_+.-]*$" }, "conan_ref": { "type": "string", "pattern": "^[a-z0-9_][a-z0-9_+.-]*/[A-Za-z0-9_+.-]+(?:@[A-Za-z0-9_+.-]+/[A-Za-z0-9_+.-]+)?$" }, "cmake_name": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_+.-]*$" }, "relative_path": { "type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[A-Za-z0-9_./+*?\\[\\]-]+$" }, "option_value": { "type": [ "boolean", "integer", "string" ] }, "options": { "type": "object", "propertyNames": { "pattern": "^[A-Za-z0-9_+./*:-]+$" }, "additionalProperties": { "$ref": "#/$defs/option_value" } }, "package": { "type": "object", "required": [ "name" ], "additionalProperties": false, "properties": { "name": { "$ref": "#/$defs/package_name" }, "artifact": { "$ref": "#/$defs/artifact" } } }, "artifact": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "targets": { "type": "array", "items": { "$ref": "#/$defs/cmake_name" } }, "install_prefix": { "type": "string", "pattern": "^(|(?!(?:/|.*(?:^|/)\\.\\.(?:/|$)))[A-Za-z0-9_./+*?\\[\\]-]+)$" }, "cmake_definitions": { "$ref": "#/$defs/options" }, "conan_options": { "$ref": "#/$defs/options" }, "registry_url": { "type": "string" }, "upload_env": { "type": "string", "pattern": "^[A-Z_][A-Z0-9_]*$" } } }, "boost": { "type": "object", "additionalProperties": false, "properties": { "ref": { "$ref": "#/$defs/conan_ref" }, "components": { "type": "array", "items": { "$ref": "#/$defs/cmake_name" } }, "default_options": { "$ref": "#/$defs/options" } } }, "tests": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "name": { "$ref": "#/$defs/cmake_name" } } }, "tooling": { "type": "object", "additionalProperties": false, "properties": { "default_target": { "$ref": "#/$defs/cmake_name" }, "editor": { "type": "object", "additionalProperties": false, "properties": { "clangd": { "type": "array", "minItems": 1, "items": { "type": "object" } }, "clang_format": { "type": "object" }, "pyright": { "type": "object" }, "nvim": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" } } } } }, "upload_env": { "type": "string", "pattern": "^[A-Z_][A-Z0-9_]*$" }, "docker": { "type": "object", "additionalProperties": false, "properties": { "image": { "type": "string" }, "marker": { "type": "string", "pattern": "^/" } } }, "remote": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string" }, "url": { "type": "string" } } }, "run": { "$ref": "#/$defs/run" }, "lsp": { "$ref": "#/$defs/lsp" }, "targets": { "type": "object", "propertyNames": { "$ref": "#/$defs/cmake_name" }, "additionalProperties": { "$ref": "#/$defs/target" } } } }, "lsp": { "type": "object", "additionalProperties": false, "properties": { "clangd": { "type": "object", "additionalProperties": false, "properties": { "executable": { "$ref": "#/$defs/clangd_path" }, "arguments": { "type": "array", "items": { "type": "string" } }, "query_drivers": { "type": "array", "items": { "$ref": "#/$defs/clangd_path" } }, "header_roots": { "type": "array", "items": { "$ref": "#/$defs/clangd_path" } } } }, "enabled": { "type": "boolean" }, "compile_databases": { "type": "array", "items": { "$ref": "#/$defs/lsp_compile_database" } } } }, "clangd_path": { "type": "string", "pattern": "^/(?!$)(?!.*(?:^|/)\\.\\.(?:/|$))[^*,=\\[\\]?\\\\\\n\\r]+$" }, "lsp_compile_database": { "type": "object", "required": [ "name", "build_dir" ], "additionalProperties": false, "properties": { "name": { "$ref": "#/$defs/cmake_name" }, "source_dir": { "$ref": "#/$defs/relative_path" }, "build_dir": { "$ref": "#/$defs/relative_path" }, "generator": { "type": "string" }, "cmake_definitions": { "$ref": "#/$defs/options" }, "env": { "type": "object", "propertyNames": { "pattern": "^[A-Z_][A-Z0-9_]*$" }, "additionalProperties": { "type": "string" } }, "unset_env": { "type": "array", "items": { "type": "string", "pattern": "^[A-Z_][A-Z0-9_]*$" } } } }, "run": { "type": "object", "additionalProperties": false, "properties": { "enabled": { "type": "boolean" }, "target": { "$ref": "#/$defs/cmake_name" }, "executable": { "$ref": "#/$defs/relative_path" }, "env": { "type": "object", "propertyNames": { "pattern": "^[A-Z_][A-Z0-9_]*$" }, "additionalProperties": { "type": "string" } }, "args": { "type": "array", "items": { "type": "string" } }, "ports": { "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z0-9_.:-]+(?:/(?:tcp|udp|sctp))?$" } } } }, "target": { "type": "object", "required": [ "profile", "build_dir" ], "additionalProperties": false, "properties": { "profile": { "$ref": "#/$defs/relative_path" }, "build_dir": { "$ref": "#/$defs/relative_path" }, "can_run": { "type": "boolean" }, "build_type": { "type": "string", "enum": [ "Debug", "Release", "RelWithDebInfo", "MinSizeRel" ] }, "cmake_definitions": { "$ref": "#/$defs/options" } } } } }