From d86d3b7c12327aef0dc332f016d65b43f57bbe29 Mon Sep 17 00:00:00 2001 From: Jan Klass Date: Sun, 8 Feb 2026 14:53:18 +0100 Subject: [PATCH 01/11] Add missing octocat.svg Regression from c28c44d8 through PR #5329 where the old png was replaced, but the new svg was missing. --- src/img/octocat.svg | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/img/octocat.svg diff --git a/src/img/octocat.svg b/src/img/octocat.svg new file mode 100644 index 00000000000..4db6cd06514 --- /dev/null +++ b/src/img/octocat.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 8372b6ffb595af8e85ed5ee4c711eb32c562a949 Mon Sep 17 00:00:00 2001 From: Eric Dallo Date: Sat, 14 Feb 2026 00:21:26 -0300 Subject: [PATCH 02/11] Add ECA config json (#5356) * Add ECA config json * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/api/json/catalog.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index 1dbf7d5cff9..c79b55013c8 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -2503,6 +2503,12 @@ ], "url": "https://www.schemastore.org/pm2-ecosystem.json" }, + { + "name": "ECA - Editor Code Assistant", + "description": "ECA AI coding agent configuration file", + "fileMatch": ["**/eca/config.json", "**/.eca/config.json"], + "url": "https://eca.dev/config.json" + }, { "name": "eksctl", "description": "eksctl cluster configuration file", From bd9ad1f38ecb92376fdcfd5439694a7497120d5a Mon Sep 17 00:00:00 2001 From: Cristovao Cordeiro Date: Sat, 14 Feb 2026 04:21:44 +0100 Subject: [PATCH 03/11] Merge pull request #5358 from cjdcordeiro/patch-1 feat: add 'hint' property to chisel-slices schema --- src/schemas/json/chisel-slices.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/schemas/json/chisel-slices.json b/src/schemas/json/chisel-slices.json index be30bf1a2a1..8d7fe1565ea 100644 --- a/src/schemas/json/chisel-slices.json +++ b/src/schemas/json/chisel-slices.json @@ -50,6 +50,12 @@ "description": "A Starlark expression to modify the file contents.", "examples": ["foo = content.read(\"/path/to/temporary/content\")"] }, + "hint": { + "type": "string", + "description": "Concise and unopinionated discriminator to describe the slice. No special chars, trailing punctuation, and it must be sentence case.", + "examples": ["Non-standard timezones"], + "pattern": "^(?=[A-Z])[a-zA-Z0-9.,;()\\s]*[^.,;!?: \\W]$" + }, "contents": { "type": "object", "description": "Files to include in the slice. Supports glob patterns.", From c5b8ed7cc5661a7d3270be31a3d7a783cd02a0c9 Mon Sep 17 00:00:00 2001 From: Joel Rosario Date: Sat, 14 Feb 2026 08:52:58 +0530 Subject: [PATCH 04/11] Added support for specmatic config v3 (#5362) * chore: deprecate formatter * Add Config Specmatic V3 schema * chore: update provides/consumes for v3 * Updated specmatic.yaml jsonschema with version 3 * Added v3 examples * Got jsonschema working with the simpler reffed and re-reffed examples * Changed some schema names of systemUnderTest schemas to improve symmetry with the corresponding dependency schema names * Updated specmatic schema and sample uber-v3 json file * added some negative examples for specmatic v3 schema * Updated the new specmatic schema and test files using prettier * Add telemetry flag for specmatic v2 config * Added missing hooks to the adapters schema * Added CODEOWNERS entries for the Specmatic team --------- Co-authored-by: vedubhat Co-authored-by: Yogesh Nikam <60032699+yogeshnikam671@users.noreply.github.com> Co-authored-by: Sufiyan Co-authored-by: Ketan Padegaonkar --- .github/CODEOWNERS | 5 + .../v3-components-additional-properties.json | 6 + ...-service-ref-and-definitions-together.json | 13 + .../v3-examples-additional-properties.json | 10 + .../specmatic/v3-examples-wrong-type.json | 8 + ...global-settings-additional-properties.json | 10 + .../v3-global-settings-wrong-type.json | 10 + .../specmatic/v3-proxy-missing-target.json | 10 + ...-root-additional-properties-contracts.json | 4 + .../v3-run-options-additional-properties.json | 10 + .../v3-run-options-openapi-missing-type.json | 12 + .../v3-run-options-wrong-datatype.json | 13 + .../v3-source-mixed-git-and-filesystem.json | 15 + ...st-service-missing-ref-or-definitions.json | 8 + src/schemas/json/specmatic.json | 2218 +++++++++++++++-- src/test/specmatic/specmatic-uber-v3.json | 432 ++++ .../{specmatic.json => specmatic-v2.json} | 2 +- src/test/specmatic/specmatic-v3-dereffed.json | 69 + src/test/specmatic/specmatic-v3-reffed.json | 73 + 19 files changed, 2763 insertions(+), 165 deletions(-) create mode 100644 src/negative_test/specmatic/v3-components-additional-properties.json create mode 100644 src/negative_test/specmatic/v3-dependency-service-ref-and-definitions-together.json create mode 100644 src/negative_test/specmatic/v3-examples-additional-properties.json create mode 100644 src/negative_test/specmatic/v3-examples-wrong-type.json create mode 100644 src/negative_test/specmatic/v3-global-settings-additional-properties.json create mode 100644 src/negative_test/specmatic/v3-global-settings-wrong-type.json create mode 100644 src/negative_test/specmatic/v3-proxy-missing-target.json create mode 100644 src/negative_test/specmatic/v3-root-additional-properties-contracts.json create mode 100644 src/negative_test/specmatic/v3-run-options-additional-properties.json create mode 100644 src/negative_test/specmatic/v3-run-options-openapi-missing-type.json create mode 100644 src/negative_test/specmatic/v3-run-options-wrong-datatype.json create mode 100644 src/negative_test/specmatic/v3-source-mixed-git-and-filesystem.json create mode 100644 src/negative_test/specmatic/v3-system-under-test-service-missing-ref-or-definitions.json create mode 100644 src/test/specmatic/specmatic-uber-v3.json rename src/test/specmatic/{specmatic.json => specmatic-v2.json} (98%) create mode 100644 src/test/specmatic/specmatic-v3-dereffed.json create mode 100644 src/test/specmatic/specmatic-v3-reffed.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f5567f02189..b085c44ace9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -83,3 +83,8 @@ src/negative_test/popxf-* @peterstangl @alekssmolkovic @kenmimasu src/schemas/json/kya.json @wp-lkl src/test/kya/ @wp-lkl src/negative_test/kya/ @wp-lkl + +# Managed by Specmatic team: +src/schemas/json/specmatic.json @joelrosario @nashjain +src/test/specmatic/ @joelrosario @nashjain +src/negative_test/specmatic/ @joelrosario @nashjain diff --git a/src/negative_test/specmatic/v3-components-additional-properties.json b/src/negative_test/specmatic/v3-components-additional-properties.json new file mode 100644 index 00000000000..c3d6b40c758 --- /dev/null +++ b/src/negative_test/specmatic/v3-components-additional-properties.json @@ -0,0 +1,6 @@ +{ + "components": { + "unknownSection": {} + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-dependency-service-ref-and-definitions-together.json b/src/negative_test/specmatic/v3-dependency-service-ref-and-definitions-together.json new file mode 100644 index 00000000000..a6c8d0cdbc5 --- /dev/null +++ b/src/negative_test/specmatic/v3-dependency-service-ref-and-definitions-together.json @@ -0,0 +1,13 @@ +{ + "dependencies": { + "services": [ + { + "service": { + "$ref": "#/components/services/userApiService", + "definitions": [] + } + } + ] + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-examples-additional-properties.json b/src/negative_test/specmatic/v3-examples-additional-properties.json new file mode 100644 index 00000000000..a8d5e3b04b5 --- /dev/null +++ b/src/negative_test/specmatic/v3-examples-additional-properties.json @@ -0,0 +1,10 @@ +{ + "components": { + "examples": { + "invalidExamplesSection": { + "directories": "./examples" + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-examples-wrong-type.json b/src/negative_test/specmatic/v3-examples-wrong-type.json new file mode 100644 index 00000000000..bc739c0ebbf --- /dev/null +++ b/src/negative_test/specmatic/v3-examples-wrong-type.json @@ -0,0 +1,8 @@ +{ + "components": { + "examples": { + "testExamples": "not-an-array" + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-global-settings-additional-properties.json b/src/negative_test/specmatic/v3-global-settings-additional-properties.json new file mode 100644 index 00000000000..1f29e3d5442 --- /dev/null +++ b/src/negative_test/specmatic/v3-global-settings-additional-properties.json @@ -0,0 +1,10 @@ +{ + "specmatic": { + "settings": { + "general": { + "unsupportedSetting": true + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-global-settings-wrong-type.json b/src/negative_test/specmatic/v3-global-settings-wrong-type.json new file mode 100644 index 00000000000..52aaae010ed --- /dev/null +++ b/src/negative_test/specmatic/v3-global-settings-wrong-type.json @@ -0,0 +1,10 @@ +{ + "specmatic": { + "settings": { + "general": { + "prettyPrint": 1 + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-proxy-missing-target.json b/src/negative_test/specmatic/v3-proxy-missing-target.json new file mode 100644 index 00000000000..de93a8c7674 --- /dev/null +++ b/src/negative_test/specmatic/v3-proxy-missing-target.json @@ -0,0 +1,10 @@ +{ + "proxies": [ + { + "proxy": { + "baseUrl": "http://localhost:9000" + } + } + ], + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-root-additional-properties-contracts.json b/src/negative_test/specmatic/v3-root-additional-properties-contracts.json new file mode 100644 index 00000000000..38ef7b87f97 --- /dev/null +++ b/src/negative_test/specmatic/v3-root-additional-properties-contracts.json @@ -0,0 +1,4 @@ +{ + "contracts": [], + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-run-options-additional-properties.json b/src/negative_test/specmatic/v3-run-options-additional-properties.json new file mode 100644 index 00000000000..0e5eb5a9e2d --- /dev/null +++ b/src/negative_test/specmatic/v3-run-options-additional-properties.json @@ -0,0 +1,10 @@ +{ + "components": { + "runOptions": { + "orderApiService": { + "invalidProtocol": {} + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-run-options-openapi-missing-type.json b/src/negative_test/specmatic/v3-run-options-openapi-missing-type.json new file mode 100644 index 00000000000..25e4d8a5cd5 --- /dev/null +++ b/src/negative_test/specmatic/v3-run-options-openapi-missing-type.json @@ -0,0 +1,12 @@ +{ + "components": { + "runOptions": { + "orderApiService": { + "openapi": { + "baseUrl": "http://localhost:8080" + } + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-run-options-wrong-datatype.json b/src/negative_test/specmatic/v3-run-options-wrong-datatype.json new file mode 100644 index 00000000000..8aaed539237 --- /dev/null +++ b/src/negative_test/specmatic/v3-run-options-wrong-datatype.json @@ -0,0 +1,13 @@ +{ + "components": { + "runOptions": { + "orderApiService": { + "openapi": { + "baseUrl": 8080, + "type": "test" + } + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-source-mixed-git-and-filesystem.json b/src/negative_test/specmatic/v3-source-mixed-git-and-filesystem.json new file mode 100644 index 00000000000..f6fdce40be8 --- /dev/null +++ b/src/negative_test/specmatic/v3-source-mixed-git-and-filesystem.json @@ -0,0 +1,15 @@ +{ + "components": { + "sources": { + "specsRepo": { + "filesystem": { + "directory": "./local-specs" + }, + "git": { + "url": "https://github.com/example/specs-repo.git" + } + } + } + }, + "version": 3 +} diff --git a/src/negative_test/specmatic/v3-system-under-test-service-missing-ref-or-definitions.json b/src/negative_test/specmatic/v3-system-under-test-service-missing-ref-or-definitions.json new file mode 100644 index 00000000000..0cc159f5c34 --- /dev/null +++ b/src/negative_test/specmatic/v3-system-under-test-service-missing-ref-or-definitions.json @@ -0,0 +1,8 @@ +{ + "systemUnderTest": { + "service": { + "description": "Order API service" + } + }, + "version": 3 +} diff --git a/src/schemas/json/specmatic.json b/src/schemas/json/specmatic.json index 027d5e23874..25e50633778 100644 --- a/src/schemas/json/specmatic.json +++ b/src/schemas/json/specmatic.json @@ -4,97 +4,216 @@ "title": "Specmatic Configuration", "description": "Configuration file for Specmatic, a contract-driven testing tool\nhttps://specmatic.io/documentation/", "type": "object", - "required": ["version", "contracts"], - "additionalProperties": false, + "required": ["version"], "properties": { "version": { "type": "integer", - "enum": [2], - "description": "Configuration version for Specmatic" - }, - "contracts": { - "type": "array", - "description": "Array of contract configurations", - "items": { - "$ref": "#/definitions/ContractConfig" + "default": 2 + } + }, + "allOf": [ + { + "if": { + "properties": { + "version": { + "const": 3 + } + } + }, + "then": { + "$ref": "#/definitions/ConfigV3" + }, + "else": { + "$ref": "#/definitions/ConfigV2" } - }, - "auth": { - "$ref": "#/definitions/Auth", - "description": "Authentication configuration" - }, - "pipeline": { - "$ref": "#/definitions/Pipeline", - "description": "Pipeline configuration for Azure DevOps" - }, - "environments": { + } + ], + "definitions": { + "ConfigV3": { "type": "object", - "description": "Environment-specific configurations", - "additionalProperties": { - "$ref": "#/definitions/Environment" + "required": ["version"], + "additionalProperties": false, + "properties": { + "version": { + "type": "integer", + "enum": [3] + }, + "systemUnderTest": { + "$ref": "#/definitions/SystemUnderTestServiceDefinition" + }, + "dependencies": { + "$ref": "#/definitions/DependenciesDefinition" + }, + "proxies": { + "$ref": "#/definitions/ProxyDefinitionsArray" + }, + "mcp": { + "$ref": "#/definitions/McpDefinition" + }, + "specmatic": { + "$ref": "#/definitions/SpecmaticDefinition" + }, + "components": { + "type": "object", + "additionalProperties": false, + "properties": { + "sources": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SourceSchema" + } + }, + "services": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/StaticServiceDefinition" + } + }, + "runOptions": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/RunOptions" + } + }, + "examples": { + "$ref": "#/definitions/ExamplesConfiguration" + }, + "dictionaries": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DictionaryConfiguration" + } + }, + "adapters": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/AdapterConfiguration" + } + }, + "certificates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/CertConfiguration" + } + }, + "settings": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "$ref": "#/definitions/ConcreteSettings" + }, + { + "$ref": "#/definitions/ModeSpecificSettings" + } + ] + } + } + } + } } }, - "hooks": { + "ConfigV2": { "type": "object", - "description": "Custom hooks configuration", - "additionalProperties": { "type": "string" } - }, - "repository": { - "$ref": "#/definitions/RepositoryInfo", - "description": "Repository information" - }, - "report": { - "$ref": "#/definitions/ReportConfigurationDetails", - "description": "Report generation configuration" - }, - "security": { - "$ref": "#/definitions/SecurityConfiguration", - "description": "Security configuration for API testing" - }, - "test": { - "$ref": "#/definitions/TestConfiguration", - "description": "Test execution configuration" - }, - "stub": { - "$ref": "#/definitions/StubConfiguration", - "description": "Stub/mock server configuration" - }, - "virtualService": { - "$ref": "#/definitions/VirtualServiceConfiguration", - "description": "Virtual service configuration" - }, - "examples": { - "type": "array", - "description": "List of example file paths", - "items": { "type": "string" } - }, - "workflow": { - "$ref": "#/definitions/WorkflowConfiguration", - "description": "Workflow configuration for ID management" - }, - "ignoreInlineExamples": { - "type": ["boolean", "null"], - "description": "Whether to ignore inline examples in specifications" - }, - "additionalExampleParamsFilePath": { - "type": ["string", "null"], - "description": "Path to additional example parameters file" - }, - "attributeSelectionPattern": { - "$ref": "#/definitions/AttributeSelectionPattern", - "description": "Pattern for selecting attributes in responses" - }, - "allPatternsMandatory": { - "type": ["boolean", "null"], - "description": "Whether all patterns are mandatory" + "required": ["version", "contracts"], + "additionalProperties": false, + "properties": { + "version": { + "type": "integer", + "enum": [2], + "description": "Configuration version for Specmatic" + }, + "contracts": { + "type": "array", + "description": "Array of contract configurations", + "items": { + "$ref": "#/definitions/ContractConfig" + } + }, + "auth": { + "$ref": "#/definitions/Auth", + "description": "Authentication configuration" + }, + "pipeline": { + "$ref": "#/definitions/Pipeline", + "description": "Pipeline configuration for Azure DevOps" + }, + "environments": { + "type": "object", + "description": "Environment-specific configurations", + "additionalProperties": { + "$ref": "#/definitions/Environment" + } + }, + "hooks": { + "type": "object", + "description": "Custom hooks configuration", + "additionalProperties": { + "type": "string" + } + }, + "repository": { + "$ref": "#/definitions/RepositoryInfo", + "description": "Repository information" + }, + "report": { + "$ref": "#/definitions/ReportConfigurationDetails", + "description": "Report generation configuration" + }, + "security": { + "$ref": "#/definitions/SecurityConfiguration", + "description": "Security configuration for API testing" + }, + "test": { + "$ref": "#/definitions/TestConfiguration", + "description": "Test execution configuration" + }, + "stub": { + "$ref": "#/definitions/StubConfiguration", + "description": "Stub/mock server configuration" + }, + "virtualService": { + "$ref": "#/definitions/VirtualServiceConfiguration", + "description": "Virtual service configuration" + }, + "examples": { + "type": "array", + "description": "List of example file paths", + "items": { + "type": "string" + } + }, + "workflow": { + "$ref": "#/definitions/WorkflowConfiguration", + "description": "Workflow configuration for ID management" + }, + "ignoreInlineExamples": { + "type": ["boolean", "null"], + "description": "Whether to ignore inline examples in specifications" + }, + "additionalExampleParamsFilePath": { + "type": ["string", "null"], + "description": "Path to additional example parameters file" + }, + "attributeSelectionPattern": { + "$ref": "#/definitions/AttributeSelectionPattern", + "description": "Pattern for selecting attributes in responses" + }, + "allPatternsMandatory": { + "type": ["boolean", "null"], + "description": "Whether all patterns are mandatory" + }, + "defaultPatternValues": { + "type": "object", + "description": "Default values for patterns", + "additionalProperties": true + }, + "disable_telemetry": { + "type": ["boolean"], + "description": "Whether to disable telemetry data collection" + } + } }, - "defaultPatternValues": { - "type": "object", - "description": "Default values for patterns", - "additionalProperties": true - } - }, - "definitions": { "ContractConfig": { "type": "object", "title": "ContractConfig", @@ -133,92 +252,41 @@ "required": [] }, "provides": { - "type": "array", + "type": ["array", "null"], "description": "List of specs provided for testing. Each entry can be a string or an object.", "items": { - "oneOf": [ + "anyOf": [ { - "type": "string", - "description": "Path to a spec file." + "$ref": "#/definitions/StringValue" }, { - "type": "object", - "description": "Object describing provided specs and test configuration.", - "additionalProperties": false, - "properties": { - "specs": { - "type": "array", - "items": { "type": "string" }, - "description": "List of spec file paths." - }, - "baseUrl": { - "type": "string", - "description": "Test base URL." - }, - "host": { - "type": "string", - "description": "Host for the test base URL." - }, - "port": { - "type": "integer", - "description": "Port for the test base URL." - }, - "resiliencyTests": { - "type": "object", - "additionalProperties": false, - "description": "Resiliency test configuration.", - "properties": { - "enable": { - "type": "string", - "enum": ["all", "positiveOnly", "none"], - "description": "Resiliency test suite to enable." - } - }, - "required": [] - } - }, - "required": ["specs"] + "$ref": "#/definitions/ObjectValueFullUrl" + }, + { + "$ref": "#/definitions/ObjectValuePartialUrl" + }, + { + "$ref": "#/definitions/ConfigValue" } ] } }, "consumes": { - "type": "array", + "type": ["array", "null"], "description": "List of specs consumed for stubbing. Each entry can be a string or an object.", "items": { "oneOf": [ { - "type": "string", - "description": "Path to a spec file." + "$ref": "#/definitions/StringValue" }, { - "type": "object", - "additionalProperties": false, - "description": "Object describing consumed specs and stub configuration.", - "properties": { - "specs": { - "type": "array", - "items": { "type": "string" }, - "description": "List of spec file paths." - }, - "baseUrl": { - "type": "string", - "description": "Full base URL for the stub." - }, - "host": { - "type": "string", - "description": "Host for the stub base URL." - }, - "port": { - "type": "integer", - "description": "Port for the stub base URL." - }, - "basePath": { - "type": "string", - "description": "Base path for the stub base URL." - } - }, - "required": ["specs"] + "$ref": "#/definitions/ObjectValueFullUrl" + }, + { + "$ref": "#/definitions/ObjectValuePartialUrl" + }, + { + "$ref": "#/definitions/ConfigValue" } ] } @@ -273,12 +341,16 @@ "baseurls": { "type": ["object", "null"], "description": "Base URLs for different services", - "additionalProperties": { "type": "string" } + "additionalProperties": { + "type": "string" + } }, "variables": { "type": ["object", "null"], "description": "Environment variables", - "additionalProperties": { "type": "string" } + "additionalProperties": { + "type": "string" + } } } }, @@ -305,10 +377,14 @@ "formatters": { "type": ["array", "null"], "description": "List of report formatters", - "items": { "$ref": "#/definitions/ReportFormatterDetails" }, + "items": { + "$ref": "#/definitions/ReportFormatterDetails" + }, "deprecated": true }, - "types": { "$ref": "#/definitions/ReportTypes" } + "types": { + "$ref": "#/definitions/ReportTypes" + } } }, "ReportFormatterDetails": { @@ -358,7 +434,9 @@ "additionalProperties": false, "description": "Configuration for different report types", "properties": { - "APICoverage": { "$ref": "#/definitions/APICoverage" } + "APICoverage": { + "$ref": "#/definitions/APICoverage" + } } }, "APICoverage": { @@ -366,7 +444,9 @@ "additionalProperties": false, "description": "API coverage report configuration", "properties": { - "OpenAPI": { "$ref": "#/definitions/APICoverageConfiguration" } + "OpenAPI": { + "$ref": "#/definitions/APICoverageConfiguration" + } } }, "APICoverageConfiguration": { @@ -374,11 +454,15 @@ "additionalProperties": false, "description": "OpenAPI coverage configuration", "properties": { - "successCriteria": { "$ref": "#/definitions/SuccessCriteria" }, + "successCriteria": { + "$ref": "#/definitions/SuccessCriteria" + }, "excludedEndpoints": { "type": ["array", "null"], "description": "List of endpoints to exclude from coverage", - "items": { "type": "string" } + "items": { + "type": "string" + } } } }, @@ -406,7 +490,9 @@ "additionalProperties": false, "description": "Security configuration", "properties": { - "OpenAPI": { "$ref": "#/definitions/OpenAPISecurityConfiguration" } + "OpenAPI": { + "$ref": "#/definitions/OpenAPISecurityConfiguration" + } } }, "OpenAPISecurityConfiguration": { @@ -448,7 +534,9 @@ "description": "Test execution configuration", "additionalProperties": false, "properties": { - "resiliencyTests": { "$ref": "#/definitions/ResiliencyTestsConfig" }, + "resiliencyTests": { + "$ref": "#/definitions/ResiliencyTestsConfig" + }, "validateResponseValues": { "type": ["boolean", "null"], "description": "Whether to validate response values" @@ -522,7 +610,9 @@ "nonPatchableKeys": { "type": "array", "description": "List of keys that cannot be patched", - "items": { "type": "string" } + "items": { + "type": "string" + } } } }, @@ -563,13 +653,1813 @@ "default_fields": { "type": ["array", "null"], "description": "Default fields to include", - "items": { "type": "string" } + "items": { + "type": "string" + } }, "query_param_key": { "type": ["string", "null"], "description": "Query parameter key for field selection" } } + }, + "SpecsArray": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "StringValue": { + "type": "string", + "description": "A single spec path." + }, + "ObjectValueFullUrl": { + "type": "object", + "additionalProperties": false, + "required": ["baseUrl", "specs"], + "properties": { + "baseUrl": { + "type": "string" + }, + "specs": { + "$ref": "#/definitions/SpecsArray" + }, + "resiliencyTests": { + "$ref": "#/definitions/ResiliencyTestsConfig" + } + } + }, + "ObjectValuePartialUrl": { + "type": "object", + "required": ["specs"], + "anyOf": [ + { + "required": ["host"], + "properties": { + "host": { + "type": "string" + } + } + }, + { + "required": ["port"], + "properties": { + "port": { + "type": "integer" + } + } + } + ], + "properties": { + "specs": { + "$ref": "#/definitions/SpecsArray" + }, + "host": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "basePath": { + "type": "string" + }, + "resiliencyTests": { + "$ref": "#/definitions/ResiliencyTestsConfig" + } + } + }, + "ConfigValue": { + "type": "object", + "additionalProperties": false, + "required": ["specs", "specType", "config"], + "properties": { + "specs": { + "$ref": "#/definitions/SpecsArray" + }, + "specType": { + "type": "string" + }, + "config": { + "type": "object", + "additionalProperties": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/ConfigValueScalarOrComposite" + } + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ConfigValueScalarOrComposite" + } + } + ] + } + } + } + }, + "ConfigValueScalarOrComposite": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/ConfigValueScalarOrComposite" + } + }, + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ConfigValueScalarOrComposite" + } + } + ] + }, + "SubstitutionExpression": { + "type": "string", + "pattern": "^\\$\\{[^}]+\\}$" + }, + "GuardedSubstitutionString": { + "type": "string", + "allOf": [ + { + "if": { + "pattern": "^\\$\\{" + }, + "then": { + "$ref": "#/definitions/SubstitutionExpression" + }, + "else": {} + } + ] + }, + "SubstitutableString": { + "type": "string" + }, + "SubstitutableStringArray": { + "type": "array", + "items": { + "$ref": "#/definitions/SubstitutableString" + } + }, + "SubstitutableInteger": { + "anyOf": [ + { + "type": "integer" + }, + { + "$ref": "#/definitions/GuardedSubstitutionString" + } + ] + }, + "SubstitutableFloat": { + "oneOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/GuardedSubstitutionString" + } + ] + }, + "SubstitutableBoolean": { + "oneOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/GuardedSubstitutionString" + } + ] + }, + "SubstitutableStringOrArray": { + "oneOf": [ + { + "$ref": "#/definitions/SubstitutableString" + }, + { + "$ref": "#/definitions/SubstitutableStringArray" + } + ] + }, + "Reference": { + "type": "object", + "additionalProperties": true, + "properties": { + "$ref": { + "type": "string", + "format": "uri-reference" + } + } + }, + "DependenciesDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "services": { + "$ref": "#/definitions/MockRuntimeServiceDefinitionOrRefArray" + }, + "data": { + "$ref": "#/definitions/DataDefinition" + }, + "settings": { + "$ref": "#/definitions/MockSettingsOrRef" + } + } + }, + "MockRuntimeServiceDefinitionOrRefArray": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["service"], + "properties": { + "service": { + "$ref": "#/definitions/MockRuntimeServiceDefinition" + } + } + } + }, + "MockRuntimeServiceDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "$ref": { + "type": "string" + }, + "description": { + "type": "string" + }, + "definitions": { + "$ref": "#/definitions/SpecificationStaticDefinitionArray" + }, + "runOptions": { + "$ref": "#/definitions/MockRunOptionsOrRef" + }, + "data": { + "$ref": "#/definitions/DataDefinition" + }, + "settings": { + "$ref": "#/definitions/MockSettingsOrRef" + } + }, + "oneOf": [ + { + "required": ["$ref"], + "properties": { + "$ref": {} + }, + "not": { + "required": ["definitions"], + "properties": { + "definitions": {} + } + } + }, + { + "required": ["definitions"], + "properties": { + "definitions": {} + }, + "not": { + "required": ["$ref"], + "properties": { + "$ref": {} + } + } + } + ] + }, + "SystemUnderTestServiceDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "service": { + "$ref": "#/definitions/TestRuntimeServiceDefinition" + } + } + }, + "TestRuntimeServiceDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "$ref": { "type": "string" }, + "definitions": { + "$ref": "#/definitions/SpecificationStaticDefinitionArray" + }, + + "description": { "type": "string" }, + "runOptions": { "$ref": "#/definitions/TestRunOptionsOrRef" }, + "data": { "$ref": "#/definitions/DataDefinition" }, + "settings": { "$ref": "#/definitions/TestSettingsOrRef" } + }, + "oneOf": [ + { + "required": ["$ref"], + "properties": { + "$ref": {} + }, + "not": { + "required": ["definitions"], + "properties": { + "definitions": {} + } + } + }, + { + "required": ["definitions"], + "properties": { + "definitions": {} + }, + "not": { + "required": ["$ref"], + "properties": { + "$ref": {} + } + } + } + ] + }, + "DataDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "examples": { + "$ref": "#/definitions/ArrayExampleConfigurationOrRef" + }, + "dictionary": { + "$ref": "#/definitions/DictionaryConfigurationOrRef" + }, + "adapters": { + "$ref": "#/definitions/AdapterConfigurationOrRef" + } + } + }, + "ProxyDefinitionsArray": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["proxy"], + "properties": { + "proxy": { + "$ref": "#/definitions/ProxyDefinition" + } + } + } + }, + "ProxyDefinition": { + "type": "object", + "additionalProperties": false, + "required": ["target"], + "properties": { + "target": { + "$ref": "#/definitions/SubstitutableString" + }, + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "timeoutInMilliseconds": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "adapters": { + "$ref": "#/definitions/AdapterConfigurationOrRef" + }, + "mock": { + "$ref": "#/definitions/SubstitutableStringOrArray" + }, + "cert": { + "$ref": "#/definitions/CertConfigurationOrRef" + }, + "recordingsDirectory": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "McpDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "test": { + "$ref": "#/definitions/McpTestRunOptions" + } + } + }, + "McpTestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "transportKind": { + "anyOf": [ + { + "type": "string", + "enum": ["STREAMABLE_HTTP"] + }, + { + "$ref": "#/definitions/SubstitutableString" + } + ] + }, + "enableResiliencyTests": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "dictionaryFile": { + "$ref": "#/definitions/SubstitutableString" + }, + "bearerToken": { + "$ref": "#/definitions/SubstitutableString" + }, + "filterTools": { + "$ref": "#/definitions/SubstitutableStringArray" + }, + "skipTools": { + "$ref": "#/definitions/SubstitutableStringArray" + } + } + }, + "SpecmaticDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "license": { + "$ref": "#/definitions/LicenseDefinition" + }, + "governance": { + "type": "object", + "additionalProperties": false, + "properties": { + "report": { + "$ref": "#/definitions/ReportsDefinition" + }, + "successCriteria": { + "$ref": "#/definitions/SuccessCriteriaDefinition" + } + } + }, + "settings": { + "$ref": "#/definitions/ConcreteSettingsOrRef" + } + } + }, + "LicenseDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "path": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "ReportsDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "formats": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string", + "enum": ["html", "ctrf"] + } + }, + { + "$ref": "#/definitions/SubstitutableString" + } + ] + }, + "outputDirectory": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "SuccessCriteriaDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "minCoveragePercentage": { + "$ref": "#/definitions/SubstitutableFloat" + }, + "maxMissedOperationsInSpec": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "enforce": { + "$ref": "#/definitions/SubstitutableBoolean" + } + } + }, + "StaticServiceDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "definitions": { + "$ref": "#/definitions/SpecificationStaticDefinitionArray" + } + } + }, + "SpecificationStaticDefinitionArray": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["definition"], + "properties": { + "definition": { + "$ref": "#/definitions/SpecificationStaticDefinition" + } + } + } + }, + "SpecificationStaticDefinition": { + "type": "object", + "additionalProperties": false, + "required": ["source", "specs"], + "properties": { + "source": { + "$ref": "#/definitions/SourceSchemaOrRef" + }, + "specs": { + "type": "array", + "items": { + "$ref": "#/definitions/SpecificationSchema" + } + } + } + }, + "SpecificationSchema": { + "oneOf": [ + { + "$ref": "#/definitions/SpecificationPath" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "spec": { + "$ref": "#/definitions/SpecificationObject" + } + } + } + ] + }, + "SpecificationPath": { + "type": "string" + }, + "SpecificationObject": { + "type": "object", + "additionalProperties": false, + "required": ["path"], + "properties": { + "id": { + "type": "string" + }, + "path": { + "type": "string" + }, + "urlPathPrefix": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "SourceSchemaOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/SourceSchema" + } + }, + "SourceSchema": { + "oneOf": [ + { + "$ref": "#/definitions/GitSourceSchema" + }, + { + "$ref": "#/definitions/FileSystemSourceSchema" + } + ] + }, + "GitSourceSchema": { + "type": "object", + "additionalProperties": false, + "required": ["git"], + "properties": { + "git": { + "$ref": "#/definitions/GitSourceOptions" + } + } + }, + "GitSourceOptions": { + "type": "object", + "additionalProperties": false, + "required": ["url"], + "properties": { + "url": { + "$ref": "#/definitions/SubstitutableString" + }, + "branch": { + "$ref": "#/definitions/SubstitutableString" + }, + "matchBranch": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "auth": { + "$ref": "#/definitions/GitSourceAuthentication" + } + } + }, + "GitSourceAuthentication": { + "oneOf": [ + { + "$ref": "#/definitions/GitSourceBearerFileAuthentication" + }, + { + "$ref": "#/definitions/GitSourceBearerEnvAuthentication" + }, + { + "$ref": "#/definitions/GitSourcePersonalAccessTokenAuthentication" + } + ] + }, + "GitSourceBearerFileAuthentication": { + "type": "object", + "additionalProperties": false, + "required": ["bearerFile"], + "properties": { + "bearerFile": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "GitSourceBearerEnvAuthentication": { + "type": "object", + "additionalProperties": false, + "required": ["bearerEnvironmentVariable"], + "properties": { + "bearerEnvironmentVariable": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "GitSourcePersonalAccessTokenAuthentication": { + "type": "object", + "additionalProperties": false, + "required": ["personalAccessToken"], + "properties": { + "personalAccessToken": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "FileSystemSourceSchema": { + "type": "object", + "additionalProperties": false, + "required": ["filesystem"], + "properties": { + "filesystem": { + "$ref": "#/definitions/FileSystemSourceOptions" + } + } + }, + "FileSystemSourceOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "directory": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "RunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "openapi": { + "$ref": "#/definitions/OpenApiRunOptions" + }, + "wsdl": { + "$ref": "#/definitions/WsdlRunOptions" + }, + "asyncapi": { + "$ref": "#/definitions/AsyncApiRunOptions" + }, + "graphqlsdl": { + "$ref": "#/definitions/GraphQLSdlRunOptions" + }, + "protobuf": { + "$ref": "#/definitions/ProtobufRunOptions" + } + } + }, + "TestRunOptionsOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/TestRunOptions" + } + }, + "TestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "openapi": { + "$ref": "#/definitions/OpenApiTestRunOptions" + }, + "wsdl": { + "$ref": "#/definitions/WsdlTestRunOptions" + }, + "asyncapi": { + "$ref": "#/definitions/AsyncApiTestRunOptions" + }, + "graphqlsdl": { + "$ref": "#/definitions/GraphqlSdlTestRunOptions" + }, + "protobuf": { + "$ref": "#/definitions/ProtobufTestRunOptions" + } + } + }, + "MockRunOptionsOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/MockRunOptions" + } + }, + "MockRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "openapi": { + "$ref": "#/definitions/OpenApiMockRunOptions" + }, + "wsdl": { + "$ref": "#/definitions/WsdlMockRunOptions" + }, + "asyncapi": { + "$ref": "#/definitions/AsyncApiMockRunOptions" + }, + "graphqlsdl": { + "$ref": "#/definitions/GraphqlSdlMockRunOptions" + }, + "protobuf": { + "$ref": "#/definitions/ProtobufMockRunOptions" + } + } + }, + "OpenApiRunOptions": { + "type": "object", + "required": ["type"], + "if": { + "properties": { + "type": { + "const": "test" + } + } + }, + "then": { + "$ref": "#/definitions/OpenApiTestRunOptions" + }, + "else": { + "$ref": "#/definitions/OpenApiMockRunOptions" + } + }, + "AsyncApiRunOptions": { + "type": "object", + "required": ["type"], + "if": { + "properties": { + "type": { + "const": "test" + } + } + }, + "then": { + "$ref": "#/definitions/AsyncApiTestRunOptions" + }, + "else": { + "$ref": "#/definitions/AsyncApiMockRunOptions" + } + }, + "GraphQLSdlRunOptions": { + "type": "object", + "required": ["type"], + "if": { + "properties": { + "type": { + "const": "test" + } + } + }, + "then": { + "$ref": "#/definitions/GraphqlSdlTestRunOptions" + }, + "else": { + "$ref": "#/definitions/GraphqlSdlMockRunOptions" + } + }, + "ProtobufRunOptions": { + "type": "object", + "required": ["type"], + "if": { + "properties": { + "type": { + "const": "test" + } + } + }, + "then": { + "$ref": "#/definitions/ProtobufTestRunOptions" + }, + "else": { + "$ref": "#/definitions/ProtobufMockRunOptions" + } + }, + "WsdlRunOptions": { + "type": "object", + "required": ["type"], + "if": { + "properties": { + "type": { + "const": "test" + } + } + }, + "then": { + "$ref": "#/definitions/WsdlTestRunOptions" + }, + "else": { + "$ref": "#/definitions/WsdlMockRunOptions" + } + }, + "WsdlTestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "test" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "WsdlMockRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "mock" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "cert": { + "$ref": "#/definitions/CertConfigurationOrRef" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "AsyncApiTestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "test" + }, + "replyTimeout": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "subscriberReadinessWaitTimeout": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/definitions/AsyncApiServerDefinition" + } + }, + "schemaRegistry": { + "$ref": "#/definitions/AsyncApiSchemaRegistry" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "AsyncApiServerDefinition": { + "type": "object", + "additionalProperties": false, + "required": ["host", "protocol"], + "properties": { + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "protocol": { + "$ref": "#/definitions/SubstitutableString" + }, + "adminCredentials": { + "$ref": "#/definitions/FreeFormObject" + }, + "client": { + "type": "object", + "additionalProperties": false, + "properties": { + "consumer": { + "$ref": "#/definitions/CertConfigurationOrRef" + }, + "producer": { + "$ref": "#/definitions/CertConfigurationOrRef" + } + } + } + } + }, + "AsyncApiMockRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "mock" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + }, + "servers": { + "type": "array", + "items": { + "$ref": "#/definitions/AsyncApiServerDefinition" + } + }, + "schemaRegistry": { + "$ref": "#/definitions/AsyncApiSchemaRegistry" + }, + "inMemoryBroker": { + "type": "object", + "additionalProperties": false, + "properties": { + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "logDir": { + "$ref": "#/definitions/SubstitutableString" + } + } + } + } + }, + "AsyncApiSchemaRegistry": { + "type": "object", + "additionalProperties": false, + "required": ["kind"], + "properties": { + "kind": { + "anyOf": [ + { + "type": "string", + "enum": ["CONFLUENT", "DEFAULT"] + }, + { + "$ref": "#/definitions/SubstitutableString" + } + ] + }, + "url": { + "$ref": "#/definitions/SubstitutableString" + }, + "username": { + "$ref": "#/definitions/SubstitutableString" + }, + "password": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "GraphqlSdlTestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "test" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "GraphqlSdlMockRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "mock" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "ProtobufTestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "test" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "importPaths": { + "$ref": "#/definitions/SubstitutableStringArray" + }, + "protocVersion": { + "$ref": "#/definitions/SubstitutableString" + }, + "requestTimeout": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "ProtobufMockRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "mock" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "importPaths": { + "$ref": "#/definitions/SubstitutableStringArray" + }, + "protocVersion": { + "$ref": "#/definitions/SubstitutableString" + }, + "specs": { + "$ref": "#/definitions/SpecificationRuntimeDefinitionArray" + } + } + }, + "OpenApiTestRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "const": "test" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "filter": { + "$ref": "#/definitions/SubstitutableString" + }, + "workflow": { + "$ref": "#/definitions/WorkflowConfigurationV3" + }, + "swaggerUiBaseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "swaggerUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "actuatorUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "specs": { + "$ref": "#/definitions/OpenApiSpecificationRuntimeDefinitionArray" + } + } + }, + "OpenApiMockRunOptions": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "enum": ["mock", "stateful-mock"] + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "filter": { + "$ref": "#/definitions/SubstitutableString" + }, + "logMode": { + "anyOf": [ + { + "type": "string", + "enum": ["ALL", "REQUEST_RESPONSE"] + }, + { + "$ref": "#/definitions/SubstitutableString" + } + ] + }, + "logsDirPath": { + "$ref": "#/definitions/SubstitutableString" + }, + "cert": { + "$ref": "#/definitions/CertConfigurationOrRef" + }, + "specs": { + "$ref": "#/definitions/OpenApiSpecificationRuntimeDefinitionArray" + } + } + }, + "OpenApiSpecificationRuntimeDefinitionArray": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["spec"], + "properties": { + "spec": { + "$ref": "#/definitions/OpenApiSpecificationRuntimeDefinition" + } + } + } + }, + "SpecificationRuntimeDefinitionArray": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["spec"], + "properties": { + "spec": { + "$ref": "#/definitions/SpecificationRuntimeDefinition" + } + } + } + }, + "FreeFormObject": { + "type": "object", + "additionalProperties": {} + }, + "SpecificationRuntimeDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "overlayFilePath": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "OpenApiSpecificationRuntimeDefinition": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "host": { + "$ref": "#/definitions/SubstitutableString" + }, + "port": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "baseUrl": { + "$ref": "#/definitions/SubstitutableString" + }, + "overlayFilePath": { + "$ref": "#/definitions/SubstitutableString" + }, + "securitySchemes": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SecuritySchemeConfigurationV3" + } + } + } + }, + "SecuritySchemeConfigurationV3": { + "type": "object", + "additionalProperties": false, + "required": ["type", "token"], + "properties": { + "type": { + "type": "string", + "enum": ["oauth2", "basicAuth", "bearer", "apiKey"] + }, + "token": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "WorkflowConfigurationV3": { + "type": "object", + "additionalProperties": false, + "properties": { + "ids": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "extract": { + "$ref": "#/definitions/SubstitutableString" + }, + "use": { + "$ref": "#/definitions/SubstitutableString" + } + } + } + } + } + }, + "ExamplesConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "testExamples": { + "type": "array", + "items": { + "$ref": "#/definitions/BaseExampleConfigurationOrRef" + } + }, + "mockExamples": { + "type": "array", + "items": { + "$ref": "#/definitions/BaseExampleConfigurationOrRef" + } + }, + "commonExamples": { + "$ref": "#/definitions/BaseExampleConfiguration" + } + } + }, + "ArrayExampleConfigurationOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/ArrayExampleConfiguration" + } + }, + "ArrayExampleConfiguration": { + "type": "array", + "items": { + "$ref": "#/definitions/BaseExampleConfigurationOrRef" + } + }, + "BaseExampleConfigurationOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/BaseExampleConfiguration" + } + }, + "BaseExampleConfiguration": { + "type": "object", + "additionalProperties": false, + "required": ["directories"], + "properties": { + "directories": { + "$ref": "#/definitions/SubstitutableStringArray" + } + } + }, + "DictionaryConfigurationOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/DictionaryConfiguration" + } + }, + "DictionaryConfiguration": { + "type": "object", + "additionalProperties": false, + "required": ["path"], + "properties": { + "path": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "AdapterConfigurationOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/AdapterConfiguration" + } + }, + "AdapterConfiguration": { + "type": "object", + "additionalProperties": false, + "properties": { + "pre_specmatic_request_processor": { + "$ref": "#/definitions/SubstitutableString" + }, + "post_specmatic_response_processor": { + "$ref": "#/definitions/SubstitutableString" + }, + "pre_specmatic_response_processor": { + "$ref": "#/definitions/SubstitutableString" + }, + "stub_load_contract": { + "$ref": "#/definitions/SubstitutableString" + }, + "test_load_contract": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "CertConfigurationOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/CertConfiguration" + } + }, + "CertConfiguration": { + "type": "object", + "additionalProperties": false, + "required": ["keyStore"], + "properties": { + "keyStore": { + "$ref": "#/definitions/KeyStoreConfiguration" + }, + "keyStorePassword": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "ConcreteSettingsOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/ConcreteSettings" + } + }, + "ModeSpecificSettings": { + "type": "object", + "anyOf": [ + { + "$ref": "#/definitions/TestSettings" + }, + { + "$ref": "#/definitions/MockSettings" + } + ] + }, + "ConcreteSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "general": { + "$ref": "#/definitions/GeneralSettings" + }, + "test": { + "$ref": "#/definitions/TestSettings" + }, + "mock": { + "$ref": "#/definitions/MockSettings" + }, + "proxy": { + "$ref": "#/definitions/ProxySettings" + }, + "backwardCompatibility": { + "$ref": "#/definitions/BackwardCompatibilitySettings" + } + } + }, + "KeyStoreConfiguration": { + "oneOf": [ + { + "$ref": "#/definitions/KeyStoreFileConfiguration" + }, + { + "$ref": "#/definitions/KeyStoreDirectoryConfiguration" + } + ] + }, + "KeyStoreFileConfiguration": { + "type": "object", + "additionalProperties": false, + "required": ["file"], + "properties": { + "file": { + "$ref": "#/definitions/SubstitutableString" + }, + "password": { + "$ref": "#/definitions/SubstitutableString" + }, + "alias": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "KeyStoreDirectoryConfiguration": { + "type": "object", + "additionalProperties": false, + "required": ["directory"], + "properties": { + "directory": { + "$ref": "#/definitions/SubstitutableString" + }, + "password": { + "$ref": "#/definitions/SubstitutableString" + }, + "alias": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "BackwardCompatibilitySettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "baseBranch": { + "$ref": "#/definitions/SubstitutableString" + }, + "targetPath": { + "$ref": "#/definitions/SubstitutableString" + }, + "repoDirectory": { + "$ref": "#/definitions/SubstitutableString" + }, + "strictMode": { + "$ref": "#/definitions/SubstitutableBoolean" + } + } + }, + "ProxySettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "recordRequests": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "ignoreHeaders": { + "$ref": "#/definitions/SubstitutableStringArray" + } + } + }, + "MockSettingsOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/MockSettings" + } + }, + "MockSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "generative": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "delayInMilliseconds": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "startTimeoutInMilliseconds": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "hotReload": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "strictMode": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "lenientMode": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "gracefulRestartTimeoutInMilliseconds": { + "$ref": "#/definitions/SubstitutableInteger" + } + } + }, + "TestSettingsOrRef": { + "if": { + "type": "object", + "required": ["$ref"], + "properties": { + "$ref": { + "type": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Reference" + }, + "else": { + "$ref": "#/definitions/TestSettings" + } + }, + "TestSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "schemaResiliencyTests": { + "anyOf": [ + { + "type": "string", + "enum": ["all", "none", "positiveOnly"] + }, + { + "$ref": "#/definitions/SubstitutableString" + } + ] + }, + "timeoutInMilliseconds": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "strictMode": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "lenientMode": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "parallelism": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "maxTestRequestCombinations": { + "$ref": "#/definitions/SubstitutableInteger" + }, + "junitReportDir": { + "$ref": "#/definitions/SubstitutableString" + }, + "validateResponseValues": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "maxTestCount": { + "$ref": "#/definitions/SubstitutableInteger" + } + } + }, + "GeneralSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "disableTelemetry": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "ignoreInlineExamples": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "ignoreInlineExampleWarnings": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "prettyPrint": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "logging": { + "$ref": "#/definitions/LoggingSettings" + }, + "featureFlags": { + "$ref": "#/definitions/FeatureFlags" + }, + "specExamplesDirectoryTemplate": { + "$ref": "#/definitions/SubstitutableString" + }, + "sharedExamplesDirectoryTemplate": { + "$ref": "#/definitions/SubstitutableStringArray" + } + } + }, + "LoggingSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "level": { + "anyOf": [ + { + "type": "string", + "enum": ["DEBUG", "INFO"] + }, + { + "$ref": "#/definitions/SubstitutableString" + } + ] + }, + "text": { + "$ref": "#/definitions/LogOutputSettings" + }, + "json": { + "$ref": "#/definitions/LogOutputSettings" + } + } + }, + "LogOutputSettings": { + "type": "object", + "additionalProperties": false, + "properties": { + "directory": { + "$ref": "#/definitions/SubstitutableString" + }, + "console": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "logFilePrefix": { + "$ref": "#/definitions/SubstitutableString" + } + } + }, + "FeatureFlags": { + "type": "object", + "additionalProperties": false, + "properties": { + "fuzzyMatcherForPayloads": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "schemaExampleDefault": { + "$ref": "#/definitions/SubstitutableBoolean" + }, + "escapeSoapAction": { + "$ref": "#/definitions/SubstitutableBoolean" + } + } } } } diff --git a/src/test/specmatic/specmatic-uber-v3.json b/src/test/specmatic/specmatic-uber-v3.json new file mode 100644 index 00000000000..ef9987db9d6 --- /dev/null +++ b/src/test/specmatic/specmatic-uber-v3.json @@ -0,0 +1,432 @@ +{ + "components": { + "adapters": { + "apiServiceHooks": { + "post_specmatic_response_processor": "./hooks/encode_response_to_consumer.sh", + "pre_specmatic_request_processor": "./hooks/decode_request_from_consumer.sh", + "pre_specmatic_response_processor": "./hooks/decode_response_from_provider.sh" + }, + "productServiceHooks": { + "pre_specmatic_request_processor": "./hooks/decode_request_from_consumer.sh", + "pre_specmatic_response_processor": "./hooks/decode_response_from_provider.sh" + } + }, + "certificates": { + "serverCert": { + "keyStore": { + "alias": "specmatic_server", + "file": "./certs/proxy-keystore.jks", + "password": "changeit" + }, + "keyStorePassword": "changeit" + } + }, + "dictionaries": { + "globalDictionary": { + "path": "./dictionaries/global-dictionary.yaml" + }, + "productServiceDictionary": { + "path": "./stub-dictionary.json" + } + }, + "examples": { + "commonExamples": { + "directories": [ + "./common-examples-for-my-service", + "./common-examples-for-all-service" + ] + }, + "mockExamples": [ + { + "directories": ["./mock-examples", "./mock-data"] + }, + { + "$ref": "#/components/examples/commonExamples" + } + ], + "testExamples": [ + { + "directories": ["./test-examples", "./test-examples", "./test-data"] + }, + { + "$ref": "#/components/examples/commonExamples" + } + ] + }, + "runOptions": { + "orderApiService": { + "openapi": { + "actuatorUrl": "http://localhost:8080/actuator", + "baseUrl": "${ORDER_API_SERVICE_BASE_URL:http://localhost:8080}", + "specs": [ + { + "spec": { + "id": "orderAPIServiceSpec", + "overlayFilePath": "./overlays/order-service-overlay.yaml", + "securitySchemes": { + "apiKeyScheme": { + "token": "${API_KEY:default_API_key_value}", + "type": "apiKey" + }, + "basicScheme": { + "token": "${BASIC_AUTH_USER:default_user}:${BASIC_AUTH_PWD:default_pwd}", + "type": "basicAuth" + }, + "bearerScheme": { + "token": "${BEARER_TOKEN:default_bearer_token}", + "type": "bearer" + }, + "oauthScheme": { + "token": "${OAUTH2_TOKEN:default_token_value}", + "type": "oauth2" + } + } + } + }, + { + "spec": { + "id": "userAPIServiceSpec", + "overlayFilePath": "./overlays/user-service-overlay.yaml" + } + } + ], + "swaggerUrl": "http://localhost:8080/v3/api-docs", + "type": "test", + "workflow": { + "ids": { + "*": { + "use": "$.globalId" + }, + "createUser": { + "extract": "$.userId" + } + } + } + } + }, + "userApiService": { + "asyncapi": { + "inMemoryBroker": { + "host": "localhost", + "port": 9092 + }, + "servers": [ + { + "host": "localhost:9092", + "protocol": "kafka" + } + ], + "type": "mock" + }, + "openapi": { + "baseUrl": "${USER_API_SERVICE_BASE_URL:http://localhost:9000}", + "cert": { + "$ref": "#/components/certificates/serverCert" + }, + "filter": "PATH=\"/order\" && METHOD=\"POST\"", + "logMode": "REQUEST_RESPONSE", + "logsDirPath": "./vs-logs", + "specs": [ + { + "spec": { + "id": "userAPIServiceSpec", + "securitySchemes": { + "bearerScheme": { + "token": "${USER_API_BEARER_TOKEN:default_user_bearer_token}", + "type": "bearer" + } + } + } + } + ], + "type": "stateful-mock" + } + } + }, + "services": { + "orderApiService": { + "definitions": [ + { + "definition": { + "source": { + "$ref": "#/components/sources/specsRepo" + }, + "specs": [ + { + "spec": { + "id": "orderAPIServiceSpec", + "path": "api_specs/oas/order-api-oas.yaml", + "urlPathPrefix": "/v1/http/orders" + } + }, + { + "spec": { + "path": "api_specs/proto/order-api-grpc.proto" + } + } + ] + } + }, + { + "definition": { + "source": { + "$ref": "#/components/sources/localSpecs" + }, + "specs": [ + { + "spec": { + "path": "wsdl/soap.wsdl" + } + } + ] + } + } + ], + "description": "Order API Service" + }, + "productApiService": { + "definitions": [ + { + "definition": { + "source": { + "$ref": "#/components/sources/specsRepo" + }, + "specs": ["api_specs/proto/product-api.proto"] + } + } + ] + }, + "userApiService": { + "definitions": [ + { + "definition": { + "source": { + "$ref": "#/components/sources/specsRepo" + }, + "specs": [ + "api_specs/oas/user-api-oas.yaml", + "api_specs/async/user-api-asyncapi.yaml" + ] + } + } + ] + } + }, + "settings": { + "allMocks": { + "delayInMilliseconds": 100, + "strictMode": false + }, + "myGlobal": { + "backwardCompatibility": { + "baseBranch": "main", + "repoDirectory": "../specs", + "strictMode": true, + "targetPath": "specifications" + }, + "general": { + "disableTelemetry": false, + "featureFlags": { + "escapeSoapAction": false, + "fuzzyMatcherForPayloads": false, + "schemaExampleDefault": true + }, + "ignoreInlineExampleWarnings": false, + "ignoreInlineExamples": false, + "logging": { + "json": { + "console": false, + "directory": "./logs/json", + "logFilePrefix": "specmatic" + }, + "level": "INFO", + "text": { + "console": true, + "directory": "./logs/text", + "logFilePrefix": "specmatic" + } + }, + "prettyPrint": true + }, + "mock": { + "delayInMilliseconds": 250, + "generative": true, + "gracefulRestartTimeoutInMilliseconds": 10000, + "hotReload": true, + "startTimeoutInMilliseconds": 30000, + "strictMode": false + }, + "proxy": { + "ignoreHeaders": ["Authorization", "Cookie"], + "recordRequests": true + }, + "test": { + "junitReportDir": "./build/test-results/specmatic", + "maxTestRequestCombinations": 100, + "parallelism": "4", + "schemaResiliencyTests": "all", + "strictMode": true, + "timeoutInMilliseconds": 120000 + } + }, + "myService": { + "schemaResiliencyTests": "none", + "timeoutInMilliseconds": 45000 + }, + "userApiMock": { + "delayInMilliseconds": 50, + "strictMode": true + } + }, + "sources": { + "localSpecs": { + "filesystem": { + "directory": "./local-specs" + } + }, + "specsRepo": { + "git": { + "auth": { + "bearerFile": "bearer.txt" + }, + "branch": "main", + "matchBranch": true, + "url": "https://github.com/example/specs-repo.git" + } + } + } + }, + "dependencies": { + "data": { + "adapters": { + "$ref": "#/components/adapters/apiServiceHooks" + }, + "dictionary": { + "$ref": "#/components/dictionaries/globalDictionary" + }, + "examples": { + "$ref": "#/components/examples/mockExamples" + } + }, + "services": [ + { + "service": { + "$ref": "#/components/services/userApiService", + "runOptions": { + "$ref": "#/components/runOptions/userApiService" + } + } + }, + { + "service": { + "$ref": "#/components/services/productApiService", + "data": { + "adapters": { + "$ref": "#/components/adapters/productServiceHooks" + }, + "dictionary": { + "$ref": "#/components/dictionaries/productServiceDictionary" + }, + "examples": { + "$ref": "#/components/examples/mockExamples" + } + }, + "runOptions": { + "protobuf": { + "host": "localhost", + "importPaths": ["./proto-imports"], + "port": 10000, + "protocVersion": "3.15.0" + } + }, + "settings": { + "$ref": "#/components/settings/userApiMock" + } + } + } + ], + "settings": { + "$ref": "#/components/settings/allMocks" + } + }, + "mcp": { + "test": { + "baseUrl": "http://localhost:9100", + "bearerToken": "mcp-bearer-token", + "dictionaryFile": "./mcp-dictionary.json", + "enableResiliencyTests": true, + "filterTools": ["tool.alpha", "tool.beta"], + "skipTools": ["tool.gamma"], + "transportKind": "STREAMABLE_HTTP" + } + }, + "proxies": [ + { + "proxy": { + "adapters": { + "$ref": "#/components/adapters/apiServiceHooks" + }, + "baseUrl": "http://localhost:8888", + "cert": { + "$ref": "#/components/certificates/serverCert" + }, + "mock": ["specifications/proxy-api.yaml"], + "recordingsDirectory": "./proxy-recordings/example", + "target": "https://www.example.com/api", + "timeoutInMilliseconds": 15000 + } + }, + { + "proxy": { + "adapters": { + "$ref": "#/components/adapters/apiServiceHooks" + }, + "baseUrl": "http://localhost:9999", + "recordingsDirectory": "./proxy-recordings/foo-bar", + "target": "https://www.foo-bar.com/api" + } + } + ], + "specmatic": { + "governance": { + "report": { + "formats": "${REPORT_FORMAT:[html, ctrf]}", + "outputDirectory": "${REPORT_OUTPUT_DIR:./build/reports/specmatic}" + }, + "successCriteria": { + "enforce": "${ENFORCE_GOVERNANCE_CRITERIA:true}", + "maxMissedOperationsInSpec": "${MAX_MISSED_OPS:5}", + "minCoveragePercentage": "${MIN_COVERAGE:80}" + } + }, + "license": { + "path": "${LICENCE:~/.home/specmatic-license.txt}" + }, + "settings": { + "$ref": "#/components/settings/myGlobal" + } + }, + "systemUnderTest": { + "service": { + "$ref": "#/components/services/orderApiService", + "data": { + "adapters": { + "$ref": "#/components/adapters/apiServiceHooks" + }, + "dictionary": { + "$ref": "#/components/dictionaries/globalDictionary" + }, + "examples": { + "$ref": "#/components/examples/testExamples" + } + }, + "runOptions": { + "$ref": "#/components/runOptions/orderApiService" + }, + "settings": { + "$ref": "#/components/settings/myService" + } + } + }, + "version": 3 +} diff --git a/src/test/specmatic/specmatic.json b/src/test/specmatic/specmatic-v2.json similarity index 98% rename from src/test/specmatic/specmatic.json rename to src/test/specmatic/specmatic-v2.json index c6861cb783c..62bd97bbfdc 100644 --- a/src/test/specmatic/specmatic.json +++ b/src/test/specmatic/specmatic-v2.json @@ -15,7 +15,6 @@ "src/test/petstore.yaml", { "basePath": "/v1", - "baseUrl": "https://api.example.com", "host": "api.example.com", "port": 443, "specs": ["src/test/payments.yaml"] @@ -28,6 +27,7 @@ "provides": [ "src/test/petstore.yaml", { + "basePath": "/v1", "host": "localhost", "port": 8080, "resiliencyTests": { diff --git a/src/test/specmatic/specmatic-v3-dereffed.json b/src/test/specmatic/specmatic-v3-dereffed.json new file mode 100644 index 00000000000..8dcedfbb7d2 --- /dev/null +++ b/src/test/specmatic/specmatic-v3-dereffed.json @@ -0,0 +1,69 @@ +{ + "dependencies": { + "services": [ + { + "service": { + "definitions": [ + { + "definition": { + "source": { + "filesystem": { + "directory": "." + } + }, + "specs": ["product_search_bff_v5.yaml"] + } + } + ], + "runOptions": { + "openapi": { + "baseUrl": "http://0.0.0.0:9090", + "type": "mock" + } + } + } + } + ] + }, + "specmatic": { + "governance": { + "report": { + "outputDirectory": "file:///usr/src/app/build/reports/specmatic/" + }, + "successCriteria": { + "enforce": true, + "minCoveragePercentage": 70 + } + }, + "settings": { + "general": { + "prettyPrint": true + } + } + }, + "systemUnderTest": { + "service": { + "definitions": [ + { + "definition": { + "source": { + "filesystem": { + "directory": "." + } + }, + "specs": ["product_search_bff_v5.yaml"] + } + } + ], + "runOptions": { + "openapi": { + "baseUrl": "http://studio:9090" + } + }, + "settings": { + "schemaResiliencyTests": "all" + } + } + }, + "version": 3 +} diff --git a/src/test/specmatic/specmatic-v3-reffed.json b/src/test/specmatic/specmatic-v3-reffed.json new file mode 100644 index 00000000000..30ed0293e0d --- /dev/null +++ b/src/test/specmatic/specmatic-v3-reffed.json @@ -0,0 +1,73 @@ +{ + "components": { + "runOptions": { + "productSearchBffV5": { + "openapi": { + "baseUrl": "http://studio:9090", + "type": "mock" + } + } + }, + "services": { + "productSearchBffV5": { + "definitions": [ + { + "definition": { + "source": { + "filesystem": { + "directory": "." + } + }, + "specs": ["product_search_bff_v5.yaml"] + } + } + ] + } + }, + "settings": { + "productSearchBffV5": { + "schemaResiliencyTests": "all" + } + } + }, + "dependencies": { + "services": [ + { + "service": { + "$ref": "#/components/services/productSearchBffV5", + "runOptions": { + "$ref": "#/components/runOptions/productSearchBffV5" + } + } + } + ] + }, + "specmatic": { + "governance": { + "report": { + "outputDirectory": "file:///usr/src/app/build/reports/specmatic/" + }, + "successCriteria": { + "enforce": true, + "minCoveragePercentage": 70 + } + }, + "settings": { + "general": { + "prettyPrint": true + } + } + }, + "systemUnderTest": { + "service": { + "$ref": "#/components/services/productSearchBffV5", + "runOptions": { + "$ref": "#/components/runOptions/productSearchBffV5" + }, + "settings": { + "$ref": "#/components/settings/productSearchBffV5" + } + } + }, + "version": 3 +} From c026d9dbe59cabb6d958b8e731581a02cde41fdd Mon Sep 17 00:00:00 2001 From: Jo <10510431+j178@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:23:26 +0800 Subject: [PATCH 05/11] Merge pull request #5364 from j178/prek Update schema for prek --- src/schemas/json/prek.json | 367 +++++++++++++------------------------ 1 file changed, 129 insertions(+), 238 deletions(-) diff --git a/src/schemas/json/prek.json b/src/schemas/json/prek.json index c4620d7508f..c2f7650c0f4 100644 --- a/src/schemas/json/prek.json +++ b/src/schemas/json/prek.json @@ -1,7 +1,8 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://www.schemastore.org/prek.json", - "title": "prek configuration file format", + "title": "prek.toml", + "description": "The configuration file for prek, a git hook manager written in Rust.", "type": "object", "properties": { "repos": { @@ -12,14 +13,14 @@ }, "default_install_hook_types": { "description": "A list of `--hook-types` which will be used by default when running `prek install`.\nDefault is `[pre-commit]`.", - "type": ["array", "null"], + "type": "array", "items": { "$ref": "#/definitions/HookType" } }, "default_language_version": { "description": "A mapping from language to the default `language_version`.", - "type": ["object", "null"], + "type": "object", "properties": { "bun": { "type": "string" @@ -92,49 +93,35 @@ }, "default_stages": { "description": "A configuration-wide default for the stages property of hooks.\nDefault to all stages.", - "type": ["array", "null"], + "type": "array", "items": { "$ref": "#/definitions/Stage" } }, "files": { - "description": "Global file include pattern.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "Global file include pattern." }, "exclude": { - "description": "Global file exclude pattern.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "Global file exclude pattern." }, "fail_fast": { "description": "Set to true to have prek stop running hooks after the first failure.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "minimum_prek_version": { "description": "The minimum version of prek required to run this configuration.", - "type": ["string", "null"], - "default": null + "type": "string" }, "orphan": { "description": "Set to true to isolate this project from parent configurations in workspace mode.\nWhen true, files in this project are \"consumed\" by this project and will not be processed\nby parent projects.\nWhen false (default), files in subprojects are processed by both the subproject and\nany parent projects that contain them.", - "type": ["boolean", "null"] + "type": "boolean" } }, "required": ["repos"], "additionalProperties": true, + "x-tombi-toml-version": "v1.1.0", "definitions": { "Repo": { "description": "A repository of hooks, which can be remote, local, meta, or builtin.", @@ -152,7 +139,8 @@ { "$ref": "#/definitions/BuiltinRepo" } - ] + ], + "additionalProperties": true }, "RemoteRepo": { "type": "object", @@ -188,142 +176,117 @@ }, "name": { "description": "Override the name of the hook.", - "type": ["string", "null"] + "type": "string" }, "entry": { "description": "Override the entrypoint. Not documented in the official docs but works.", - "type": ["string", "null"] + "type": "string" }, "language": { - "description": "Override the language. Not documented in the official docs but works.", - "anyOf": [ - { - "$ref": "#/definitions/Language" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/Language", + "description": "Override the language. Not documented in the official docs but works." }, "priority": { "description": "Priority used by the scheduler to determine ordering and concurrency.\nHooks with the same priority can run in parallel.\n\nThis is only allowed in project config files (e.g. `.pre-commit-config.yaml`).\nIt is not allowed in manifests (e.g. `.pre-commit-hooks.yaml`).", - "type": ["integer", "null"], + "type": "integer", "minimum": 0 }, "alias": { "description": "Not documented in the official docs.", - "type": ["string", "null"] + "type": "string" }, "files": { - "description": "The pattern of files to run on.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "The pattern of files to run on." }, "exclude": { - "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing." }, "types": { "description": "List of file types to run on (AND).\nDefault is `[file]`, which matches all files.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "types_or": { "description": "List of file types to run on (OR).\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "exclude_types": { "description": "List of file types to exclude.\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "additional_dependencies": { "description": "Not documented in the official docs.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "args": { "description": "Additional arguments to pass to the hook.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "env": { "description": "Environment variables to set for the hook.", - "type": ["object", "null"], + "type": "object", "additionalProperties": { "type": "string" } }, "always_run": { "description": "This hook will run even if there are no matching files.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "fail_fast": { "description": "If this hook fails, don't run any more hooks.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "pass_filenames": { "description": "Append filenames that would be checked to the hook entry as arguments.\nDefault is true.", - "type": ["boolean", "null"] + "type": "boolean" }, "description": { "description": "A description of the hook. For metadata only.", - "type": ["string", "null"] + "type": "string" }, "language_version": { "description": "Run the hook on a specific version of the language.\nDefault is `default`.\nSee .", - "type": ["string", "null"] + "type": "string" }, "log_file": { "description": "Write the output of the hook to a file when the hook fails or verbose is enabled.", - "type": ["string", "null"] + "type": "string" }, "require_serial": { "description": "This hook will execute using a single process instead of in parallel.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "stages": { "description": "Select which git hook(s) to run for.\nDefault all stages are selected.\nSee .", - "type": ["array", "null"], + "type": "array", "items": { "$ref": "#/definitions/Stage" } }, "verbose": { "description": "Print the output of the hook even if it passes.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "minimum_prek_version": { "description": "The minimum version of prek required to run this hook.", - "type": ["string", "null"], - "default": null + "type": "string" } }, "required": ["id"], @@ -437,132 +400,110 @@ "type": "string" }, "language": { - "description": "The language of the hook. Tells prek how to install and run the hook.", - "allOf": [ - { - "$ref": "#/definitions/Language" - } - ] + "$ref": "#/definitions/Language", + "description": "The language of the hook. Tells prek how to install and run the hook." }, "priority": { "description": "Priority used by the scheduler to determine ordering and concurrency.\nHooks with the same priority can run in parallel.", - "type": ["integer", "null"], + "type": "integer", "minimum": 0 }, "alias": { "description": "Not documented in the official docs.", - "type": ["string", "null"] + "type": "string" }, "files": { - "description": "The pattern of files to run on.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "The pattern of files to run on." }, "exclude": { - "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing." }, "types": { "description": "List of file types to run on (AND).\nDefault is `[file]`, which matches all files.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "types_or": { "description": "List of file types to run on (OR).\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "exclude_types": { "description": "List of file types to exclude.\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "additional_dependencies": { "description": "Not documented in the official docs.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "args": { "description": "Additional arguments to pass to the hook.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "env": { "description": "Environment variables to set for the hook.", - "type": ["object", "null"], + "type": "object", "additionalProperties": { "type": "string" } }, "always_run": { "description": "This hook will run even if there are no matching files.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "fail_fast": { "description": "If this hook fails, don't run any more hooks.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "pass_filenames": { "description": "Append filenames that would be checked to the hook entry as arguments.\nDefault is true.", - "type": ["boolean", "null"] + "type": "boolean" }, "description": { "description": "A description of the hook. For metadata only.", - "type": ["string", "null"] + "type": "string" }, "language_version": { "description": "Run the hook on a specific version of the language.\nDefault is `default`.\nSee .", - "type": ["string", "null"] + "type": "string" }, "log_file": { "description": "Write the output of the hook to a file when the hook fails or verbose is enabled.", - "type": ["string", "null"] + "type": "string" }, "require_serial": { "description": "This hook will execute using a single process instead of in parallel.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "stages": { "description": "Select which git hook(s) to run for.\nDefault all stages are selected.\nSee .", - "type": ["array", "null"], + "type": "array", "items": { "$ref": "#/definitions/Stage" } }, "verbose": { "description": "Print the output of the hook even if it passes.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "minimum_prek_version": { "description": "The minimum version of prek required to run this hook.", - "type": ["string", "null"], - "default": null + "type": "string" } }, "required": ["id", "name", "entry", "language"], @@ -595,143 +536,118 @@ }, "name": { "description": "Override the name of the hook.", - "type": ["string", "null"] + "type": "string" }, "entry": { "description": "Entry is not allowed for predefined hooks.", "const": false }, "language": { - "anyOf": [ - { - "description": "Language must be `system` for predefined hooks (or omitted).", - "type": "string", - "enum": ["system"] - }, - { - "type": "null" - } - ] + "description": "Language must be `system` for predefined hooks (or omitted).", + "type": "string", + "enum": ["system"] }, "priority": { "description": "Priority used by the scheduler to determine ordering and concurrency.\nHooks with the same priority can run in parallel.\n\nThis is only allowed in project config files (e.g. `.pre-commit-config.yaml`).\nIt is not allowed in manifests (e.g. `.pre-commit-hooks.yaml`).", - "type": ["integer", "null"], + "type": "integer", "minimum": 0 }, "alias": { "description": "Not documented in the official docs.", - "type": ["string", "null"] + "type": "string" }, "files": { - "description": "The pattern of files to run on.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "The pattern of files to run on." }, "exclude": { - "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing." }, "types": { "description": "List of file types to run on (AND).\nDefault is `[file]`, which matches all files.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "types_or": { "description": "List of file types to run on (OR).\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "exclude_types": { "description": "List of file types to exclude.\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "additional_dependencies": { "description": "Not documented in the official docs.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "args": { "description": "Additional arguments to pass to the hook.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "env": { "description": "Environment variables to set for the hook.", - "type": ["object", "null"], + "type": "object", "additionalProperties": { "type": "string" } }, "always_run": { "description": "This hook will run even if there are no matching files.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "fail_fast": { "description": "If this hook fails, don't run any more hooks.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "pass_filenames": { "description": "Append filenames that would be checked to the hook entry as arguments.\nDefault is true.", - "type": ["boolean", "null"] + "type": "boolean" }, "description": { "description": "A description of the hook. For metadata only.", - "type": ["string", "null"] + "type": "string" }, "language_version": { "description": "Run the hook on a specific version of the language.\nDefault is `default`.\nSee .", - "type": ["string", "null"] + "type": "string" }, "log_file": { "description": "Write the output of the hook to a file when the hook fails or verbose is enabled.", - "type": ["string", "null"] + "type": "string" }, "require_serial": { "description": "This hook will execute using a single process instead of in parallel.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "stages": { "description": "Select which git hook(s) to run for.\nDefault all stages are selected.\nSee .", - "type": ["array", "null"], + "type": "array", "items": { "$ref": "#/definitions/Stage" } }, "verbose": { "description": "Print the output of the hook even if it passes.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "minimum_prek_version": { "description": "The minimum version of prek required to run this hook.", - "type": ["string", "null"], - "default": null + "type": "string" } }, "required": ["id"], @@ -768,143 +684,118 @@ }, "name": { "description": "Override the name of the hook.", - "type": ["string", "null"] + "type": "string" }, "entry": { "description": "Entry is not allowed for predefined hooks.", "const": false }, "language": { - "anyOf": [ - { - "description": "Language must be `system` for predefined hooks (or omitted).", - "type": "string", - "enum": ["system"] - }, - { - "type": "null" - } - ] + "description": "Language must be `system` for predefined hooks (or omitted).", + "type": "string", + "enum": ["system"] }, "priority": { "description": "Priority used by the scheduler to determine ordering and concurrency.\nHooks with the same priority can run in parallel.\n\nThis is only allowed in project config files (e.g. `.pre-commit-config.yaml`).\nIt is not allowed in manifests (e.g. `.pre-commit-hooks.yaml`).", - "type": ["integer", "null"], + "type": "integer", "minimum": 0 }, "alias": { "description": "Not documented in the official docs.", - "type": ["string", "null"] + "type": "string" }, "files": { - "description": "The pattern of files to run on.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "The pattern of files to run on." }, "exclude": { - "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing.", - "anyOf": [ - { - "$ref": "#/definitions/FilePattern" - }, - { - "type": "null" - } - ] + "$ref": "#/definitions/FilePattern", + "description": "Exclude files that were matched by `files`.\nDefault is `$^`, which matches nothing." }, "types": { "description": "List of file types to run on (AND).\nDefault is `[file]`, which matches all files.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "types_or": { "description": "List of file types to run on (OR).\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "exclude_types": { "description": "List of file types to exclude.\nDefault is `[]`.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" - }, - "default": null + } }, "additional_dependencies": { "description": "Not documented in the official docs.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "args": { "description": "Additional arguments to pass to the hook.", - "type": ["array", "null"], + "type": "array", "items": { "type": "string" } }, "env": { "description": "Environment variables to set for the hook.", - "type": ["object", "null"], + "type": "object", "additionalProperties": { "type": "string" } }, "always_run": { "description": "This hook will run even if there are no matching files.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "fail_fast": { "description": "If this hook fails, don't run any more hooks.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "pass_filenames": { "description": "Append filenames that would be checked to the hook entry as arguments.\nDefault is true.", - "type": ["boolean", "null"] + "type": "boolean" }, "description": { "description": "A description of the hook. For metadata only.", - "type": ["string", "null"] + "type": "string" }, "language_version": { "description": "Run the hook on a specific version of the language.\nDefault is `default`.\nSee .", - "type": ["string", "null"] + "type": "string" }, "log_file": { "description": "Write the output of the hook to a file when the hook fails or verbose is enabled.", - "type": ["string", "null"] + "type": "string" }, "require_serial": { "description": "This hook will execute using a single process instead of in parallel.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "stages": { "description": "Select which git hook(s) to run for.\nDefault all stages are selected.\nSee .", - "type": ["array", "null"], + "type": "array", "items": { "$ref": "#/definitions/Stage" } }, "verbose": { "description": "Print the output of the hook even if it passes.\nDefault is false.", - "type": ["boolean", "null"] + "type": "boolean" }, "minimum_prek_version": { "description": "The minimum version of prek required to run this hook.", - "type": ["string", "null"], - "default": null + "type": "string" } }, "required": ["id"], From 7bd9236c5b2548b91748f96d37c2f4aaf7441dd1 Mon Sep 17 00:00:00 2001 From: CEnnis91 Date: Fri, 13 Feb 2026 22:23:57 -0500 Subject: [PATCH 06/11] fix(hatch): better support build hooks under tombi strict (#5365) --- src/schemas/json/hatch.json | 12 +++++++++--- src/test/hatch/version-vcs.toml | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/schemas/json/hatch.json b/src/schemas/json/hatch.json index 6ae32ed6786..7c7730c817c 100644 --- a/src/schemas/json/hatch.json +++ b/src/schemas/json/hatch.json @@ -441,6 +441,9 @@ "only-include": { "$ref": "#/definitions/OnlyInclude" }, + "hooks": { + "$ref": "#/definitions/BuildHooks" + }, "dependencies": { "title": "Dependencies", "description": "Additional dependencies to install in the environment", @@ -564,7 +567,8 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/Target" - } + }, + "x-tombi-additional-key-label": "target_name" }, "Hook": { "title": "Build hook", @@ -618,7 +622,8 @@ "type": "boolean", "default": true } - } + }, + "additionalProperties": true }, "BuildHooks": { "title": "Build Hook Plugins", @@ -631,7 +636,8 @@ "type": "object", "additionalProperties": { "$ref": "#/definitions/Hook" - } + }, + "x-tombi-additional-key-label": "hook_name" }, "Build": { "title": "Build", diff --git a/src/test/hatch/version-vcs.toml b/src/test/hatch/version-vcs.toml index 38f209450a0..26fd4852365 100644 --- a/src/test/hatch/version-vcs.toml +++ b/src/test/hatch/version-vcs.toml @@ -3,3 +3,5 @@ source = "vcs" [build.hooks.vcs] version-file = "_version.py" +[build.targets.wheel.hooks.vcs] +version-file = "_version.py" From b54b6c3830df7b555bd5e4b7e2f778e631a9caf3 Mon Sep 17 00:00:00 2001 From: Jonathan Otsuka <105506+djgoku@users.noreply.github.com> Date: Fri, 13 Feb 2026 21:24:38 -0600 Subject: [PATCH 07/11] Merge pull request #5367 from djgoku/chore-switch-cirrus-yml-to-git-link chore: Switch `.cirrus.yml` from SchemaStore to github URL --- src/api/json/catalog.json | 2 +- src/schema-validation.jsonc | 4 - src/schemas/json/cirrus.json | 4591 ------------------------------ src/test/cirrus/credentials.yaml | 3 - src/test/cirrus/node.json | 13 - 5 files changed, 1 insertion(+), 4612 deletions(-) delete mode 100644 src/schemas/json/cirrus.json delete mode 100644 src/test/cirrus/credentials.yaml delete mode 100644 src/test/cirrus/node.json diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index c79b55013c8..2b28140e5f4 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -1749,7 +1749,7 @@ "name": ".cirrus.yml", "description": "Cirrus CI configuration files", "fileMatch": [".cirrus.yml"], - "url": "https://www.schemastore.org/cirrus.json" + "url": "https://raw.githubusercontent.com/cirruslabs/cirrus-cli/main/pkg/parser/testdata/cirrus.json" }, { "name": ".clasp.json", diff --git a/src/schema-validation.jsonc b/src/schema-validation.jsonc index 0108ce7b4dc..ac9fb14771c 100644 --- a/src/schema-validation.jsonc +++ b/src/schema-validation.jsonc @@ -42,7 +42,6 @@ "catalog-info.json", "chrome-manifest.json", "chutzpah.json", - "cirrus.json", "cloud-sdk-pipeline-config-schema.json", "cloudify.json", "codeclimate.json", @@ -789,9 +788,6 @@ "cinnamon-spice.info.json": { "externalSchema": ["base.json"] }, - "cirrus.json": { - "unknownKeywords": ["fileMatch"] - }, "clang-format.json": { "externalSchema": ["clang-format-21.x.json"] }, diff --git a/src/schemas/json/cirrus.json b/src/schemas/json/cirrus.json deleted file mode 100644 index e3bee51229e..00000000000 --- a/src/schemas/json/cirrus.json +++ /dev/null @@ -1,4591 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "fileMatch": [".cirrus.yml"], - "id": "https://cirrus-ci.org/", - "patternProperties": { - "^(.*)docker_builder$": { - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "properties": { - "alias": { - "type": "string" - }, - "allow_failures": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "always": { - "description": "ALWAYS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "auto_cancellation": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "depends_on": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of task names this task depends on." - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "execution_lock": { - "description": "Lock name for triggering and execution", - "type": "string" - }, - "experimental": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "name": { - "type": "string" - }, - "on_failure": { - "description": "ON_FAILURE commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "on_success": { - "description": "ON_SUCCESS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "only_if": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "os_version": { - "description": "Windows version of container.", - "enum": ["2019", "1709", "1803"] - }, - "platform": { - "description": "Container Platform.", - "enum": ["linux", "windows"] - }, - "required_pr_labels": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of required labels on a PR." - }, - "skip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "skip_notifications": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "stateful": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "timeout_in": { - "description": "Task timeout in minutes", - "type": "string" - }, - "trigger_type": { - "description": "Trigger type", - "enum": ["automatic", "manual"] - }, - "use_compute_credits": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)gke_pipe$": { - "properties": { - "alias": { - "type": "string" - }, - "allow_failures": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "auto_cancellation": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "cluster_name": { - "description": "GKE cluster name.", - "type": "string" - }, - "depends_on": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of task names this task depends on." - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "execution_lock": { - "description": "Lock name for triggering and execution", - "type": "string" - }, - "experimental": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "gcp_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "name": { - "type": "string" - }, - "namespace": { - "description": "Kubernetes namespace to schedule CI jobs in.", - "type": "string" - }, - "only_if": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "required_pr_labels": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of required labels on a PR." - }, - "resources": { - "description": "Pipe resources", - "properties": { - "cpu": { - "type": "number" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - } - }, - "type": "object" - }, - "skip_notifications": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "stateful": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "steps": { - "items": [ - { - "description": "Pipe step", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "properties": { - "always": { - "description": "ALWAYS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image to use.", - "type": "string" - }, - "on_failure": { - "description": "ON_FAILURE commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "on_success": { - "description": "ON_SUCCESS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - } - }, - "required": ["image"], - "type": "object" - } - ], - "type": "array" - }, - "timeout_in": { - "description": "Task timeout in minutes", - "type": "string" - }, - "trigger_type": { - "description": "Trigger type", - "enum": ["automatic", "manual"] - }, - "use_compute_credits": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "zone": { - "description": "Google Cloud zone of the cluster.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "^(.*)pipe$": { - "properties": { - "alias": { - "type": "string" - }, - "allow_failures": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "auto_cancellation": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "depends_on": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of task names this task depends on." - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "execution_lock": { - "description": "Lock name for triggering and execution", - "type": "string" - }, - "experimental": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "name": { - "type": "string" - }, - "only_if": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "required_pr_labels": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of required labels on a PR." - }, - "resources": { - "description": "Pipe resources", - "properties": { - "cpu": { - "type": "number" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - } - }, - "type": "object" - }, - "skip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "skip_notifications": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "stateful": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "steps": { - "items": [ - { - "description": "Pipe step", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "properties": { - "always": { - "description": "ALWAYS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image to use.", - "type": "string" - }, - "on_failure": { - "description": "ON_FAILURE commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "on_success": { - "description": "ON_SUCCESS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - } - }, - "required": ["image"], - "type": "object" - } - ], - "type": "array" - }, - "timeout_in": { - "description": "Task timeout in minutes", - "type": "string" - }, - "trigger_type": { - "description": "Trigger type", - "enum": ["automatic", "manual"] - }, - "use_compute_credits": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)task$": { - "description": "Cirrus CI task definition.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "properties": { - "alias": { - "type": "string" - }, - "allow_failures": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "always": { - "description": "ALWAYS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "auto_cancellation": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "aws_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "azure_container_instance": { - "description": "Azure Container Instance definition.", - "properties": { - "cpu": { - "type": "number" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "platform": { - "description": "Container Platform.", - "enum": ["linux", "windows"] - }, - "region": { - "description": "Azure zone.", - "enum": ["westus", "eastus"] - }, - "resource_group": { - "type": "string" - } - }, - "type": "object" - }, - "azure_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "compute_engine_instance": { - "description": "Compute Engine instance definition.", - "properties": { - "cpu": { - "type": "number" - }, - "disk": { - "type": "number" - }, - "image": { - "description": "Image name or family.", - "type": "string" - }, - "image_project": { - "description": "Google Cloud project of an image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "nested_virtualization": { - "type": "boolean" - }, - "platform": { - "description": "VM platform.", - "enum": ["freebsd", "linux", "windows", "solaris"] - } - }, - "type": "object" - }, - "container": { - "description": "Container definition for Community Cluster.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "cpu": { - "type": "number" - }, - "docker_arguments": { - "description": "Arguments for Docker build", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "dockerfile": { - "description": "Relative path to Dockerfile to build container from.", - "type": "string" - }, - "image": { - "description": "Docker Image to use.", - "type": "string" - }, - "kvm": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "registry_config": { - "type": "string" - }, - "use_in_memory_disk": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - }, - "depends_on": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of task names this task depends on." - }, - "ec2_instance": { - "description": "AWS EC2 definition.", - "properties": { - "image": { - "description": "AMI Image.", - "type": "string" - }, - "platform": { - "description": "Image Platform.", - "enum": ["freebsd", "linux", "windows", "solaris"] - }, - "region": { - "description": "AWS region.", - "enum": [ - "eu-north-1", - "eu-west-3", - "eu-west-2", - "eu-west-1", - "eu-central-1", - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2" - ] - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "eks_container": { - "description": "EKS Container definition.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "cluster_name": { - "description": "EKS cluster name.", - "type": "string" - }, - "cpu": { - "type": "number" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "namespace": { - "description": "Kubernetes namespace to schedule CI jobs in.", - "type": "string" - }, - "privileged": { - "type": "boolean" - }, - "region": { - "description": "AWS region.", - "enum": [ - "eu-north-1", - "eu-west-3", - "eu-west-2", - "eu-west-1", - "eu-central-1", - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2" - ] - }, - "registry_config": { - "type": "string" - }, - "use_in_memory_disk": { - "type": "boolean" - } - }, - "type": "object" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "execution_lock": { - "description": "Lock name for triggering and execution", - "type": "string" - }, - "experimental": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "freebsd_instance": { - "description": "macOS Virtual Machine definition for Community Cluster.", - "properties": { - "cpu": { - "type": "number" - }, - "image": { - "description": "FreeBSD VM image.", - "type": "string" - }, - "image_family": { - "description": "Image family.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - }, - "gce_container": { - "description": "Google Compute Engine Virtual Machine definition.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "container": { - "description": "Container image.", - "type": "string" - }, - "cpu": { - "type": "number" - }, - "disk": { - "type": "number" - }, - "enable_nested_virtualization": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "image_family": { - "description": "Image family.", - "type": "string" - }, - "image_name": { - "description": "Image name.", - "type": "string" - }, - "image_project": { - "description": "Google Cloud project of an image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "preemptible": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "scopes": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Google Cloud Scopes of the VM." - }, - "use_ssd": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "zone": { - "description": "Google Cloud zone where to start a VM.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "gce_instance": { - "description": "Google Compute Engine Virtual Machine definition.", - "properties": { - "cpu": { - "type": "number" - }, - "disk": { - "type": "number" - }, - "enable_nested_virtualization": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "image_family": { - "description": "Image family.", - "type": "string" - }, - "image_name": { - "description": "Image name.", - "type": "string" - }, - "image_project": { - "description": "Google Cloud project of an image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "platform": { - "description": "VM platform.", - "enum": ["freebsd", "linux", "windows", "solaris"] - }, - "preemptible": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "scopes": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Google Cloud Scopes of the VM." - }, - "type": { - "description": "Machine Type.", - "type": "string" - }, - "use_ssd": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "zone": { - "description": "Google Cloud zone where to start a VM.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "gcp_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "gke_container": { - "description": "Google Kubernetes Engine Container definition.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "builder_image_name": { - "description": "Image name.", - "type": "string" - }, - "builder_image_project": { - "description": "Google Cloud project of an image used to build Docker container from Dockerfile.", - "type": "string" - }, - "cluster_name": { - "description": "GKE cluster name.", - "type": "string" - }, - "cpu": { - "type": "number" - }, - "docker_arguments": { - "description": "Arguments for Docker build", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "dockerfile": { - "description": "Relative path to Dockerfile.", - "type": "string" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "namespace": { - "description": "Kubernetes namespace to schedule CI jobs in.", - "type": "string" - }, - "platform": { - "description": "Container Platform.", - "enum": ["linux", "windows"] - }, - "privileged": { - "type": "boolean" - }, - "registry_config": { - "type": "string" - }, - "use_in_memory_disk": { - "type": "boolean" - }, - "zone": { - "description": "Google Cloud zone of the cluster.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "macos_instance": { - "description": "macOS Virtual Machine definition for Community Cluster.", - "properties": { - "image": { - "description": "macOS VM image.", - "type": "string" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "on_failure": { - "description": "ON_FAILURE commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "on_success": { - "description": "ON_SUCCESS commands.", - "patternProperties": { - "^(.*)artifacts$": { - "properties": { - "format": { - "description": "Content Format.", - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "description": "Path or pattern of artifacts.", - "type": "string" - }, - "paths": { - "items": [ - { - "description": "Path or pattern of artifacts.", - "type": "string" - } - ], - "type": "array" - }, - "type": { - "description": "Content Type.", - "type": "string" - } - }, - "type": "object" - }, - "^(.*)background_script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - }, - "^(.*)cache$": { - "description": "Folder Cache Definition.", - "properties": { - "fingerprint_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Script that is used to calculate cache key." - }, - "folder": { - "description": "Path of a folder to cache.", - "type": "string" - }, - "name": { - "type": "string" - }, - "populate_script": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "In case of a cache miss this script will be executed." - }, - "reupload_on_changes": { - "description": "Boolean expression. A flag to check if contents of folder has changed after a cache hit.", - "type": "string" - } - }, - "required": ["folder"], - "type": "object" - }, - "^(.*)file$": { - "properties": { - "name": { - "type": "string" - }, - "path": { - "description": "Destination path.", - "type": "string" - }, - "variable_name": { - "description": "Environment variable name.", - "type": "string" - } - }, - "required": ["path", "variable_name"], - "type": "object" - }, - "^(.*)script$": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ] - } - }, - "type": "object" - }, - "only_if": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "osx_instance": { - "description": "macOS Virtual Machine definition for Community Cluster.", - "properties": { - "image": { - "description": "macOS VM image.", - "type": "string" - } - }, - "type": "object" - }, - "persistent_worker": { - "description": "Persistent Worker definition.", - "properties": { - "isolation": { - "description": "Persistent Worker isolation.", - "properties": { - "parallels": { - "description": "Parallels VM isolation.", - "properties": { - "image": { - "description": "Image name.", - "type": "string" - }, - "password": { - "description": "SSH password", - "type": "string" - }, - "platform": { - "description": "Image Platform.", - "enum": ["darwin", "linux", "windows"] - }, - "user": { - "description": "SSH username", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "labels": { - "description": "Labels for selection.", - "type": "string" - } - }, - "type": "object" - }, - "required_pr_labels": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "List of required labels on a PR." - }, - "skip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "skip_notifications": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "stateful": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "timeout_in": { - "description": "Task timeout in minutes", - "type": "string" - }, - "trigger_type": { - "description": "Trigger type", - "enum": ["automatic", "manual"] - }, - "use_compute_credits": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "windows_container": { - "description": "Windows Container definition for Community Cluster.", - "properties": { - "cpu": { - "type": "number" - }, - "docker_arguments": { - "description": "Arguments for Docker build", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "dockerfile": { - "description": "Relative path to Dockerfile to build container from.", - "type": "string" - }, - "image": { - "description": "Docker Image to use.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "os_version": { - "description": "Windows version of container.", - "enum": ["2019", "1709", "1803"] - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "properties": { - "allow_failures": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "auto_cancellation": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "aws_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "azure_container_instance": { - "description": "Azure Container Instance definition.", - "properties": { - "cpu": { - "type": "number" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "platform": { - "description": "Container Platform.", - "enum": ["linux", "windows"] - }, - "region": { - "description": "Azure zone.", - "enum": ["westus", "eastus"] - }, - "resource_group": { - "type": "string" - } - }, - "type": "object" - }, - "azure_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "compute_engine_instance": { - "description": "Compute Engine instance definition.", - "properties": { - "cpu": { - "type": "number" - }, - "disk": { - "type": "number" - }, - "image": { - "description": "Image name or family.", - "type": "string" - }, - "image_project": { - "description": "Google Cloud project of an image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "nested_virtualization": { - "type": "boolean" - }, - "platform": { - "description": "VM platform.", - "enum": ["freebsd", "linux", "windows", "solaris"] - } - }, - "type": "object" - }, - "container": { - "description": "Container definition for Community Cluster.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "cpu": { - "type": "number" - }, - "docker_arguments": { - "description": "Arguments for Docker build", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "dockerfile": { - "description": "Relative path to Dockerfile to build container from.", - "type": "string" - }, - "image": { - "description": "Docker Image to use.", - "type": "string" - }, - "kvm": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "registry_config": { - "type": "string" - }, - "use_in_memory_disk": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - }, - "ec2_instance": { - "description": "AWS EC2 definition.", - "properties": { - "image": { - "description": "AMI Image.", - "type": "string" - }, - "platform": { - "description": "Image Platform.", - "enum": ["freebsd", "linux", "windows", "solaris"] - }, - "region": { - "description": "AWS region.", - "enum": [ - "eu-north-1", - "eu-west-3", - "eu-west-2", - "eu-west-1", - "eu-central-1", - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2" - ] - }, - "type": { - "type": "string" - } - }, - "type": "object" - }, - "eks_container": { - "description": "EKS Container definition.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "cluster_name": { - "description": "EKS cluster name.", - "type": "string" - }, - "cpu": { - "type": "number" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "namespace": { - "description": "Kubernetes namespace to schedule CI jobs in.", - "type": "string" - }, - "privileged": { - "type": "boolean" - }, - "region": { - "description": "AWS region.", - "enum": [ - "eu-north-1", - "eu-west-3", - "eu-west-2", - "eu-west-1", - "eu-central-1", - "us-east-1", - "us-east-2", - "us-west-1", - "us-west-2" - ] - }, - "registry_config": { - "type": "string" - }, - "use_in_memory_disk": { - "type": "boolean" - } - }, - "type": "object" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "experimental": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "freebsd_instance": { - "description": "macOS Virtual Machine definition for Community Cluster.", - "properties": { - "cpu": { - "type": "number" - }, - "image": { - "description": "FreeBSD VM image.", - "type": "string" - }, - "image_family": { - "description": "Image family.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - }, - "gce_container": { - "description": "Google Compute Engine Virtual Machine definition.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "container": { - "description": "Container image.", - "type": "string" - }, - "cpu": { - "type": "number" - }, - "disk": { - "type": "number" - }, - "enable_nested_virtualization": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "image_family": { - "description": "Image family.", - "type": "string" - }, - "image_name": { - "description": "Image name.", - "type": "string" - }, - "image_project": { - "description": "Google Cloud project of an image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "preemptible": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "scopes": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Google Cloud Scopes of the VM." - }, - "use_ssd": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "zone": { - "description": "Google Cloud zone where to start a VM.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "gce_instance": { - "description": "Google Compute Engine Virtual Machine definition.", - "properties": { - "cpu": { - "type": "number" - }, - "disk": { - "type": "number" - }, - "enable_nested_virtualization": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "image_family": { - "description": "Image family.", - "type": "string" - }, - "image_name": { - "description": "Image name.", - "type": "string" - }, - "image_project": { - "description": "Google Cloud project of an image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "platform": { - "description": "VM platform.", - "enum": ["freebsd", "linux", "windows", "solaris"] - }, - "preemptible": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "scopes": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Google Cloud Scopes of the VM." - }, - "type": { - "description": "Machine Type.", - "type": "string" - }, - "use_ssd": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "zone": { - "description": "Google Cloud zone where to start a VM.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "gcp_credentials": { - "pattern": "^ENCRYPTED\\[!?[0-9a-z]*!?\\]$", - "type": "string" - }, - "gke_container": { - "description": "Google Kubernetes Engine Container definition.", - "properties": { - "additional_containers": { - "items": [ - { - "description": "Additional Container definition.", - "properties": { - "command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container CMD to override." - }, - "cpu": { - "type": "number" - }, - "env": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "environment": { - "description": "Map represented as an object.", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "name": { - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Port exposed by the container." - }, - "privileged": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "readiness_command": { - "anyOf": [ - { - "type": "string" - }, - { - "items": [ - { - "type": "string" - } - ], - "type": "array" - } - ], - "description": "Container readiness probe command." - } - }, - "required": ["image", "port"], - "type": "object" - } - ], - "type": "array" - }, - "builder_image_name": { - "description": "Image name.", - "type": "string" - }, - "builder_image_project": { - "description": "Google Cloud project of an image used to build Docker container from Dockerfile.", - "type": "string" - }, - "cluster_name": { - "description": "GKE cluster name.", - "type": "string" - }, - "cpu": { - "type": "number" - }, - "docker_arguments": { - "description": "Arguments for Docker build", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "dockerfile": { - "description": "Relative path to Dockerfile.", - "type": "string" - }, - "image": { - "description": "Docker Image.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "namespace": { - "description": "Kubernetes namespace to schedule CI jobs in.", - "type": "string" - }, - "platform": { - "description": "Container Platform.", - "enum": ["linux", "windows"] - }, - "privileged": { - "type": "boolean" - }, - "registry_config": { - "type": "string" - }, - "use_in_memory_disk": { - "type": "boolean" - }, - "zone": { - "description": "Google Cloud zone of the cluster.", - "enum": [ - "us-west1-b", - "us-west2-a", - "us-west1-c", - "us-west2-b", - "us-west2-c", - "europe-west1-d", - "europe-west2-c", - "europe-west3-b", - "europe-west4-a", - "europe-west3-c", - "europe-west4-b", - "europe-west1-b", - "europe-west2-a", - "europe-west1-c", - "europe-west2-b", - "europe-west3-a", - "us-west1-a", - "us-central1-a", - "europe-west4-c", - "us-central1-f", - "us-central1-b", - "us-central1-c", - "us-east1-b", - "us-east1-c", - "us-east1-d", - "us-east4-a", - "us-east4-b", - "us-east4-c" - ] - } - }, - "type": "object" - }, - "macos_instance": { - "description": "macOS Virtual Machine definition for Community Cluster.", - "properties": { - "image": { - "description": "macOS VM image.", - "type": "string" - } - }, - "type": "object" - }, - "only_if": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "osx_instance": { - "description": "macOS Virtual Machine definition for Community Cluster.", - "properties": { - "image": { - "description": "macOS VM image.", - "type": "string" - } - }, - "type": "object" - }, - "persistent_worker": { - "description": "Persistent Worker definition.", - "properties": { - "isolation": { - "description": "Persistent Worker isolation.", - "properties": { - "parallels": { - "description": "Parallels VM isolation.", - "properties": { - "image": { - "description": "Image name.", - "type": "string" - }, - "password": { - "description": "SSH password", - "type": "string" - }, - "platform": { - "description": "Image Platform.", - "enum": ["darwin", "linux", "windows"] - }, - "user": { - "description": "SSH username", - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "labels": { - "description": "Labels for selection.", - "type": "string" - } - }, - "type": "object" - }, - "skip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "skip_notifications": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "stateful": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "timeout_in": { - "description": "Task timeout in minutes", - "type": "string" - }, - "trigger_type": { - "description": "Trigger type", - "enum": ["automatic", "manual"] - }, - "use_compute_credits": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - }, - "windows_container": { - "description": "Windows Container definition for Community Cluster.", - "properties": { - "cpu": { - "type": "number" - }, - "docker_arguments": { - "description": "Arguments for Docker build", - "patternProperties": { - ".*": { - "type": "string" - } - }, - "type": "object" - }, - "dockerfile": { - "description": "Relative path to Dockerfile to build container from.", - "type": "string" - }, - "image": { - "description": "Docker Image to use.", - "type": "string" - }, - "memory": { - "pattern": "\\d+(G|Mb)?", - "type": "string" - }, - "os_version": { - "description": "Windows version of container.", - "enum": ["2019", "1709", "1803"] - }, - "use_static_ip": { - "description": "Boolean expression that can use environment variables.", - "type": "string" - } - }, - "type": "object" - } - }, - "title": "JSON schema for Cirrus CI configuration files", - "type": "object" -} diff --git a/src/test/cirrus/credentials.yaml b/src/test/cirrus/credentials.yaml deleted file mode 100644 index 7eab18de198..00000000000 --- a/src/test/cirrus/credentials.yaml +++ /dev/null @@ -1,3 +0,0 @@ -# yaml-language-server: $schema=../../schemas/json/cirrus.json ---- -gcp_credentials: ENCRYPTED[!abc123!] diff --git a/src/test/cirrus/node.json b/src/test/cirrus/node.json deleted file mode 100644 index dab31878b95..00000000000 --- a/src/test/cirrus/node.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "container": { - "image": "node:latest" - }, - "test_task": { - "node_modules_cache": { - "fingerprint_script": "cat yarn.lock", - "folder": "node_modules", - "populate_script": "yarn install" - }, - "test_script": "yarn run test" - } -} From e7b21d19084a83c57e029e3e3a6962e45f291475 Mon Sep 17 00:00:00 2001 From: David Peter Date: Sat, 14 Feb 2026 04:25:23 +0100 Subject: [PATCH 08/11] Merge pull request #5369 from astral-sh/update-ty-8cec857182f4bc28bd8e103940341643162777f8 Update ty's JSON schema --- src/schemas/json/ty.json | 41 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/schemas/json/ty.json b/src/schemas/json/ty.json index 679b8a08f4f..b8197b08cb3 100644 --- a/src/schemas/json/ty.json +++ b/src/schemas/json/ty.json @@ -104,7 +104,7 @@ } }, "python": { - "description": "Path to your project's Python environment or interpreter.\n\nty uses the `site-packages` directory of your project's Python environment\nto resolve third-party (and, in some cases, first-party) imports in your code.\n\nIf you're using a project management tool such as uv, you should not generally need\nto specify this option, as commands such as `uv run` will set the `VIRTUAL_ENV`\nenvironment variable to point to your project's virtual environment. ty can also infer\nthe location of your environment from an activated Conda environment, and will look for\na `.venv` directory in the project root if none of the above apply.\n\nPassing a path to a Python executable is supported, but passing a path to a dynamic executable\n(such as a shim) is not currently supported.\n\nThis option can be used to point to virtual or system Python environments.", + "description": "Path to your project's Python environment or interpreter.\n\nty uses the `site-packages` directory of your project's Python environment\nto resolve third-party (and, in some cases, first-party) imports in your code.\n\nThis can be a path to:\n\n- A Python interpreter, e.g. `.venv/bin/python3`\n- A virtual environment directory, e.g. `.venv`\n- A system Python [`sys.prefix`] directory, e.g. `/usr`\n\nIf you're using a project management tool such as uv, you should not generally need to\nspecify this option, as commands such as `uv run` will set the `VIRTUAL_ENV` environment\nvariable to point to your project's virtual environment. ty can also infer the location of\nyour environment from an activated Conda environment, and will look for a `.venv` directory\nin the project root if none of the above apply. Failing that, ty will look for a `python3`\nor `python` binary available in `PATH`.\n\n[`sys.prefix`]: https://docs.python.org/3/library/sys.html#sys.prefix", "anyOf": [ { "$ref": "#/definitions/RelativePathBuf" @@ -137,7 +137,7 @@ ] }, "root": { - "description": "The root paths of the project, used for finding first-party modules.\n\nAccepts a list of directory paths searched in priority order (first has highest priority).\n\nIf left unspecified, ty will try to detect common project layouts and initialize `root` accordingly:\n\n* if a `./src` directory exists, include `.` and `./src` in the first party search path (src layout or flat)\n* if a `.//` directory exists, include `.` and `./` in the first party search path\n* otherwise, default to `.` (flat layout)\n\nAdditionally, if a `./python` directory exists and is not a package (i.e. it does not contain an `__init__.py` or `__init__.pyi` file),\nit will also be included in the first party search path.", + "description": "The root paths of the project, used for finding first-party modules.\n\nAccepts a list of directory paths searched in priority order (first has highest priority).\n\nIf left unspecified, ty will try to detect common project layouts and initialize `root` accordingly.\nThe project root (`.`) is always included. Additionally, the following directories are included\nif they exist and are not packages (i.e. they do not contain `__init__.py` or `__init__.pyi` files):\n\n* `./src`\n* `./` (if a `.//` directory exists)\n* `./python`", "type": ["array", "null"], "items": { "$ref": "#/definitions/RelativePathBuf" @@ -201,6 +201,11 @@ "description": "Print diagnostics in the format used by [GitHub Actions] workflow error annotations.\n\n[GitHub Actions]: https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands#setting-an-error-message", "type": "string", "const": "github" + }, + { + "description": "Print diagnostics as a JUnit-style XML report.", + "type": "string", + "const": "junit" } ] }, @@ -379,6 +384,16 @@ } ] }, + "call-abstract-method": { + "title": "detects calls to abstract methods with trivial bodies on class objects", + "description": "## What it does\nChecks for calls to abstract `@classmethod`s or `@staticmethod`s\nwith \"trivial bodies\" when accessed on the class object itself.\n\n\"Trivial bodies\" are bodies that solely consist of `...`, `pass`,\na docstring, and/or `raise NotImplementedError`.\n\n## Why is this bad?\nAn abstract method with a trivial body has no concrete implementation\nto execute, so calling such a method directly on the class will probably\nnot have the desired effect.\n\nIt is also unsound to call these methods directly on the class. Unlike\nother methods, ty permits abstract methods with trivial bodies to have\nnon-`None` return types even though they always return `None` at runtime.\nThis is because it is expected that these methods will always be\noverridden rather than being called directly. As a result of this\nexception to the normal rule, ty may infer an incorrect type if one of\nthese methods is called directly, which may then mean that type errors\nelsewhere in your code go undetected by ty.\n\nCalling abstract classmethods or staticmethods via `type[X]` is allowed,\nsince the actual runtime type could be a concrete subclass with an implementation.\n\n## Example\n```python\nfrom abc import ABC, abstractmethod\n\nclass Foo(ABC):\n @classmethod\n @abstractmethod\n def method(cls) -> int: ...\n\nFoo.method() # Error: cannot call abstract classmethod\n```", + "default": "error", + "oneOf": [ + { + "$ref": "#/definitions/Level" + } + ] + }, "call-non-callable": { "title": "detects calls to non-callable objects", "description": "## What it does\nChecks for calls to non-callable objects.\n\n## Why is this bad?\nCalling a non-callable object will raise a `TypeError` at runtime.\n\n## Examples\n```python\n4() # TypeError: 'int' object is not callable\n```", @@ -989,6 +1004,16 @@ } ] }, + "invalid-type-variable-default": { + "title": "detects invalid type variable defaults", + "description": "## What it does\nChecks for [type variables] whose default type is not compatible with\nthe type variable's bound or constraints.\n\n## Why is this bad?\nIf a type variable has a bound, the default must be assignable to that\nbound (see: [bound rules]). If a type variable has constraints, the default\nmust be one of the constraints (see: [constraint rules]).\n\n## Examples\n```python\nT = TypeVar(\"T\", bound=str, default=int) # error: [invalid-type-variable-default]\nU = TypeVar(\"U\", int, str, default=bytes) # error: [invalid-type-variable-default]\n```\n\n[type variables]: https://docs.python.org/3/library/typing.html#typing.TypeVar\n[bound rules]: https://typing.python.org/en/latest/spec/generics.html#bound-rules\n[constraint rules]: https://typing.python.org/en/latest/spec/generics.html#constraint-rules", + "default": "error", + "oneOf": [ + { + "$ref": "#/definitions/Level" + } + ] + }, "invalid-typed-dict-header": { "title": "detects invalid statements in `TypedDict` class headers", "description": "## What it does\nDetects errors in `TypedDict` class headers, such as unexpected arguments\nor invalid base classes.\n\n## Why is this bad?\nThe typing spec states that `TypedDict`s are not permitted to have\ncustom metaclasses. Using `**` unpacking in a `TypedDict` header\nis also prohibited by ty, as it means that ty cannot statically determine\nwhether keys in the `TypedDict` are intended to be required or optional.\n\n## Example\n```python\nfrom typing import TypedDict\n\nclass Foo(TypedDict, metaclass=whatever): # error: [invalid-typed-dict-header]\n ...\n\ndef f(x: dict):\n class Bar(TypedDict, **x): # error: [invalid-typed-dict-header]\n ...\n```", @@ -1089,6 +1114,16 @@ } ] }, + "override-of-final-variable": { + "title": "detects overrides of Final class variables", + "description": "## What it does\nChecks for class variables on subclasses that override a superclass variable\nthat has been declared as `Final`.\n\n## Why is this bad?\nDeclaring a variable as `Final` indicates to the type checker that it should not be\noverridden on any subclass.\n\n## Example\n\n```python\nfrom typing import Final\n\nclass A:\n X: Final[int] = 1\n\nclass B(A):\n X = 2 # Error raised here\n```", + "default": "error", + "oneOf": [ + { + "$ref": "#/definitions/Level" + } + ] + }, "parameter-already-assigned": { "title": "detects multiple arguments for the same parameter", "description": "## What it does\nChecks for calls which provide more than one argument for a single parameter.\n\n## Why is this bad?\nProviding multiple values for a single parameter will raise a `TypeError` at runtime.\n\n## Examples\n\n```python\ndef f(x: int) -> int: ...\n\nf(1, x=2) # Error raised here\n```", @@ -1404,7 +1439,7 @@ "type": ["boolean", "null"] }, "root": { - "description": "The root of the project, used for finding first-party modules.\n\nIf left unspecified, ty will try to detect common project layouts and initialize `src.root` accordingly:\n\n* if a `./src` directory exists, include `.` and `./src` in the first party search path (src layout or flat)\n* if a `.//` directory exists, include `.` and `./` in the first party search path\n* otherwise, default to `.` (flat layout)\n\nAdditionally, if a `./python` directory exists and is not a package (i.e. it does not contain an `__init__.py` file),\nit will also be included in the first party search path.", + "description": "The root of the project, used for finding first-party modules.\n\nIf left unspecified, ty will try to detect common project layouts and initialize `src.root` accordingly.\nThe project root (`.`) is always included. Additionally, the following directories are included\nif they exist and are not packages (i.e. they do not contain `__init__.py` or `__init__.pyi` files):\n\n* `./src`\n* `./` (if a `.//` directory exists)\n* `./python`", "anyOf": [ { "$ref": "#/definitions/RelativePathBuf" From b3b0f08e230841adcd01e3021a83245b6685e057 Mon Sep 17 00:00:00 2001 From: "Ruben J. Jongejan" Date: Sat, 14 Feb 2026 04:25:38 +0100 Subject: [PATCH 09/11] Merge pull request #5366 from rvben/rumdl-schema-update feat(rumdl): update schema to v0.1.19 --- src/schemas/json/rumdl.json | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/schemas/json/rumdl.json b/src/schemas/json/rumdl.json index dbb83722a25..ab42301eb13 100644 --- a/src/schemas/json/rumdl.json +++ b/src/schemas/json/rumdl.json @@ -11,6 +11,8 @@ "default": { "enable": [], "disable": [], + "extend-enable": [], + "extend-disable": [], "exclude": [], "include": [], "respect-gitignore": true, @@ -81,6 +83,22 @@ }, "default": [] }, + "extend-enable": { + "description": "Additional rules to enable on top of the base set (additive across config levels)", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "extend-disable": { + "description": "Additional rules to disable on top of the base set (additive across config levels)", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, "exclude": { "description": "Files to exclude", "type": "array", @@ -155,7 +173,7 @@ "minimum": 0 }, "MarkdownFlavor": { - "description": "Markdown flavor/dialect. Accepts: standard, gfm, mkdocs, mdx, quarto, obsidian. Aliases: commonmark/github map to standard, qmd/rmd/rmarkdown map to quarto.", + "description": "Markdown flavor/dialect. Accepts: standard, gfm, mkdocs, mdx, quarto, obsidian, kramdown. Aliases: commonmark/github map to standard, qmd/rmd/rmarkdown map to quarto, jekyll maps to kramdown.", "type": "string", "enum": [ "standard", @@ -168,7 +186,9 @@ "qmd", "rmd", "rmarkdown", - "obsidian" + "obsidian", + "kramdown", + "jekyll" ] }, "CodeBlockToolsConfig": { From 3dc12ed7b68580a20edff1ea63b093e92838cc4d Mon Sep 17 00:00:00 2001 From: Tim Taylor Date: Fri, 13 Feb 2026 19:28:40 -0800 Subject: [PATCH 10/11] Add version 10.0 of the AIO connector metadata schema (#5334) * Add new version of the aio connector metadata schema This new version adds support for specifying one or multiple supported action types for a management group action * 10 * mandatory action types * Require "destinations" field for any specified "event", "dataset" and/or "stream" --- src/api/json/catalog.json | 3 +- .../aio-connector-metadata-10.0-preview.json | 703 ++++++++++++++++++ 2 files changed, 705 insertions(+), 1 deletion(-) create mode 100644 src/schemas/json/aio-connector-metadata-10.0-preview.json diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index 2b28140e5f4..ee0a121671b 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -9141,7 +9141,8 @@ "6.0-preview": "https://www.schemastore.org/aio-connector-metadata-6.0-preview.json", "7.0-preview": "https://www.schemastore.org/aio-connector-metadata-7.0-preview.json", "8.0-preview": "https://www.schemastore.org/aio-connector-metadata-8.0-preview.json", - "9.0-preview": "https://www.schemastore.org/aio-connector-metadata-9.0-preview.json" + "9.0-preview": "https://www.schemastore.org/aio-connector-metadata-9.0-preview.json", + "10.0-preview": "https://www.schemastore.org/aio-connector-metadata-10.0-preview.json" } }, { diff --git a/src/schemas/json/aio-connector-metadata-10.0-preview.json b/src/schemas/json/aio-connector-metadata-10.0-preview.json new file mode 100644 index 00000000000..95637e20c5d --- /dev/null +++ b/src/schemas/json/aio-connector-metadata-10.0-preview.json @@ -0,0 +1,703 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://json.schemastore.org/aio-connector-metadata-10.0-preview.json", + "type": "object", + "title": "JSON schema for Azure IoT Operations Connector Metadata 10.0-preview", + "description": "Schema that defines how to write a connector metadata document when writing connectors for Azure IoT Operations solutions", + "definitions": { + "modelLimits": { + "type": "object", + "description": "Describes the limits to this model type that this connector supports. For instance, a connector may support between 0 to 5 datasets.", + "properties": { + "maximum": { + "type": "integer", + "minimum": 1, + "description": "The maximum number of this model type that this connector supports. If not specified, the default is whatever limits the ADR service itself has." + }, + "minimum": { + "type": "integer", + "minimum": 0, + "default": 0, + "description": "The minimum number of this model type that this connector supports." + } + }, + "additionalProperties": false + }, + "mqttDestinationDefaults": { + "type": "object", + "description": "The specific default values that will be used by the connector when publishing telemetry to the MQTT broker.", + "properties": { + "destination": { + "type": "string", + "enum": ["Mqtt"], + "default": "Mqtt" + }, + "topic": { + "type": "string", + "description": "The default MQTT topic that will be published to. Values are allowed to contain deploy-time parameters like 'mqtt/{deviceName}/{inboundEndpointName}/myMessages'. The supported parameter tokens are: {deviceName}, {inboundEndpointName}, {assetName}, {datasetName}, {eventGroupName}, {eventName}, {streamName}, and {kubernetesNamespace}. Dataset/eventGroup/event/stream name tokens are only allowed if the configured destination is for a dataset/event/stream." + }, + "qos": { + "type": "integer", + "description": "The default MQTT quality of service that MQTT messages will be published with", + "enum": [0, 1] + }, + "ttl": { + "type": "integer", + "minimum": 0, + "description": "The default time to live that MQTT messages will be published with." + }, + "retain": { + "type": "string", + "description": "The default retain flag value that MQTT messages will be published with.", + "enum": ["keep", "never"] + } + }, + "additionalProperties": false, + "required": ["destination", "topic", "qos", "ttl", "retain"] + }, + "brokerStateStoreDestinationDefaults": { + "type": "object", + "description": "The broker state store-specific default values that will be used by the connector if not otherwise specified.", + "properties": { + "destination": { + "type": "string", + "enum": ["BrokerStateStore"], + "default": "BrokerStateStore" + }, + "key": { + "type": "string", + "description": "The default broker state store key that will be published to. Values are allowed to contain deploy-time parameters like 'dss/{deviceName}/{inboundEndpointName}'. The supported parameter tokens are: {deviceName}, {inboundEndpointName}, {assetName}, {datasetName}, {eventGroupName}, {eventName}, {streamName}, and {kubernetesNamespace}. Dataset/eventGroup/event/stream name tokens are only allowed if the configured destination is for a dataset/event/stream." + } + }, + "additionalProperties": false, + "required": ["destination", "key"] + }, + "storageDestinationDefaults": { + "type": "object", + "description": "The storage-specific default values that will be used by the connector if not otherwise specified.", + "properties": { + "destination": { + "type": "string", + "enum": ["Storage"], + "default": "Storage" + }, + "path": { + "type": "string", + "description": "The default path that storage will use. Values are allowed to contain deploy-time parameters like 'storage/{deviceName}/{inboundEndpointName}'. The supported parameter tokens are: {deviceName}, {inboundEndpointName}, {assetName}, {datasetName}, {eventGroupName}, {eventName}, {streamName}, and {kubernetesNamespace}. Dataset/eventGroup/event/stream name tokens are only allowed if the configured destination is for a dataset/event/stream." + } + }, + "additionalProperties": false, + "required": ["destination", "path"] + }, + "alternativeTypeName": { + "type": "object", + "description": "The alternative name of this type. For example, OPC UA knows \"datapoints\" as \"tags\"", + "properties": { + "singular": { + "type": "string", + "description": "The singular form of the name of this type" + }, + "plural": { + "type": "string", + "description": "The plural form of the name of this type" + } + }, + "additionalProperties": false, + "required": ["singular", "plural"] + }, + "fieldNecessity": { + "type": "object", + "description": "Details about if a field is required or not and what shape its value should take", + "properties": { + "input": { + "type": "string", + "description": "If this field is relevant to this connector or not. If required, the connector cannot function without this field being provided in the specified shape. If unsupported, the connector will ignore any value provided for this field. If optional, the connector can function with or without this field being provided, but the behavior may vary depending on it.", + "enum": ["required", "unsupported", "optional"] + }, + "regex": { + "type": "array", + "description": "The set of regex that this field's value should adhere to.", + "items": { + "type": "string" + } + }, + "exampleValue": { + "type": "string", + "description": "An example value for this field that fits the expected format" + }, + "description": { + "type": "string", + "description": "Additional user-readable context for this field. May explain how the field is used or explain the validation rules around it." + } + }, + "required": ["input"] + } + }, + "properties": { + "$schema": { + "type": "string", + "description": "The address of the AIO connector metadata schema that this connector metadata file adheres to.", + "default": "https://raw.githubusercontent.com/SchemaStore/schemastore/refs/heads/master/src/schemas/json/aio-connector-metadata-9.0-preview.json" + }, + "name": { + "type": "string", + "description": "The name of the connector." + }, + "description": { + "type": "string", + "description": "A brief (human-readable) description of the connector (preferably in English). This is seen when browsing connectors in the portal." + }, + "version": { + "type": "string", + "description": "The version of this connector. This must use semantic versioning such as '1.2.3'", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", + "default": "1.0.0" + }, + "isPreview": { + "type": "boolean", + "description": "True if this connector is considered a preview version.", + "default": "false" + }, + "maintainer": { + "type": "string", + "description": "A name and/or email of the maintainer of this connector." + }, + "vendor": { + "type": "string", + "description": "A name and/or email of the vendor that distributes this connector." + }, + "imageConfigurationSettings": { + "type": "object", + "description": "The container image details for this connector image.", + "oneOf": [ + { + "properties": { + "imageName": { + "type": "string", + "description": "The container image name for the connector. For example: 'myconnector'" + }, + "tag": { + "type": "string", + "description": "The tag of the container image for this connector" + } + }, + "additionalProperties": false, + "required": ["imageName", "tag"] + }, + { + "properties": { + "imageName": { + "type": "string", + "description": "The container image name for the connector. For example: 'myconnector'" + }, + "digest": { + "type": "string", + "description": "The digest of the container image for this connector" + } + }, + "additionalProperties": false, + "required": ["imageName", "digest"] + } + ] + }, + "secrets": { + "type": "array", + "description": "The array of secrets that are required for the connector application to work. The secret will be mounted onto all connector instances deployed for this connector application", + "items": { + "type": "object", + "description": "A single secret that will be mounted onto all connector instances.", + "properties": { + "secretAlias": { + "type": "string", + "description": "The application-defined alias for the secret" + }, + "secretDescription": { + "type": "string", + "description": "The description for this secret alias" + }, + "isOptional": { + "type": "boolean", + "description": "If the secret is optional or mandatory", + "default": false + } + }, + "additionalProperties": false, + "required": ["secretAlias"] + }, + "minItems": 1 + }, + "storageVolumes": { + "type": "array", + "description": "The array of storage volumes that are required for the connector application to work.", + "items": { + "type": "object", + "description": "A single storage volume is needed.", + "properties": { + "description": { + "type": "string", + "description": "The description for this storage volume" + }, + "mountPath": { + "type": "string", + "description": "The mount path for this storage volume" + } + }, + "additionalProperties": false, + "required": ["mountPath"] + }, + "minItems": 1 + }, + "supportedArchitectures": { + "type": "array", + "description": "The CPU architectures that this connector image was built for. At least one must be specified.", + "items": { + "type": "string", + "description": "One of the CPU architectures this connector image was built for. For example: 'linux/amd64', 'linux/arm64', or 'windows/amd64'" + }, + "minItems": 1, + "uniqueItems": true + }, + "sourceCode": { + "type": "object", + "description": "Details about the source code that compiled this connector", + "properties": { + "language": { + "type": "string", + "description": "The programming language used to write this connector" + }, + "languageVersion": { + "type": "string", + "description": "The version of the programming language used to write this connector" + }, + "sdks": { + "type": "object", + "description": "Details about the versions of the AIO SDKs used to write this connector (if they were used)", + "properties": { + "mqttPackageVersion": { + "type": "string", + "description": "The version of the Azure IoT Operations MQTT package" + }, + "protocolPackageVersion": { + "type": "string", + "description": "The version of the Azure IoT Operations protocol package" + }, + "servicesPackageVersion": { + "type": "string", + "description": "The version of the Azure IoT Operations services package" + }, + "connectorPackageVersion": { + "type": "string", + "description": "The version of the Azure IoT Operations connector package" + } + } + } + }, + "additionalProperties": false, + "required": ["language", "languageVersion"] + }, + "aioMetadata": { + "type": "object", + "description": "The AIO requirements to run this connector", + "properties": { + "aioMinVersion": { + "type": "string", + "description": "The minimal (inclusive) version that can run this connector." + }, + "aioMaxVersion": { + "type": "string", + "description": "The maximal (inclusive) version that can run this connector. If there is no known exact version, wildcards can be used such as '1.*.*'. Alternatively, not specifying an aioMaxVersion signals no upper bound" + } + }, + "additionalProperties": false + }, + "connectorConfigurationKeys": { + "type": "array", + "description": "The array of keys in the connector configuration", + "items": { + "type": "object", + "properties": { + "key": { + "description": "A key in the connector configuration key/value map.", + "type": "string" + }, + "description": { + "description": "The description of this key.", + "type": "string" + } + }, + "additionalProperties": false, + "required": ["key"] + }, + "minItems": 1 + }, + "inboundEndpointAlternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"inboundEndpoint\" in a device" + }, + "endpointsEnabledByDefault": { + "type": "boolean", + "description": "If true, inbound endpoints are enabled by default. Users may still specify in the deployed device definition if each endpoint is enabled or not and that value will override this value." + }, + "inboundEndpoints": { + "type": "array", + "description": "The array of inbound endpoints in a device that this connector will be deployed for.", + "items": { + "type": "object", + "properties": { + "description": { + "description": "A human readable description of this inbound endpoint", + "type": "string" + }, + "endpointType": { + "description": "Type of connection endpoint. Formatted as ABC.XYZ. For example, 'Microsoft.Media'", + "pattern": "^[a-zA-Z]+\\.[a-zA-Z]+", + "type": "string" + }, + "supportedAuthenticationTypes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The set of authentication types that this connector supports. For example, [\"usernamePassword\", \"anonymous\"]" + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the device definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "address": { "$ref": "#/definitions/fieldNecessity" } + }, + "required": ["address"], + "additionalProperties": false + }, + "assetsEnabledByDefault": { + "type": "boolean", + "description": "If true, assets are enabled by default. Users may still specify in the deployed asset definition if each asset is enabled or not and that value will override this value." + }, + "additionalConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#" + }, + "version": { + "type": "string", + "description": "The version of the protocol of this inbound endpoint." + }, + "eventGroups": { + "type": "object", + "description": "If present, this connector supports using event groups.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "events": { + "type": "object", + "description": "If present, this connector supports using events.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "eventConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"eventConfiguration\" field on an event group's event." + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"event\" within an event group" + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the event definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "dataSource": { + "$ref": "#/definitions/fieldNecessity" + }, + "typeRef": { + "$ref": "#/definitions/fieldNecessity" + } + }, + "required": ["dataSource", "typeRef"], + "additionalProperties": false + }, + "destinations": { + "type": "object", + "description": "Information about the supported and default destinations for asset events", + "properties": { + "supportedDestinations": { + "type": "array", + "description": "The array of destinations that this asset's events supports.", + "items": { + "type": "string", + "enum": ["Mqtt", "Storage"] + } + }, + "defaultDestination": { + "description": "The destination that this asset's events will go to by default unless specified otherwise in the asset or the event.", + "oneOf": [ + { "$ref": "#/definitions/mqttDestinationDefaults" }, + { + "$ref": "#/definitions/storageDestinationDefaults" + } + ] + } + }, + "additionalProperties": false, + "required": ["supportedDestinations"] + } + }, + "required": ["fields", "limits", "destinations"] + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"eventGroups\" within an asset" + }, + "eventGroupConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"eventGroupConfiguration\" field on an event group." + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the event definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "dataSource": { + "$ref": "#/definitions/fieldNecessity" + }, + "typeRef": { "$ref": "#/definitions/fieldNecessity" } + }, + "required": ["dataSource", "typeRef"], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": ["limits", "fields"] + }, + "datasets": { + "type": "object", + "description": "If present, this connector supports using datasets.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "datasetConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"datasetConfiguration\" field on a dataset." + }, + "dataPoints": { + "type": "object", + "description": "If present, this connector supports using dataset datapoints.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "dataPointConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"dataPointConfiguration\" field on a dataset's datapoint." + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"dataPoints\" within a dataset" + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the data point definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "dataSource": { + "$ref": "#/definitions/fieldNecessity" + }, + "typeRef": { + "$ref": "#/definitions/fieldNecessity" + } + }, + "required": ["dataSource", "typeRef"], + "additionalProperties": false + } + } + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"datasets\" within an asset" + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the dataset definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "dataSource": { + "$ref": "#/definitions/fieldNecessity" + }, + "typeRef": { "$ref": "#/definitions/fieldNecessity" } + }, + "required": ["dataSource", "typeRef"], + "additionalProperties": false + }, + "destinations": { + "type": "object", + "description": "Information about the supported and default destinations for asset datasets", + "properties": { + "supportedDestinations": { + "type": "array", + "description": "The array of destinations that this asset's datasets supports.", + "items": { + "type": "string", + "enum": ["Mqtt", "BrokerStateStore", "Storage"] + } + }, + "defaultDestination": { + "description": "The destination that this asset's datasets will go to by default unless specified otherwise in the asset or the dataset.", + "oneOf": [ + { "$ref": "#/definitions/mqttDestinationDefaults" }, + { + "$ref": "#/definitions/storageDestinationDefaults" + }, + { + "$ref": "#/definitions/brokerStateStoreDestinationDefaults" + } + ] + } + }, + "additionalProperties": false, + "required": ["supportedDestinations"] + } + }, + "additionalProperties": false, + "required": ["limits", "fields", "destinations"] + }, + "managementGroups": { + "type": "object", + "description": "If present, this connector supports using management groups.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "managementGroupConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"managementGroupConfiguration\" field on a management group." + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"managementGroups\" within an asset" + }, + "managementGroupActions": { + "type": "object", + "description": "If present, this connector supports using management group actions.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "actionConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"actionConfiguration\" field on a management group's action." + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"actions\" within a management group" + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the management group action definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "targetUri": { + "$ref": "#/definitions/fieldNecessity" + }, + "typeRef": { + "$ref": "#/definitions/fieldNecessity" + } + }, + "required": ["targetUri", "typeRef"], + "additionalProperties": false + }, + "actionTypes": { + "type": "object", + "description": "Information about the supported action types for management group actions", + "properties": { + "supportedActionTypes": { + "type": "array", + "description": "The array of action types that this asset's management group supports.", + "items": { + "type": "string", + "enum": ["Call", "Read", "Write"] + }, + "minItems": 1 + } + }, + "additionalProperties": false, + "required": ["supportedActionTypes"] + } + }, + "additionalProperties": false, + "required": ["limits", "fields", "actionTypes"] + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the management group definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "typeRef": { "$ref": "#/definitions/fieldNecessity" }, + "dataSource": { "$ref": "#/definitions/fieldNecessity" } + }, + "required": ["typeRef"], + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": ["limits", "fields"] + }, + "streams": { + "type": "object", + "description": "If present, this connector supports using streams.", + "properties": { + "limits": { "$ref": "#/definitions/modelLimits" }, + "streamConfigurationSchema": { + "$ref": "http://json-schema.org/draft-07/schema#", + "description": "The JSON schema for the \"streamConfiguration\" field on a stream." + }, + "alternativeTypeName": { + "$ref": "#/definitions/alternativeTypeName", + "description": "The alternative name to the type \"stream\" within an asset" + }, + "fields": { + "type": "object", + "description": "Describes if this connector expects these fields to be provided in the stream definition when deploying the connector. Also describes the expected shape of these values if they are supported.", + "properties": { + "typeRef": { "$ref": "#/definitions/fieldNecessity" } + }, + "required": ["typeRef"], + "additionalProperties": false + }, + "destinations": { + "type": "object", + "description": "Information about the supported and default destinations for asset streams", + "properties": { + "supportedDestinations": { + "type": "array", + "description": "The array of destinations that this asset's streams supports.", + "items": { + "type": "string", + "enum": ["Mqtt", "Storage"] + } + }, + "defaultDestination": { + "description": "The destination that this asset's streams will go to by default unless unless specified otherwise in the asset or the stream.", + "oneOf": [ + { "$ref": "#/definitions/mqttDestinationDefaults" }, + { + "$ref": "#/definitions/storageDestinationDefaults" + } + ] + } + }, + "additionalProperties": false, + "required": ["supportedDestinations"] + } + }, + "required": ["fields", "limits", "destinations"] + } + }, + "additionalProperties": false, + "required": ["endpointType", "fields"] + }, + "minItems": 1 + }, + "recommendedAllocationPolicy": { + "type": "string", + "description": "The recommended configuration to use for allocating device inbound endpoints for the connector instances. Only 'bucketized' is currently supported.", + "enum": ["bucketized"] + }, + "recommendedReplicas": { + "type": "integer", + "description": "The recommended number of replicas to deploy for this connector.", + "minimum": 1 + } + }, + "required": [ + "name", + "version", + "supportedArchitectures", + "inboundEndpoints", + "imageConfigurationSettings" + ], + "additionalProperties": false +} From ccf4f882afe6f4b6ee50789c9e844771d18c9abf Mon Sep 17 00:00:00 2001 From: Brent Westbrook <36778786+ntBre@users.noreply.github.com> Date: Fri, 13 Feb 2026 22:32:01 -0500 Subject: [PATCH 11/11] Update ruff's JSON schema (#5368) This updates ruff's JSON schema to [a2f11d239f91cf8daedb0764ec15fcfe29c5ae6d](https://github.com/astral-sh/ruff/commit/a2f11d239f91cf8daedb0764ec15fcfe29c5ae6d) --- src/schemas/json/ruff.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/schemas/json/ruff.json b/src/schemas/json/ruff.json index 07f800edb52..d6a8e9e870d 100644 --- a/src/schemas/json/ruff.json +++ b/src/schemas/json/ruff.json @@ -1220,7 +1220,7 @@ } }, "runtime-evaluated-decorators": { - "description": "Exempt classes and functions decorated with any of the enumerated\ndecorators from being moved into type-checking blocks.\n\nCommon examples include Pydantic's `@pydantic.validate_call` decorator\n(for functions) and attrs' `@attrs.define` decorator (for classes).\n\nThis also supports framework decorators like FastAPI's `fastapi.FastAPI.get`\nwhich will work across assignments in the same module.\n\nFor example:\n```python\nimport fastapi\n\napp = FastAPI(\"app\")\n\n@app.get(\"/home\")\ndef home() -> str: ...\n```\n\nHere `app.get` will correctly be identified as `fastapi.FastAPI.get`.", + "description": "Exempt classes and functions decorated with any of the enumerated\ndecorators from being moved into type-checking blocks.\n\nCommon examples include Pydantic's `@pydantic.validate_call` decorator\n(for functions) and attrs' `@attrs.define` decorator (for classes).\n\nThis also supports framework decorators like FastAPI's `fastapi.FastAPI.get`\nwhich will work across assignments in the same module.\n\nFor example:\n```python\nfrom fastapi import FastAPI\n\napp = FastAPI(\"app\")\n\n@app.get(\"/home\")\ndef home() -> str: ...\n```\n\nHere `app.get` will correctly be identified as `fastapi.FastAPI.get`.", "type": ["array", "null"], "items": { "type": "string" @@ -1433,6 +1433,30 @@ "description": "Whether to place `import from` imports before straight imports when sorting.\n\nFor example, by default, imports will be sorted such that straight imports appear\nbefore `import from` imports, as in:\n```python\nimport os\nimport sys\nfrom typing import List\n```\n\nSetting `from-first = true` will instead sort such that `import from` imports appear\nbefore straight imports, as in:\n```python\nfrom typing import List\nimport os\nimport sys\n```", "type": ["boolean", "null"] }, + "import-heading": { + "description": "A mapping from import section names to their heading comments.\n\nWhen set, a comment with the specified text will be added above imports\nin the corresponding section. If a heading comment already exists, it\nwill be replaced.\n\nCompatible with isort's `import_heading_{section_name}` settings.", + "type": ["object", "null"], + "properties": { + "first-party": { + "type": "string" + }, + "future": { + "type": "string" + }, + "local-folder": { + "type": "string" + }, + "standard-library": { + "type": "string" + }, + "third-party": { + "type": "string" + } + }, + "additionalProperties": { + "type": "string" + } + }, "known-first-party": { "description": "A list of modules to consider first-party, regardless of whether they\ncan be identified as such via introspection of the local filesystem.\n\nSupports glob patterns. For more information on the glob syntax, refer\nto the [`globset` documentation](https://docs.rs/globset/latest/globset/#syntax).", "type": ["array", "null"], @@ -2452,6 +2476,8 @@ "AIR31", "AIR311", "AIR312", + "AIR32", + "AIR321", "ALL", "ANN", "ANN0", @@ -3546,6 +3572,7 @@ "RUF066", "RUF067", "RUF068", + "RUF069", "RUF1", "RUF10", "RUF100",