mirror of
https://github.com/ansible/ansible-documentation.git
synced 2026-03-27 13:28:51 +07:00
83 lines
1.9 KiB
Python
Executable File
83 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
"""Simple test runner."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import pathlib
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parent.parent
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('test', nargs='+')
|
|
|
|
args = parser.parse_args()
|
|
tests: list[str] = args.test
|
|
failed = False
|
|
|
|
for test in tests:
|
|
if run_test(test):
|
|
failed = True
|
|
|
|
if failed:
|
|
sys.exit(1)
|
|
|
|
|
|
def run_test(name: str) -> bool:
|
|
print(f'Running {name!r} checker ...', file=sys.stderr, flush=True)
|
|
|
|
checker_path = ROOT / 'tests' / 'checkers' / f'{name}.py'
|
|
checker_json = checker_path.with_suffix('.json')
|
|
|
|
try:
|
|
config = json.loads(checker_json.read_text())
|
|
except FileNotFoundError:
|
|
config = {}
|
|
|
|
paths = []
|
|
extensions = set(config.get('extensions', []))
|
|
|
|
ignore_regexs = [
|
|
re.compile(regex)
|
|
for regex in config.get('ignore_regexs', [])
|
|
]
|
|
|
|
for root, dir_names, file_names in os.walk(ROOT / 'docs'):
|
|
for file_name in file_names:
|
|
path = os.path.join(root, file_name)
|
|
ext = os.path.splitext(path)[1]
|
|
|
|
rel_path = os.path.relpath(path, ROOT)
|
|
if any(regex.match(rel_path) for regex in ignore_regexs):
|
|
continue
|
|
|
|
if ext not in extensions:
|
|
continue
|
|
|
|
paths.append(path)
|
|
|
|
cmd = [sys.executable, checker_path] + paths
|
|
|
|
try:
|
|
result = subprocess.run(cmd, check=True, capture_output=True, text=True)
|
|
except subprocess.CalledProcessError as ex:
|
|
print(ex, file=sys.stderr, flush=True)
|
|
result = ex
|
|
|
|
sys.stdout.write(result.stdout)
|
|
sys.stderr.write(result.stderr)
|
|
|
|
return bool(result.stdout or result.stderr)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|