From 5ab49633d21a567c5a9f4929739d2a3ec9e92ecd Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Mon, 24 Feb 2025 21:17:40 -0400 Subject: [PATCH] fix(core): make JSON Schemas at `packages/core/src/ruleset/meta` valid Plus add a GitHub Action that uses `sourcemeta/jsonschema` to perform some basic smoke tests to prevent regressions. Fixes: https://github.com/stoplightio/spectral/issues/2787 Signed-off-by: Juan Cruz Viotti --- .github/workflows/jsonschema.yml | 23 +++++++++++++++++++ .../core/src/ruleset/meta/js-extensions.json | 7 +++--- .../src/ruleset/meta/json-extensions.json | 6 ++--- .../core/src/ruleset/meta/rule.schema.json | 3 +-- .../core/src/ruleset/meta/ruleset.schema.json | 2 +- packages/core/src/ruleset/meta/shared.json | 2 +- 6 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/jsonschema.yml diff --git a/.github/workflows/jsonschema.yml b/.github/workflows/jsonschema.yml new file mode 100644 index 000000000..87ca4b325 --- /dev/null +++ b/.github/workflows/jsonschema.yml @@ -0,0 +1,23 @@ +name: Check JSON Schemas + +on: + pull_request: + branches: + - master + - develop + +jobs: + jsonschema-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + - uses: sourcemeta/jsonschema@v6.0.3 + - run: jsonschema metaschema --verbose packages/core/src/ruleset/meta/*.json + - run: jsonschema lint --verbose packages/core/src/ruleset/meta/*.json + + # As a smoke test to ensure the schemas at least reference each other well + - run: > + jsonschema bundle --verbose + packages/core/src/ruleset/meta/ruleset.schema.json + --resolve packages/core/src/ruleset/meta + --ignore packages/core/src/ruleset/meta/js-extensions.json diff --git a/packages/core/src/ruleset/meta/js-extensions.json b/packages/core/src/ruleset/meta/js-extensions.json index e6c717d8c..fa3139544 100644 --- a/packages/core/src/ruleset/meta/js-extensions.json +++ b/packages/core/src/ruleset/meta/js-extensions.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "@stoplight/spectral-core/meta/extensions", "$defs": { "Extends": { @@ -20,13 +20,12 @@ { "type": "array", "minItems": 2, - "additionalItems": false, - "items": [ + "items": false, + "prefixItems": [ { "$ref": "ruleset" }, { - "type": "string", "enum": ["off", "recommended", "all"], "errorMessage": "allowed types are \"off\", \"recommended\" and \"all\"" } diff --git a/packages/core/src/ruleset/meta/json-extensions.json b/packages/core/src/ruleset/meta/json-extensions.json index f3c6186ec..c00aa081a 100644 --- a/packages/core/src/ruleset/meta/json-extensions.json +++ b/packages/core/src/ruleset/meta/json-extensions.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "@stoplight/spectral-core/meta/extensions", "$defs": { "Extends": { @@ -18,8 +18,8 @@ { "type": "array", "minItems": 2, - "additionalItems": false, - "items": [ + "items": false, + "prefixItems": [ { "type": "string" }, diff --git a/packages/core/src/ruleset/meta/rule.schema.json b/packages/core/src/ruleset/meta/rule.schema.json index d5c0700b8..bf0648865 100644 --- a/packages/core/src/ruleset/meta/rule.schema.json +++ b/packages/core/src/ruleset/meta/rule.schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "@stoplight/spectral-core/meta/rule.schema", "$defs": { "Then": { @@ -75,7 +75,6 @@ }, "type": { "enum": ["style", "validation"], - "type": "string", "errorMessage": "allowed types are \"style\" and \"validation\"" }, "extensions": { diff --git a/packages/core/src/ruleset/meta/ruleset.schema.json b/packages/core/src/ruleset/meta/ruleset.schema.json index 6fc6fccdb..a267d619c 100644 --- a/packages/core/src/ruleset/meta/ruleset.schema.json +++ b/packages/core/src/ruleset/meta/ruleset.schema.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "@stoplight/spectral-core/meta/ruleset.schema", "type": "object", "additionalProperties": false, diff --git a/packages/core/src/ruleset/meta/shared.json b/packages/core/src/ruleset/meta/shared.json index bd8402c30..31c2ecc7a 100644 --- a/packages/core/src/ruleset/meta/shared.json +++ b/packages/core/src/ruleset/meta/shared.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "@stoplight/spectral-core/meta/shared", "$defs": { "Formats": {