mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Add task to check tests/filename_map.yml
validity
This commit is contained in:
parent
74a744a57e
commit
e6e1ab3ef6
9 changed files with 116 additions and 1 deletions
|
@ -638,3 +638,17 @@ repos:
|
||||||
- invoke-pre-commit
|
- invoke-pre-commit
|
||||||
- --
|
- --
|
||||||
- docs.check
|
- docs.check
|
||||||
|
|
||||||
|
- repo: https://github.com/saltstack/salt-nox-pre-commit
|
||||||
|
rev: master
|
||||||
|
hooks:
|
||||||
|
- id: nox-py2
|
||||||
|
alias: check-filemap
|
||||||
|
name: Check Filename Map Change Matching
|
||||||
|
files: ^tests/filename_map\.yml$
|
||||||
|
pass_filenames: false
|
||||||
|
args:
|
||||||
|
- -e
|
||||||
|
- invoke-pre-commit
|
||||||
|
- --
|
||||||
|
- filemap.check
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
invoke
|
invoke
|
||||||
blessings
|
blessings
|
||||||
|
pyyaml
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
#
|
#
|
||||||
blessings==1.7
|
blessings==1.7
|
||||||
invoke==1.4.1
|
invoke==1.4.1
|
||||||
|
pyyaml==5.3.1
|
||||||
six==1.14.0 # via blessings
|
six==1.14.0 # via blessings
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
#
|
#
|
||||||
blessings==1.7
|
blessings==1.7
|
||||||
invoke==1.4.1
|
invoke==1.4.1
|
||||||
|
pyyaml==5.3.1
|
||||||
six==1.14.0 # via blessings
|
six==1.14.0 # via blessings
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
#
|
#
|
||||||
blessings==1.7
|
blessings==1.7
|
||||||
invoke==1.4.1
|
invoke==1.4.1
|
||||||
|
pyyaml==5.3.1
|
||||||
six==1.14.0 # via blessings
|
six==1.14.0 # via blessings
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
#
|
#
|
||||||
blessings==1.7
|
blessings==1.7
|
||||||
invoke==1.4.1
|
invoke==1.4.1
|
||||||
|
pyyaml==5.3.1
|
||||||
six==1.14.0 # via blessings
|
six==1.14.0 # via blessings
|
||||||
|
|
|
@ -6,4 +6,5 @@
|
||||||
#
|
#
|
||||||
blessings==1.7
|
blessings==1.7
|
||||||
invoke==1.4.1
|
invoke==1.4.1
|
||||||
|
pyyaml==5.3.1
|
||||||
six==1.14.0 # via blessings
|
six==1.14.0 # via blessings
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
|
|
||||||
from invoke import Collection # pylint: disable=3rd-party-module-not-gated
|
from invoke import Collection # pylint: disable=3rd-party-module-not-gated
|
||||||
|
|
||||||
from . import docs, loader
|
from . import docs, filemap, loader
|
||||||
|
|
||||||
ns = Collection()
|
ns = Collection()
|
||||||
ns.add_collection(Collection.from_module(docs, name="docs"), name="docs")
|
ns.add_collection(Collection.from_module(docs, name="docs"), name="docs")
|
||||||
ns.add_collection(Collection.from_module(loader, name="loader"), name="loader")
|
ns.add_collection(Collection.from_module(loader, name="loader"), name="loader")
|
||||||
|
ns.add_collection(Collection.from_module(filemap, name="filemap"), name="filemap")
|
||||||
|
|
94
tasks/filemap.py
Normal file
94
tasks/filemap.py
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
tasks.filemap
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
tests/filename_map.yml validity checks
|
||||||
|
"""
|
||||||
|
import pathlib
|
||||||
|
import re
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
from invoke import task # pylint: disable=3rd-party-module-not-gated
|
||||||
|
from tasks import utils
|
||||||
|
|
||||||
|
CODE_DIR = pathlib.Path(__file__).resolve().parent.parent
|
||||||
|
FILENAME_MAP_PATH = CODE_DIR / "tests" / "filename_map.yml"
|
||||||
|
|
||||||
|
|
||||||
|
def _match_to_test_file(match):
|
||||||
|
tests_path = CODE_DIR / "tests"
|
||||||
|
parts = match.split(".")
|
||||||
|
parts[-1] += ".py"
|
||||||
|
return tests_path.joinpath(*parts).relative_to(CODE_DIR)
|
||||||
|
|
||||||
|
|
||||||
|
def _check_matches(rule, matches):
|
||||||
|
errors = 0
|
||||||
|
for match in matches:
|
||||||
|
filematch = _match_to_test_file(match)
|
||||||
|
if not filematch.exists():
|
||||||
|
utils.error(
|
||||||
|
"The match '{}' for rule '{}' points to a non existing test module path: {}",
|
||||||
|
match,
|
||||||
|
rule,
|
||||||
|
filematch,
|
||||||
|
)
|
||||||
|
errors += 1
|
||||||
|
return errors
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def check(ctx):
|
||||||
|
exitcode = 0
|
||||||
|
excludes = ("tasks/", "templates/", ".nox/")
|
||||||
|
full_filelist = [path.relative_to(CODE_DIR) for path in CODE_DIR.rglob("*.py")]
|
||||||
|
filelist = [
|
||||||
|
str(path) for path in full_filelist if not str(path).startswith(excludes)
|
||||||
|
]
|
||||||
|
filename_map = yaml.safe_load(FILENAME_MAP_PATH.read_text())
|
||||||
|
checked = set()
|
||||||
|
for rule, matches in filename_map.items():
|
||||||
|
if rule == "*":
|
||||||
|
exitcode += _check_matches(rule, matches)
|
||||||
|
elif "|" in rule:
|
||||||
|
# This is regex
|
||||||
|
for filepath in filelist:
|
||||||
|
if re.match(rule, filepath):
|
||||||
|
# Found at least one match, stop looking
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
utils.error(
|
||||||
|
"Could not find a matching file in the salt repo for the rule '{}'",
|
||||||
|
rule,
|
||||||
|
)
|
||||||
|
exitcode += 1
|
||||||
|
continue
|
||||||
|
exitcode += _check_matches(rule, matches)
|
||||||
|
elif "*" in rule or "\\" in rule:
|
||||||
|
# Glob matching
|
||||||
|
process_matches = True
|
||||||
|
for filerule in CODE_DIR.glob(rule):
|
||||||
|
if not filerule.exists():
|
||||||
|
utils.error(
|
||||||
|
"The rule '{}' points to a non existing path: {}",
|
||||||
|
rule,
|
||||||
|
filerule,
|
||||||
|
)
|
||||||
|
exitcode += 1
|
||||||
|
process_matches = False
|
||||||
|
if process_matches:
|
||||||
|
exitcode += _check_matches(rule, matches)
|
||||||
|
else:
|
||||||
|
# Direct file paths as rules
|
||||||
|
filerule = pathlib.Path(rule)
|
||||||
|
if not filerule.exists():
|
||||||
|
utils.error(
|
||||||
|
"The rule '{}' points to a non existing path: {}", rule, filerule
|
||||||
|
)
|
||||||
|
exitcode += 1
|
||||||
|
continue
|
||||||
|
exitcode += _check_matches(rule, matches)
|
||||||
|
if exitcode:
|
||||||
|
utils.error("Found {} errors", exitcode)
|
||||||
|
utils.exit_invoke(exitcode)
|
Loading…
Add table
Reference in a new issue