diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index d465809d2d..aeba09ca1c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,6 +22,31 @@ jobs: - name: Validate run: jq --raw-output . appdaemon blacklist critical integration netdaemon plugin python_script removed template theme + jsonschema: + name: JSON schema + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4.1.1 + + - name: Critical + uses: cardinalby/schema-validator-action@3.1.1 + with: + file: "critical" + schema: "tools/jsonschema/critical.schema.json" + + - name: Repositories + uses: cardinalby/schema-validator-action@3.1.1 + with: + file: "appdaemon|blacklist|integration|netdaemon|plugin|python_script|template|theme" + schema: "tools/jsonschema/repositories.schema.json" + + - name: Removed + uses: cardinalby/schema-validator-action@3.1.1 + with: + file: "removed" + schema: "tools/jsonschema/removed.schema.json" + sorted: name: Sorted runs-on: ubuntu-latest @@ -30,4 +55,4 @@ jobs: uses: actions/checkout@v4.1.1 - name: Check lists - run: python3 scripts/is_sorted.py \ No newline at end of file + run: python3 scripts/is_sorted.py diff --git a/.github/workflows/upload-critical.yml b/.github/workflows/upload-critical.yml index 107b27ab5c..18a5deb0d2 100644 --- a/.github/workflows/upload-critical.yml +++ b/.github/workflows/upload-critical.yml @@ -20,6 +20,12 @@ jobs: - name: Checkout the repository uses: actions/checkout@v4.1.1 + - name: Validate with JSON schema + uses: cardinalby/schema-validator-action@3.1.1 + with: + file: 'critical' + schema: 'tools/jsonschema/critical.schema.json' + - name: Set up Python uses: actions/setup-python@v5.0.0 id: python diff --git a/.github/workflows/upload-removed.yml b/.github/workflows/upload-removed.yml index 823fa9efae..e4cbaed9cf 100644 --- a/.github/workflows/upload-removed.yml +++ b/.github/workflows/upload-removed.yml @@ -20,6 +20,12 @@ jobs: - name: Checkout the repository uses: actions/checkout@v4.1.1 + - name: Validate with JSON schema + uses: cardinalby/schema-validator-action@3.1.1 + with: + file: 'removed' + schema: 'tools/jsonschema/removed.schema.json' + - name: Set up Python uses: actions/setup-python@v5.0.0 id: python diff --git a/tools/jsonschema/critical.schema.json b/tools/jsonschema/critical.schema.json new file mode 100644 index 0000000000..cf6316e4ff --- /dev/null +++ b/tools/jsonschema/critical.schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Schema for critical repositories", + "type": "array", + "items": { + "type": "object", + "properties": { + "repository": { + "type": "string", + "pattern": "^[\\w\\.-]+\/[\\w\\.-]+$" + }, + "reason": { + "type": "string" + }, + "link": { + "type": "string", + "format": "uri" + } + }, + "required": [ + "repository", + "reason", + "link" + ] + } +} \ No newline at end of file diff --git a/tools/jsonschema/removed.schema.json b/tools/jsonschema/removed.schema.json new file mode 100644 index 0000000000..0691c42a3d --- /dev/null +++ b/tools/jsonschema/removed.schema.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Schema for removed repositories", + "type": "array", + "items": { + "type": "object", + "properties": { + "link": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "removal_type": { + "type": "string" + }, + "repository": { + "type": "string", + "pattern": "^[\\w\\.-]+\/[\\w\\.-]+$" + } + }, + "required": [ + "removal_type", + "repository" + ] + } +} \ No newline at end of file diff --git a/tools/jsonschema/repositories.schema.json b/tools/jsonschema/repositories.schema.json new file mode 100644 index 0000000000..ca4769e29c --- /dev/null +++ b/tools/jsonschema/repositories.schema.json @@ -0,0 +1,9 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Shema for a repository list", + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w\\.-]+\/[\\w\\.-]+$" + } +} \ No newline at end of file