scripts: compliance: add a check for MAINTAINERS.yml format

Add a compliance check that tries to load MAINTAINERS.yml with
get_maintainer.Maintainers() if it's been modified by the CL, and fail
compliance if it fails to be parsed.

Example output:

```
ERROR   : Test MaintainersFormat failed:
Error parsing MAINTAINERS.yml: MAINTAINERS.yml: YAML error: while
scanning a simple key
  in "MAINTAINERS.yml", line 976, column 1
could not find expected ':'
  in "MAINTAINERS.yml", line 977, column 3
```

```
ERROR   : Test MaintainersFormat failed:
Error parsing MAINTAINERS.yml: MAINTAINERS.yml: glob pattern
'drivers/regulator' in 'files' in area 'Drivers: Regulators' matches a
directory, but has no trailing '/'
```

Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
This commit is contained in:
Fabio Baltieri 2022-12-28 17:26:29 +00:00 committed by Carles Cufí
commit f33d43795d

View file

@ -20,6 +20,9 @@ import shlex
from junitparser import TestCase, TestSuite, JUnitXml, Skipped, Error, Failure
import magic
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from get_maintainer import Maintainers, MaintainersError
logger = None
def git(*args, cwd=None):
@ -967,6 +970,27 @@ class ImageSize(ComplianceTest):
f"less than {limit >> 10}kB")
class MaintainersFormat(ComplianceTest):
"""
Check that MAINTAINERS file parses correctly.
"""
name = "MaintainersFormat"
doc = "Check that MAINTAINERS file parses correctly."
path_hint = "<git-top>"
def run(self):
MAINTAINERS_FILES = ["MAINTAINERS.yml", "MAINTAINERS.yaml"]
for file in get_files(filter="d"):
if file not in MAINTAINERS_FILES:
continue
try:
Maintainers(file)
except MaintainersError as ex:
self.failure(f"Error parsing {file}: {ex}")
def init_logs(cli_arg):
# Initializes logging