scripts: compliance: add a check for missing west area maintainer enties

Add a check to ensure that every module has a corresponding maintainers
file entry, ensure modules are not added with no recorded point of
contact.

Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
This commit is contained in:
Fabio Baltieri 2023-08-15 11:30:01 +00:00 committed by Martí Bolívar
commit 183b84d0e2
2 changed files with 38 additions and 0 deletions

1
.gitignore vendored
View file

@ -77,6 +77,7 @@ Kconfig.txt
KconfigBasic.txt KconfigBasic.txt
KconfigBasicNoModules.txt KconfigBasicNoModules.txt
MaintainersFormat.txt MaintainersFormat.txt
ModulesMaintainers.txt
Nits.txt Nits.txt
Pylint.txt Pylint.txt
YAMLLint.txt YAMLLint.txt

View file

@ -22,6 +22,9 @@ from yamllint import config, linter
from junitparser import TestCase, TestSuite, JUnitXml, Skipped, Error, Failure from junitparser import TestCase, TestSuite, JUnitXml, Skipped, Error, Failure
import magic import magic
from west.manifest import Manifest
from west.manifest import ManifestProject
sys.path.insert(0, str(Path(__file__).resolve().parents[1])) sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from get_maintainer import Maintainers, MaintainersError from get_maintainer import Maintainers, MaintainersError
@ -1084,6 +1087,40 @@ class MaintainersFormat(ComplianceTest):
except MaintainersError as ex: except MaintainersError as ex:
self.failure(f"Error parsing {file}: {ex}") self.failure(f"Error parsing {file}: {ex}")
class ModulesMaintainers(ComplianceTest):
"""
Check that all modules have a MAINTAINERS entry.
"""
name = "ModulesMaintainers"
doc = "Check that all modules have a MAINTAINERS entry."
path_hint = "<git-top>"
def run(self):
MAINTAINERS_FILES = ["MAINTAINERS.yml", "MAINTAINERS.yaml"]
manifest = Manifest.from_file()
maintainers_file = None
for file in MAINTAINERS_FILES:
if os.path.exists(file):
maintainers_file = file
break
if not maintainers_file:
return
maintainers = Maintainers(maintainers_file)
for project in manifest.get_projects([]):
if not manifest.is_active(project):
continue
if isinstance(project, ManifestProject):
continue
area = f"West project: {project.name}"
if area not in maintainers.areas:
self.failure(f"Missing {maintainers_file} entry for: \"{area}\"")
class YAMLLint(ComplianceTest): class YAMLLint(ComplianceTest):
""" """