diff --git a/.venv b/.venv new file mode 100644 index 000000000..767cba080 --- /dev/null +++ b/.venv @@ -0,0 +1 @@ +.tox/vendor-schemas diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 05bd6e8e2..77803ec1e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,6 +10,8 @@ Unreleased .. vendor-insert-here +- Update vendored schemas: circle-ci, mergify, renovate (2026-09-27) + 0.38.2 ------ diff --git a/src/check_jsonschema/builtin_schemas/vendor/circle-ci.json b/src/check_jsonschema/builtin_schemas/vendor/circle-ci.json index 9d85f558d..7a6ac3615 100644 --- a/src/check_jsonschema/builtin_schemas/vendor/circle-ci.json +++ b/src/check_jsonschema/builtin_schemas/vendor/circle-ci.json @@ -10,6 +10,24 @@ ], "markdownDescription": "Specify when to enable or disable the step. Takes the following values: `always`, `on_success`, `on_fail` (default: `on_success`)" }, + "stringOrList": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "expression": { + "type": "string", + "pattern": "<<.*>>", + "markdownDescription": "An expression such as `<< parameters.name >>`, filled in when the config is compiled" + }, "jobInvocation": { "oneOf": [ { @@ -51,6 +69,57 @@ "plan_name": { "type": "string", "markdownDescription": "Required plan name for release jobs." + }, + "validation": { + "markdownDescription": "Turns on the release validation engine, which gates the release on signals from your monitoring tool and triggers your rollback pipeline when a release fails.", + "properties": { + "enabled": { + "markdownDescription": "Turns on release validation for this release job (required)." + }, + "evaluation_time": { + "default": "20m", + "markdownDescription": "How long the engine waits for validation signals before treating the release as successful, for example `30m` (default: `20m`)." + }, + "auto_rollback_on_failure": { + "markdownDescription": "When `true`, the engine triggers your rollback pipeline if validation fails during the evaluation window." + }, + "webhooks": { + "markdownDescription": "Webhook validation checks, each one named signal from a monitoring provider. When omitted, a catch-all check accepts any signal.", + "items": { + "properties": { + "name": { + "markdownDescription": "Identifier for this check. Your monitoring tool must send a matching `signal_name` (required)." + }, + "provider": { + "anyOf": [ + { + "enum": [ + "datadog", + "prometheus", + "grafana", + "alertmanager", + "custom" + ] + }, + { + "type": "string" + } + ], + "markdownDescription": "One of `datadog`, `prometheus`, `grafana`, `alertmanager` or `custom` (required)." + }, + "data_points": { + "markdownDescription": "Maps fields in the incoming webhook payload to the values CircleCI matches on. Provider defaults apply to any key you omit." + }, + "fail_when": { + "markdownDescription": "Expression that decides when a webhook event counts as a failure. Provider defaults apply when you omit it." + }, + "max_failures": { + "markdownDescription": "Number of matching failures before this check fails." + } + } + } + } + } } }, "additionalProperties": true @@ -75,12 +144,31 @@ "key" ], "properties": { + "type": { + "enum": [ + "lock", + "unlock" + ] + }, "key": { - "type": "string", - "markdownDescription": "Required key for lock/unlock jobs." + "markdownDescription": "Required key for lock/unlock jobs. At most 512 characters: letters, digits, `.`, `:`, `/`, `_` and `-`.", + "anyOf": [ + { + "type": "string", + "minLength": 1, + "maxLength": 512, + "pattern": "^[A-Za-z\\d.:/_-]*$" + }, + { + "$ref": "#/definitions/expression" + } + ] + }, + "parameters": { + "$ref": "#/definitions/jobParameters" } }, - "additionalProperties": true + "additionalProperties": false }, "else": { "if": { @@ -134,22 +222,14 @@ "markdownDescription": "The job type. If not specified, defaults to build." }, "parallelism": { - "markdownDescription": "A integer or a parameter evaluating to a integer", + "markdownDescription": "An integer, or an expression that evaluates to one", "anyOf": [ { - "oneOf": [ - { - "type": "string", - "pattern": " *<< *parameters.([^ ]+) *>> *" - }, - { - "type": "string", - "pattern": " *<< *pipeline.parameters.([^ ]+) *>> *" - } - ] + "type": "integer", + "minimum": 1 }, { - "type": "integer" + "$ref": "#/definitions/expression" } ] }, @@ -166,7 +246,26 @@ "type": "string" }, "shell": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "required": [ @@ -280,6 +379,27 @@ } ] }, + "gcp_auth": { + "type": "object", + "markdownDescription": "Authenticate to Google Artifact Registry with OIDC", + "properties": { + "oidc_service_account": { + "type": "string" + }, + "workload_identity_pool": { + "type": "string" + }, + "workload_identity_provider": { + "type": "string" + } + }, + "required": [ + "oidc_service_account", + "workload_identity_pool", + "workload_identity_provider" + ], + "additionalProperties": false + }, "auth": { "type": "object", "properties": { @@ -319,13 +439,20 @@ "properties": { "caches": { "type": "string", - "pattern": "^([1-9]|1[0-5])d$" + "pattern": "^([1-9]|[12][0-9]|30)d$" } }, "additionalProperties": false }, "circleci_ip_ranges": { - "type": "boolean", + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/expression" + } + ], "markdownDescription": "Enable running jobs with a set of well-defined IP address ranges." }, "machine": { @@ -374,27 +501,32 @@ }, "docker_layer_caching": { "markdownDescription": "Set to `true` to enable [Docker Layer Caching](https://circleci.com/docs/docker-layer-caching). Note: If you haven't already, you must open a support ticket to have a CircleCI Sales representative contact you about enabling this feature on your account for an additional fee.", - "anyOf": [ - { - "type": "string", - "pattern": " *<< *parameters.([^ ]+) *>> *" - }, - { - "type": "boolean" - }, + "type": "boolean" + }, + "resource_class": { + "type": "string" + }, + "shell": { + "oneOf": [ { - "type": "number" + "type": "string" }, { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } ] }, - "resource_class": { - "type": "string" - }, - "shell": { - "type": "string" + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "additionalProperties": false @@ -467,62 +599,7 @@ ] }, "parameters": { - "markdownDescription": "https://circleci.com/docs/reusing-config#using-the-parameters-declaration\n\nA map of parameter keys.", - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "boolean", - "string", - "steps", - "enum", - "executor", - "integer", - "env_var_name" - ], - "markdownDescription": "The parameter type. See [Parameter Types](https://circleci.com/docs/reusing-config#parameter-syntax) for details:\n- `boolean`: A boolean parameter\n- `string`: A string parameter \n- `integer`: An integer parameter\n- `enum`: An enum parameter (list of allowed string values)\n- `executor`: An executor parameter (allows job to choose executor)\n- `steps`: A steps parameter (allows mixing predefined and user-defined steps)\n- `env_var_name`: An environment variable name parameter (must match POSIX_NAME regexp)" - }, - "default": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/step" - } - } - ] - }, - "description": { - "type": "string", - "markdownDescription": "A description of the parameter" - }, - "enum": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "markdownDescription": "List of allowed values for an `enum` type parameter" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "minProperties": 1 + "$ref": "#/definitions/jobParameters" } }, "required": [ @@ -700,7 +777,26 @@ "type": "string" }, "shell": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "required": [ @@ -814,6 +910,27 @@ } ] }, + "gcp_auth": { + "type": "object", + "markdownDescription": "Authenticate to Google Artifact Registry with OIDC", + "properties": { + "oidc_service_account": { + "type": "string" + }, + "workload_identity_pool": { + "type": "string" + }, + "workload_identity_provider": { + "type": "string" + } + }, + "required": [ + "oidc_service_account", + "workload_identity_pool", + "workload_identity_provider" + ], + "additionalProperties": false + }, "auth": { "type": "object", "properties": { @@ -887,27 +1004,32 @@ }, "docker_layer_caching": { "markdownDescription": "Set to `true` to enable [Docker Layer Caching](https://circleci.com/docs/docker-layer-caching). Note: If you haven't already, you must open a support ticket to have a CircleCI Sales representative contact you about enabling this feature on your account for an additional fee.", - "anyOf": [ - { - "type": "string", - "pattern": " *<< *parameters.([^ ]+) *>> *" - }, - { - "type": "boolean" - }, + "type": "boolean" + }, + "resource_class": { + "type": "string" + }, + "shell": { + "oneOf": [ { - "type": "number" + "type": "string" }, { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } ] }, - "resource_class": { - "type": "string" - }, - "shell": { - "type": "string" + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "additionalProperties": false @@ -1198,8 +1320,18 @@ "markdownDescription": "In which directory to run this step (default: `working_directory` of the job)" }, "no_output_timeout": { - "type": "string", - "pattern": "\\d+(\\.\\d+)?[mhs]", + "anyOf": [ + { + "type": "string", + "pattern": "\\d+(\\.\\d+)?[mhs]" + }, + { + "type": "integer" + }, + { + "$ref": "#/definitions/expression" + } + ], "default": "10m", "markdownDescription": "Elapsed time the command can run without output. The string is a decimal with unit suffix, such as \"20m\", \"1.25h\", \"5s\" (default: 10 minutes)" }, @@ -1207,15 +1339,231 @@ "$ref": "#/definitions/stepWhen" }, "max_auto_reruns": { - "type": "integer", - "minimum": 1, - "maximum": 5, + "anyOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 5 + }, + { + "$ref": "#/definitions/expression" + } + ], "markdownDescription": "Maximum number of automatic reruns for this step" }, "auto_rerun_delay": { - "type": "string", - "pattern": "^(10|[1-9])m|([1-9][0-9]*)s$", + "anyOf": [ + { + "type": "string", + "pattern": "^((10|[1-9])m|([1-9][0-9]*)s)$" + }, + { + "$ref": "#/definitions/expression" + } + ], "markdownDescription": "Delay before automatic rerun of this step" + }, + "teardown": { + "type": "array", + "markdownDescription": "Steps to run at the end of the job, in reverse order, whether or not it succeeded: `run`, `save_cache`, `persist_to_workspace`, `store_artifacts` and `store_test_results`.", + "items": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": false, + "properties": { + "run": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "required": [ + "command" + ], + "properties": { + "command": { + "type": "string", + "markdownDescription": "Command to run via the shell" + }, + "name": { + "type": "string", + "markdownDescription": "Title of the step to be shown in the CircleCI UI (default: full `command`)" + }, + "when": { + "$ref": "#/definitions/stepWhen" + }, + "background": { + "enum": [ + false + ], + "markdownDescription": "A teardown step can't run in the background: it would be cancelled as soon as it started." + }, + "max_auto_reruns": { + "anyOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 5 + }, + { + "$ref": "#/definitions/expression" + } + ] + }, + "auto_rerun_delay": { + "anyOf": [ + { + "type": "string", + "pattern": "^((10|[1-9])m|([1-9][0-9]*)s)$" + }, + { + "$ref": "#/definitions/expression" + } + ] + } + }, + "not": { + "required": [ + "teardown" + ] + }, + "if": { + "required": [ + "auto_rerun_delay" + ] + }, + "then": { + "required": [ + "max_auto_reruns" + ] + } + } + ] + }, + "save_cache": { + "markdownDescription": "https://circleci.com/docs/configuration-reference#save_cache\n\nGenerates and stores a cache of a file or directory of files such as dependencies or source code in our object storage. Later jobs can restore this cache using the `restore_cache` step.", + "type": "object", + "required": [ + "paths", + "key" + ], + "properties": { + "paths": { + "$ref": "#/definitions/stringOrList", + "markdownDescription": "List of directories which should be added to the cache" + }, + "key": { + "type": "string", + "minLength": 1, + "markdownDescription": "Unique identifier for this cache" + }, + "name": { + "type": "string", + "markdownDescription": "Title of the step to be shown in the CircleCI UI (default: 'Saving Cache')" + }, + "when": { + "$ref": "#/definitions/stepWhen" + } + }, + "additionalProperties": false + }, + "persist_to_workspace": { + "markdownDescription": "https://circleci.com/docs/configuration-reference#persist_to_workspace\n\nSpecial step used to persist a temporary file to be used by another job in the workflow", + "type": "object", + "required": [ + "root" + ], + "oneOf": [ + { + "required": [ + "paths" + ] + }, + { + "required": [ + "path" + ] + } + ], + "properties": { + "root": { + "type": "string", + "markdownDescription": "Either an absolute path or a path relative to `working_directory`" + }, + "paths": { + "$ref": "#/definitions/stringOrList", + "markdownDescription": "Glob identifying file(s), or a non-glob path to a directory to add to the shared workspace. Interpreted as relative to the workspace root. Must not be the workspace root itself." + }, + "path": { + "type": "string", + "markdownDescription": "A single glob or path to add to the shared workspace, instead of `paths`" + }, + "name": { + "type": "string", + "markdownDescription": "Title of the step to be shown in the CircleCI UI" + }, + "when": { + "$ref": "#/definitions/stepWhen" + } + }, + "additionalProperties": false + }, + "store_artifacts": { + "markdownDescription": "https://circleci.com/docs/configuration-reference#store_artifacts\n\nStep to store artifacts (for example logs, binaries, etc) to be available in the web app or through the API.", + "type": "object", + "required": [ + "path" + ], + "properties": { + "path": { + "type": "string", + "markdownDescription": "Directory in the primary container to save as job artifacts" + }, + "destination": { + "type": "string", + "markdownDescription": "Prefix added to the artifact paths in the artifacts API (default: the directory of the file specified in `path`)" + }, + "name": { + "type": "string", + "markdownDescription": "Title of the step to be shown in the CircleCI UI" + }, + "when": { + "$ref": "#/definitions/stepWhen" + } + }, + "additionalProperties": false + }, + "store_test_results": { + "markdownDescription": "https://circleci.com/docs/configuration-reference#storetestresults\n\nSpecial step used to upload test results so they display in builds' Test Summary section and can be used for timing analysis. To also see test result as build artifacts, please use the `store_artifacts` step.", + "type": "object", + "required": [ + "path" + ], + "properties": { + "path": { + "type": "string", + "markdownDescription": "Path (absolute, or relative to your `working_directory`) to directory containing subdirectories of JUnit XML or Cucumber JSON test metadata files" + }, + "name": { + "type": "string", + "markdownDescription": "Title of the step to be shown in the CircleCI UI" + }, + "when": { + "$ref": "#/definitions/stepWhen" + } + }, + "additionalProperties": false + } + } + } + }, + "pwd": { + "type": "string" + }, + "path": { + "type": "string" } }, "required": [ @@ -1233,7 +1581,8 @@ "required": [ "max_auto_reruns" ] - } + }, + "additionalProperties": false } ] }, @@ -1292,23 +1641,19 @@ "default": false, "markdownDescription": "When `docker_layer_caching` is set to `true`, CircleCI will try to reuse Docker Images (layers) built during a previous job or workflow (Paid feature)" }, + "prefer_same_region": { + "type": "boolean", + "default": false, + "markdownDescription": "Set this to `true` to pull images from the same region as the VM where possible. If the pull fails, CircleCI falls back to the image's original region" + }, "version": { - "markdownDescription": "If your build requires a specific docker image, you can set it as an image attribute", + "markdownDescription": "Version string of Docker you would like to use, or `default` (default: `24.0.9`)", "anyOf": [ { "type": "string", "enum": [ - "20.10.24", - "20.10.23", - "20.10.18", - "20.10.17", - "20.10.14", - "20.10.12", - "20.10.11", - "20.10.7", - "20.10.6", - "20.10.2", - "19.03.13" + "default", + "24.0.9" ] }, { @@ -1318,6 +1663,10 @@ }, "when": { "$ref": "#/definitions/stepWhen" + }, + "resource_class": { + "type": "string", + "markdownDescription": "Not a `setup_remote_docker` option. It is accepted, and ignored." } }, "additionalProperties": false @@ -1333,14 +1682,12 @@ ], "properties": { "paths": { - "type": "array", - "items": { - "type": "string" - }, + "$ref": "#/definitions/stringOrList", "markdownDescription": "List of directories which should be added to the cache" }, "key": { "type": "string", + "minLength": 1, "markdownDescription": "Unique identifier for this cache" }, "name": { @@ -1383,10 +1730,7 @@ ], "properties": { "keys": { - "type": "array", - "items": { - "type": "string" - }, + "$ref": "#/definitions/stringOrList", "markdownDescription": "List of cache keys to lookup for a cache to restore. Only first existing key will be restored." }, "name": { @@ -1451,8 +1795,19 @@ "markdownDescription": "https://circleci.com/docs/configuration-reference#persist_to_workspace\n\nSpecial step used to persist a temporary file to be used by another job in the workflow", "type": "object", "required": [ - "root", - "paths" + "root" + ], + "oneOf": [ + { + "required": [ + "paths" + ] + }, + { + "required": [ + "path" + ] + } ], "properties": { "root": { @@ -1460,12 +1815,13 @@ "markdownDescription": "Either an absolute path or a path relative to `working_directory`" }, "paths": { - "type": "array", - "items": { - "type": "string" - }, + "$ref": "#/definitions/stringOrList", "markdownDescription": "Glob identifying file(s), or a non-glob path to a directory to add to the shared workspace. Interpreted as relative to the workspace root. Must not be the workspace root itself." }, + "path": { + "type": "string", + "markdownDescription": "A single glob or path to add to the shared workspace, instead of `paths`" + }, "name": { "type": "string", "markdownDescription": "Title of the step to be shown in the CircleCI UI" @@ -1510,10 +1866,7 @@ "type": "object", "properties": { "fingerprints": { - "type": "array", - "items": { - "type": "string" - }, + "$ref": "#/definitions/stringOrList", "markdownDescription": "List of fingerprints corresponding to the keys to be added" }, "when": { @@ -1523,6 +1876,41 @@ "additionalProperties": false } ] + }, + "install_signing_bundle": { + "markdownDescription": "Installs the code signing bundles named in the executor's `code_signing` list. macOS and machine executors only.", + "type": [ + "object", + "null" + ] + }, + "with_tool_cache": { + "markdownDescription": "Runs `steps` with a cache kept for `tool` (beta).", + "type": "object", + "required": [ + "tool", + "steps" + ], + "properties": { + "tool": { + "enum": [ + "gradle", + "bazel", + "turborepo", + "xcode" + ], + "markdownDescription": "The tool whose cache is kept" + }, + "steps": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/step" + }, + "markdownDescription": "The steps to run with the cache" + } + }, + "additionalProperties": false } }, "additionalProperties": { @@ -1549,21 +1937,11 @@ "properties": { "condition": { "$ref": "#/definitions/logic", - "markdownDescription": "A logical condition that must evaluate to true for the steps to run" - }, - "steps": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/step" - } - }, - { - "$ref": "#/definitions/step" - } - ], - "markdownDescription": "A list of steps to be performed when the condition is true" + "markdownDescription": "A logical condition that must evaluate to true for the steps to run" + }, + "steps": { + "markdownDescription": "A list of steps to be performed when the condition is true", + "$ref": "#/definitions/step" } } }, @@ -1580,22 +1958,19 @@ "markdownDescription": "A logical condition that must evaluate to false for the steps to run" }, "steps": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/step" - } - }, - { - "$ref": "#/definitions/step" - } - ], - "markdownDescription": "A list of steps to be performed when the condition is false" + "markdownDescription": "A list of steps to be performed when the condition is false", + "$ref": "#/definitions/step" } } } } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/step" + }, + "markdownDescription": "A list of steps, such as one an anchor holds, which is flattened into the list it's in." } ] }, @@ -1611,6 +1986,12 @@ "additionalProperties": { "type": "object", "properties": { + "name": { + "type": "string", + "minLength": 1, + "pattern": ".*[^ ].*$", + "markdownDescription": "The name of this job in the workflow, in place of the job's own. Needed to invoke the same job more than once. In a matrix, `<< matrix.x >>` in it is filled in for each member." + }, "requires": { "type": "array", "markdownDescription": "Jobs are run in parallel by default, so you must explicitly require any dependencies by their job name.", @@ -1746,10 +2127,15 @@ }, "additionalProperties": false } - } + }, + "additionalProperties": false }, { - "type": "string" + "type": "string", + "not": { + "pattern": "<<.*>>" + }, + "markdownDescription": "An expression deciding whether the job runs. It refers to pipeline values without `<< >>`, as in `pipeline.git.branch == \"main\"`." } ] }, @@ -1771,22 +2157,44 @@ "type": "string" }, "pre-steps": { - "steps": { - "type": "array", - "items": { - "$ref": "#/definitions/step" - }, - "minItems": 1 - } + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/step" + }, + { + "description": "The compiler doesn't check these steps' shape, and compiles a step given no arguments.", + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "null" + } + } + ] + }, + "markdownDescription": "Steps to run before the job's own steps." }, "post-steps": { - "steps": { - "type": "array", - "items": { - "$ref": "#/definitions/step" - }, - "minItems": 1 - } + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/step" + }, + { + "description": "The compiler doesn't check these steps' shape, and compiles a step given no arguments.", + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "type": "null" + } + } + ] + }, + "markdownDescription": "Steps to run after the job's own steps." }, "matrix": { "type": "object", @@ -1815,7 +2223,9 @@ "serial-group": { "markdownDescription": "`serial-group` allows a group of jobs to run in series, rather than concurrently, across an organization. Serial groups control the orchestration of jobs across an organization, not just within projects and pipelines.\nSee for more details.", "type": "string", - "minLength": 1 + "minLength": 1, + "maxLength": 512, + "pattern": ".*[^ ].*$" }, "override-with": { "type": "string" @@ -1824,6 +2234,64 @@ } } ] + }, + "jobParameters": { + "markdownDescription": "https://circleci.com/docs/reusing-config#using-the-parameters-declaration\n\nA map of parameter keys.", + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "boolean", + "string", + "steps", + "enum", + "executor", + "integer", + "env_var_name" + ], + "markdownDescription": "The parameter type. See [Parameter Types](https://circleci.com/docs/reusing-config#parameter-syntax) for details:\n- `boolean`: A boolean parameter\n- `string`: A string parameter \n- `integer`: An integer parameter\n- `enum`: An enum parameter (list of allowed string values)\n- `executor`: An executor parameter (allows job to choose executor)\n- `steps`: A steps parameter (allows mixing predefined and user-defined steps)\n- `env_var_name`: An environment variable name parameter (must match POSIX_NAME regexp)" + }, + "default": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/step" + } + } + ] + }, + "description": { + "type": "string", + "markdownDescription": "A description of the parameter" + }, + "enum": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "markdownDescription": "List of allowed values for an `enum` type parameter" + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + "minProperties": 1 } }, "type": "object", @@ -1860,7 +2328,26 @@ "type": "string" }, "shell": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "required": [ @@ -1869,7 +2356,7 @@ "additionalProperties": false }, "resource_class": { - "oneOf": [ + "anyOf": [ { "type": "string", "default": "medium", @@ -1900,9 +2387,8 @@ ] }, { - "title": "Self-hosted runner", - "type": "string", - "pattern": "^[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+$" + "title": "Any other resource class, a self-hosted runner, or a parameter", + "type": "string" } ], "markdownDescription": "https://circleci.com/docs/reference/configuration-reference/#resourceclass\n\nResource class for the job. Can be either a predefined resource class (e.g., `medium`, `large`) or a self-hosted runner in the format `/`." @@ -2017,6 +2503,27 @@ ], "markdownDescription": "Authentication for AWS EC2 Container Registry (ECR). You can use the access/secret keys or OIDC." }, + "gcp_auth": { + "type": "object", + "markdownDescription": "Authenticate to Google Artifact Registry with OIDC", + "properties": { + "oidc_service_account": { + "type": "string" + }, + "workload_identity_pool": { + "type": "string" + }, + "workload_identity_provider": { + "type": "string" + } + }, + "required": [ + "oidc_service_account", + "workload_identity_pool", + "workload_identity_provider" + ], + "additionalProperties": false + }, "auth": { "type": "object", "properties": { @@ -2093,27 +2600,32 @@ }, "docker_layer_caching": { "markdownDescription": "Set to `true` to enable [Docker Layer Caching](https://circleci.com/docs/docker-layer-caching). Note: If you haven't already, you must open a support ticket to have a CircleCI Sales representative contact you about enabling this feature on your account for an additional fee.", - "anyOf": [ - { - "type": "string", - "pattern": " *<< *parameters.([^ ]+) *>> *" - }, - { - "type": "boolean" - }, + "type": "boolean" + }, + "resource_class": { + "type": "string" + }, + "shell": { + "oneOf": [ { - "type": "number" + "type": "string" }, { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } ] }, - "resource_class": { - "type": "string" - }, - "shell": { - "type": "string" + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "additionalProperties": false @@ -2274,12 +2786,12 @@ "branches" ], "additionalProperties": false + }, + "observability": { + "type": "object" } }, - "additionalProperties": false, - "required": [ - "notify" - ] + "additionalProperties": false }, "workflows": { "type": "object", @@ -2361,9 +2873,16 @@ "markdownDescription": "Specifies which triggers will cause this workflow to be executed. Default behavior is to trigger the workflow when pushing to a branch." }, "max_auto_reruns": { - "type": "integer", - "minimum": 1, - "maximum": 5, + "anyOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 5 + }, + { + "$ref": "#/definitions/expression" + } + ], "markdownDescription": "The maximum number of times a workflow will be automatically rerun if it fails" }, "when": { @@ -2419,7 +2938,7 @@ "type": "object", "propertyNames": { "type": "string", - "pattern": "^[A-Za-z][A-Za-z\\s\\d_-]*$" + "pattern": ".+" }, "additionalProperties": { "type": "object", @@ -2435,8 +2954,7 @@ "$ref": "#/definitions/workflowJobInvocation" } } - }, - "additionalProperties": false + } } }, "orbs": { @@ -2446,15 +2964,15 @@ ], "markdownDescription": "https://circleci.com/docs/configuration-reference#orbs-requires-version-21\n\nOrbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects.", "additionalProperties": { - "markdownDescription": "An orb reference can be specified in multiple ways:\n\n**String with semantic version:**\n- `namespace/orb-name@1.2.3` - specific version\n- `namespace/orb-name@1.2` - latest patch version of 1.2.x\n- `namespace/orb-name@1` - latest minor and patch of 1.x.x\n- `namespace/orb-name@volatile` - most recent release\n- `namespace/orb-name@dev:branch-name` - development version\n\n**String with parameter substitution:**\n- `namespace/orb-name@<>`\n- `namespace/orb-name@<>`\n\n**Inline orb object:** Define jobs, commands, and executors directly in this configuration.\n\n**URL orb:** A HTTPS URL to a YAML file containing the orb definition, for example in a GitHub repository.\n\nSee [Orb Concepts](https://circleci.com/docs/orbs/author/orb-concepts/#semantic-versioning) and [Creating Inline Orbs](https://circleci.com/docs/reference/reusing-config/#writing-inline-orbs) for more details.", + "markdownDescription": "An orb reference can be specified in multiple ways:\n\n**String with semantic version:**\n- `namespace/orb-name@1.2.3` - specific version\n- `namespace/orb-name@1.2` - latest patch version of 1.2.x\n- `namespace/orb-name@1` - latest minor and patch of 1.x.x\n- `namespace/orb-name@volatile` - most recent release\n- `namespace/orb-name@dev:branch-name` - development version\n\n**String with parameter substitution:**\n- `namespace/orb-name@<>`\n- `namespace/orb-name@<>`\n- `namespace/orb-name@dev:<>` - development version of the commit being built\n\n**Inline orb object:** Define jobs, commands, and executors directly in this configuration.\n\n**URL orb:** A HTTPS URL to a YAML file containing the orb definition, for example in a GitHub repository.\n\nSee [Orb Concepts](https://circleci.com/docs/orbs/author/orb-concepts/#semantic-versioning) and [Creating Inline Orbs](https://circleci.com/docs/reference/reusing-config/#writing-inline-orbs) for more details.", "oneOf": [ { "type": "string", - "pattern": "^[a-z][a-z0-9_-]+/[a-z][a-z0-9_-]+@(dev:[\\.a-z0-9_-]+|\\d+|\\d+\\.\\d+|\\d+\\.\\d+\\.\\d+|volatile)$" + "pattern": "^[a-z][a-z0-9_-]*/[a-z][a-z0-9_-]*@(dev:[^\\s\\p{Cc}]+|\\d+|\\d+\\.\\d+|\\d+\\.\\d+\\.\\d+|volatile)$" }, { "type": "string", - "pattern": "^[a-z][a-z0-9_-]+/[a-z][a-z0-9_-]+@ *<<.+>> *$" + "pattern": "^[a-z][a-z0-9_-]*/[a-z][a-z0-9_-]*@ *(dev:)?<<.+>> *$" }, { "type": "string", @@ -2592,7 +3110,26 @@ "type": "string" }, "shell": { - "type": "string" + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "required": [ @@ -2706,6 +3243,27 @@ } ] }, + "gcp_auth": { + "type": "object", + "markdownDescription": "Authenticate to Google Artifact Registry with OIDC", + "properties": { + "oidc_service_account": { + "type": "string" + }, + "workload_identity_pool": { + "type": "string" + }, + "workload_identity_provider": { + "type": "string" + } + }, + "required": [ + "oidc_service_account", + "workload_identity_pool", + "workload_identity_provider" + ], + "additionalProperties": false + }, "auth": { "type": "object", "properties": { @@ -2779,27 +3337,32 @@ }, "docker_layer_caching": { "markdownDescription": "Set to `true` to enable [Docker Layer Caching](https://circleci.com/docs/docker-layer-caching). Note: If you haven't already, you must open a support ticket to have a CircleCI Sales representative contact you about enabling this feature on your account for an additional fee.", - "anyOf": [ - { - "type": "string", - "pattern": " *<< *parameters.([^ ]+) *>> *" - }, - { - "type": "boolean" - }, + "type": "boolean" + }, + "resource_class": { + "type": "string" + }, + "shell": { + "oneOf": [ { - "type": "number" + "type": "string" }, { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } ] }, - "resource_class": { - "type": "string" - }, - "shell": { - "type": "string" + "code_signing": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Za-z0-9-]+$", + "maxLength": 50 + }, + "markdownDescription": "Names of the code signing bundles the job may install with the `install_signing_bundle` step" } }, "additionalProperties": false @@ -3055,6 +3618,16 @@ ], "markdownDescription": "The version field is intended to be used in order to issue warnings for deprecation or breaking changes." }, + "setup": { + "type": "boolean", + "markdownDescription": "https://circleci.com/docs/dynamic-config\n\nMakes this a setup config: its workflow computes the config to continue the pipeline with, using the continuation orb or API." + }, + "functions": { + "markdownDescription": "Names the functions this config's steps can run, each as `host.tld/org/name@vX.Y.Z`. A step then runs one as `name` or `name/command`, with its flags under `with`.", + "additionalProperties": { + "markdownDescription": "A function, as `host.tld/org/name@vX.Y.Z`, for example `github.com/circleci-functions/setup-go@v0.5.1`" + } + }, "parameters": { "type": [ "object", diff --git a/src/check_jsonschema/builtin_schemas/vendor/mergify.json b/src/check_jsonschema/builtin_schemas/vendor/mergify.json index 4711635b5..613a5fbc1 100644 --- a/src/check_jsonschema/builtin_schemas/vendor/mergify.json +++ b/src/check_jsonschema/builtin_schemas/vendor/mergify.json @@ -4254,7 +4254,7 @@ }, "queue_branch_prefix": { "default": "mergify/merge-queue/", - "description": "Prefix for the merge queue branch name. Branches under this prefix are eligible for automatic [queue branch cleanup](https://docs.mergify.com/merge-queue/lifecycle#queue-branch-cleanup).", + "description": "Prefix for the merge queue branch name. It must start valid git branch names, and cannot start with `refs/`, which GitHub refuses. Branches under this prefix are eligible for automatic [queue branch cleanup](https://docs.mergify.com/merge-queue/lifecycle#queue-branch-cleanup).", "title": "Queue Branch Prefix", "type": "string" }, @@ -4301,17 +4301,6 @@ "description": "Merge method to use. If no value is set, Mergify uses the first authorized method available in the repository configuration.\n\nAdditionally, `merge-batch` merges the draft pull request prepared by the merge queue using a merge commit. This requires `batch_size > 1`.", "title": "Merge Method" }, - "autosquash": { - "configuration_deprecated_attribute": { - "deprecated_summary_ghes_mode": "`autosquash` has been removed and this option is now ignored: the merge queue no longer squashes commits beginning with `squash!`, `fixup!` or `amend!` when it updates a pull request in place. Remove it from your configuration.", - "deprecated_summary_saas_mode": "`autosquash` has been removed and this option is now ignored: the merge queue no longer squashes commits beginning with `squash!`, `fixup!` or `amend!` when it updates a pull request in place. Remove it from your configuration." - }, - "default": false, - "deprecated": true, - "description": "Deprecated: the merge queue no longer squashes commits beginning with `squash!`, `fixup!` or `amend!` when it updates a pull request in place. The option is still accepted so configurations that set it keep validating; remove it from your configuration.", - "title": "Autosquash", - "type": "boolean" - }, "autoqueue": { "default": false, "deprecated": true, @@ -4530,7 +4519,7 @@ }, "queue_branch_prefix": { "default": "mergify/merge-queue/", - "description": "Prefix for the merge queue branch name. Branches under this prefix are eligible for automatic [queue branch cleanup](https://docs.mergify.com/merge-queue/lifecycle#queue-branch-cleanup).", + "description": "Prefix for the merge queue branch name. It must start valid git branch names, and cannot start with `refs/`, which GitHub refuses. Branches under this prefix are eligible for automatic [queue branch cleanup](https://docs.mergify.com/merge-queue/lifecycle#queue-branch-cleanup).", "title": "Queue Branch Prefix", "type": "string" }, @@ -4577,17 +4566,6 @@ "description": "Merge method to use. If no value is set, Mergify uses the first authorized method available in the repository configuration.\n\nAdditionally, `merge-batch` merges the draft pull request prepared by the merge queue using a merge commit. This requires `batch_size > 1`.", "title": "Merge Method" }, - "autosquash": { - "configuration_deprecated_attribute": { - "deprecated_summary_ghes_mode": "`autosquash` has been removed and this option is now ignored: the merge queue no longer squashes commits beginning with `squash!`, `fixup!` or `amend!` when it updates a pull request in place. Remove it from your configuration.", - "deprecated_summary_saas_mode": "`autosquash` has been removed and this option is now ignored: the merge queue no longer squashes commits beginning with `squash!`, `fixup!` or `amend!` when it updates a pull request in place. Remove it from your configuration." - }, - "default": false, - "deprecated": true, - "description": "Deprecated: the merge queue no longer squashes commits beginning with `squash!`, `fixup!` or `amend!` when it updates a pull request in place. The option is still accepted so configurations that set it keep validating; remove it from your configuration.", - "title": "Autosquash", - "type": "boolean" - }, "autoqueue": { "default": false, "deprecated": true, @@ -4725,17 +4703,6 @@ "default": null, "description": "To rebase, Mergify needs to impersonate a GitHub user. You can specify the account to use with this option. If no `bot_account` is set, Mergify picks the pull request author, or the user who sent the `@mergifyio rebase` command. The user account must have already been logged in Mergify dashboard once.\n\n**Warning:** Because of GitHub's security restrictions, Mergify cannot impersonate an account owned by another GitHub App. A rebase therefore fails whenever the account it falls back to is a bot, either because the pull request was opened by one or because one sent the command, unless `bot_account` names a user account.\n\n**Warning:** A pull request coming from a fork cannot be rebased, whether or not this option is set: rebasing one means impersonating a GitHub user to force-push the contributor's branch. Use the `update` action or the `@mergifyio update` command on those -- except where Mergify cannot write the head branch at all, such as a deleted fork, where `update` is refused too and the check run says what is wrong.", "title": "Bot Account" - }, - "autosquash": { - "configuration_deprecated_attribute": { - "deprecated_summary_ghes_mode": "`autosquash` has been removed and this option is now ignored: the `rebase` action no longer squashes commits beginning with `squash!`, `fixup!` or `amend!`. Remove it from your configuration.", - "deprecated_summary_saas_mode": "`autosquash` has been removed and this option is now ignored: the `rebase` action no longer squashes commits beginning with `squash!`, `fixup!` or `amend!`. Remove it from your configuration." - }, - "default": false, - "deprecated": true, - "description": "Deprecated: the `rebase` action no longer squashes commits beginning with `squash!`, `fixup!` or `amend!`. The option is still accepted so configurations that set it keep validating; remove it from your configuration.", - "title": "Autosquash", - "type": "boolean" } }, "title": "RebaseActionModel", @@ -4962,6 +4929,37 @@ }, "Scopes": { "additionalProperties": false, + "else": { + "properties": { + "capacities": { + "propertyNames": { + "anyOf": [ + { + "minLength": 2, + "pattern": "^[A-Za-z0-9_-]+$", + "type": "string" + }, + { + "pattern": "[\\*\\?\\[\\{]" + } + ] + } + } + } + }, + "if": { + "properties": { + "source": { + "required": [ + "manual" + ], + "type": "object" + } + }, + "required": [ + "source" + ] + }, "properties": { "source": { "anyOf": [ @@ -5000,17 +4998,14 @@ "type": "string" }, "capacities": { - "description": "How many speculative checks each scope may run at the same time, as a map of scope name to capacity. Works for any `source` (file globs or the manual scopes API just decide membership; capacity is declared here). A scope listed here runs against its own independent budget; a PR in several capped scopes consumes one slot from each. PRs whose scopes are all absent from this map share the repo-wide `merge_queue.max_parallel_checks` pool, unless `default_capacity` gives every scope a budget. Strict branch protection still forces an effective capacity of 1.", - "patternProperties": { - "^[A-Za-z0-9_-]+$": { - "maximum": 128, - "minimum": 1, - "type": "integer" - } + "additionalProperties": { + "maximum": 128, + "minimum": 1, + "type": "integer" }, + "description": "How many speculative checks each scope may run at the same time, as a map of scope name to capacity. Works for any `source` (file globs or the manual scopes API just decide membership; capacity is declared here). With a `manual` source a key may be any scope name the scopes API accepts, such as `//lib/core` or `@acme/web`; with any other source a key that is not a pattern must be a valid scope name. A key containing `*`, `?`, `[` or `{` is a glob pattern with the syntax of `files` filters, such as `@acme/*` or `//lib/**`: `*` and `?` stay within one `/`-separated segment and only a whole `**` segment crosses them, so `//lib/**` matches the packages below `//lib` but not `//lib` itself. In YAML, quote any key starting with `@`, `*`, `?`, `[` or `{`. A pattern gives every scope it matches its own budget, not one budget shared by all of them. A key equal to a scope's name wins over any pattern; when several patterns match a scope, the smallest capacity applies; `default_capacity` only covers scopes no key matches. A PR in several capped scopes consumes one slot from each. PRs whose scopes match no key share the repo-wide `merge_queue.max_parallel_checks` pool, unless `default_capacity` gives every scope a budget. Strict branch protection still forces an effective capacity of 1.", "propertyNames": { - "minLength": 2, - "pattern": "^[A-Za-z0-9_-]+$" + "maxLength": 1024 }, "title": "Capacities", "type": "object" @@ -5027,7 +5022,7 @@ } ], "default": null, - "description": "How many speculative checks a scope without an explicit `capacities` entry may run at the same time. Applies to every scope observed on queued pull requests, so dynamic scope sets (e.g. sent by a monorepo build tool through the manual scopes API) get a per-scope budget without enumerating names; an explicit `capacities` entry still wins for its scope. `merge_queue.max_parallel_checks` remains the global ceiling on the total. When unset, scopes without a `capacities` entry are unlimited, and pull requests with no scopes always draw from the repo-wide pool. Strict branch protection still forces an effective capacity of 1.", + "description": "How many speculative checks a scope that no `capacities` key matches may run at the same time. Applies to every scope observed on queued pull requests, so dynamic scope sets (e.g. sent by a monorepo build tool through the manual scopes API) get a per-scope budget without enumerating names; a matching `capacities` key or pattern still wins for its scope. `merge_queue.max_parallel_checks` remains the global ceiling on the total. When unset, scopes no `capacities` key matches are unlimited, and pull requests with no scopes always draw from the repo-wide pool. Strict branch protection still forces an effective capacity of 1.", "title": "Default Capacity" } }, diff --git a/src/check_jsonschema/builtin_schemas/vendor/renovate.json b/src/check_jsonschema/builtin_schemas/vendor/renovate.json index 9c17e1b07..274919a2b 100644 --- a/src/check_jsonschema/builtin_schemas/vendor/renovate.json +++ b/src/check_jsonschema/builtin_schemas/vendor/renovate.json @@ -1,8 +1,8 @@ { "$id": "https://docs.renovatebot.com/renovate-schema.json", - "title": "JSON schema for Renovate 44.103.6 config files (https://renovatebot.com/)", + "title": "JSON schema for Renovate 44.115.10 config files (https://renovatebot.com/)", "$schema": "http://json-schema.org/draft-07/schema#", - "x-renovate-version": "44.103.6", + "x-renovate-version": "44.115.10", "allowComments": true, "type": "object", "definitions": { @@ -6087,6 +6087,11 @@ "markdownDescription": "A domain name, host name or base URL to match against.\n\nSee also: [matchHost](https://docs.renovatebot.com/configuration-options/#hostrulesmatchhost)", "type": "string" }, + "matchIsBreaking": { + "description": "Matches only if the update is considered breaking (e.g. major, or minor for 0.x in ecosystems like Cargo) when `true`, or non-breaking when `false`. Valid only within a `packageRules` object.\nSee also: https://docs.renovatebot.com/configuration-options/#packagerulesmatchisbreaking", + "markdownDescription": "Matches only if the update is considered breaking (e.g. major, or minor for 0.x in ecosystems like Cargo) when `true`, or non-breaking when `false`. Valid only within a `packageRules` object.\n\nSee also: [matchIsBreaking](https://docs.renovatebot.com/configuration-options/#packagerulesmatchisbreaking)", + "type": "boolean" + }, "matchJsonata": { "description": "A JSONata expression to match against the full config object. Valid only within a `packageRules` object.\nSee also: https://docs.renovatebot.com/configuration-options/#packagerulesmatchjsonata", "markdownDescription": "A JSONata expression to match against the full config object. Valid only within a `packageRules` object.\n\nSee also: [matchJsonata](https://docs.renovatebot.com/configuration-options/#packagerulesmatchjsonata)", @@ -7294,6 +7299,9 @@ "matchFileNames": { "$ref": "#/definitions/matchFileNames" }, + "matchIsBreaking": { + "$ref": "#/definitions/matchIsBreaking" + }, "matchJsonata": { "$ref": "#/definitions/matchJsonata" }, diff --git a/src/check_jsonschema/builtin_schemas/vendor/sha256/circle-ci.sha256 b/src/check_jsonschema/builtin_schemas/vendor/sha256/circle-ci.sha256 index 2eb115aa0..bd09e77e3 100644 --- a/src/check_jsonschema/builtin_schemas/vendor/sha256/circle-ci.sha256 +++ b/src/check_jsonschema/builtin_schemas/vendor/sha256/circle-ci.sha256 @@ -1 +1 @@ -7f3b844597735a9f884faee304a2ba1d65a87fdf2fae6c731208c0c39510ec65 \ No newline at end of file +eaa2c492912d366c61d386366eb33fb73d1385384f4db645c914ef27065ab663 \ No newline at end of file diff --git a/src/check_jsonschema/builtin_schemas/vendor/sha256/mergify.sha256 b/src/check_jsonschema/builtin_schemas/vendor/sha256/mergify.sha256 index 5ee91a2af..47ef9259f 100644 --- a/src/check_jsonschema/builtin_schemas/vendor/sha256/mergify.sha256 +++ b/src/check_jsonschema/builtin_schemas/vendor/sha256/mergify.sha256 @@ -1 +1 @@ -4d9cb3859bc4faaf484d62cdd59b670cb432b7a074149e047f7450029fafb712 \ No newline at end of file +8e030ad1dc7726aa0c713c6c805fe4b34e74cf73ee77af6348779695eb23ffd2 \ No newline at end of file diff --git a/src/check_jsonschema/builtin_schemas/vendor/sha256/renovate.sha256 b/src/check_jsonschema/builtin_schemas/vendor/sha256/renovate.sha256 index 679f9d519..061b297d8 100644 --- a/src/check_jsonschema/builtin_schemas/vendor/sha256/renovate.sha256 +++ b/src/check_jsonschema/builtin_schemas/vendor/sha256/renovate.sha256 @@ -1 +1 @@ -de289878a385024951abda389fa5dbbaefe0c74641e7cc41d77ca3c08593d83e \ No newline at end of file +8afab96b1b840855acaa1a2ba8c488162424fa9e1873c3d72a49a1fdd14ad2b4 \ No newline at end of file