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/api/json/catalog.json b/src/api/json/catalog.json
index 1dbf7d5cff9..ee0a121671b 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",
@@ -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",
@@ -9135,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/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
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/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/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
+}
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.",
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/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/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"],
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",
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": {
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/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"
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"
- }
-}
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"
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
+}