test: validate all metadata.yaml files against schema in pytest
ci/woodpecker/pr/build-fedora42 Pipeline was successful
ci/woodpecker/pr/build-fedora44 Pipeline was successful
ci/woodpecker/pr/build-fedora43 Pipeline was successful
ci/woodpecker/pr/build-almalinux9 Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build-almalinux8 Pipeline was successful
ci/woodpecker/pr/build-fedora42 Pipeline was successful
ci/woodpecker/pr/build-fedora44 Pipeline was successful
ci/woodpecker/pr/build-fedora43 Pipeline was successful
ci/woodpecker/pr/build-almalinux9 Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/build-almalinux8 Pipeline was successful
This commit is contained in:
@@ -47,6 +47,7 @@ repos:
|
|||||||
name: Validate RPM package metadata
|
name: Validate RPM package metadata
|
||||||
files: ^rpms/[^/]+/metadata\.yaml$
|
files: ^rpms/[^/]+/metadata\.yaml$
|
||||||
args: [--schemafile, schema/metadata.json]
|
args: [--schemafile, schema/metadata.json]
|
||||||
|
language_version: python3.11
|
||||||
|
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v0.14.7
|
rev: v0.14.7
|
||||||
|
|||||||
@@ -6,4 +6,6 @@ requires-python = ">=3.11"
|
|||||||
[dependency-groups]
|
[dependency-groups]
|
||||||
dev = [
|
dev = [
|
||||||
"pytest>=8",
|
"pytest>=8",
|
||||||
|
"jsonschema>=4",
|
||||||
|
"pyyaml>=6",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
"""Validate every rpms/*/metadata.yaml against schema/metadata.json."""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import jsonschema
|
||||||
|
import pytest
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
REPO_ROOT = Path(__file__).parent.parent
|
||||||
|
SCHEMA_FILE = REPO_ROOT / "schema" / "metadata.json"
|
||||||
|
RPMS_DIR = REPO_ROOT / "rpms"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def schema():
|
||||||
|
with open(SCHEMA_FILE) as f:
|
||||||
|
return json.load(f)
|
||||||
|
|
||||||
|
|
||||||
|
def metadata_files():
|
||||||
|
return sorted(RPMS_DIR.glob("*/metadata.yaml"))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("metadata_file", metadata_files(), ids=lambda p: p.parent.name)
|
||||||
|
def test_metadata_valid(metadata_file, schema):
|
||||||
|
with open(metadata_file) as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
|
||||||
|
validator = jsonschema.Draft7Validator(schema)
|
||||||
|
errors = sorted(validator.iter_errors(data), key=str)
|
||||||
|
|
||||||
|
assert not errors, "\n".join(
|
||||||
|
f" {'.'.join(str(p) for p in e.absolute_path) or '(root)'}: {e.message}"
|
||||||
|
for e in errors
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user