56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
import argparse
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
MINIMUM_REPORT_SEVERTIY = "medium"
|
|
MINIMUM_FAIL_SEVERTIY = "high"
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Run cppcheck on the project")
|
|
parser.add_argument("board", nargs="?", help="Board to check, optional")
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
here = Path(__file__).parent
|
|
project_root = here.parent
|
|
build = project_root / ".build"
|
|
os.chdir(str(build))
|
|
|
|
if args.board:
|
|
build = build / args.board
|
|
if not build.exists():
|
|
print(f"Board {args.board} not found")
|
|
return 1
|
|
os.chdir(str(build))
|
|
else:
|
|
# Change to the first subdirectory in .build
|
|
subdirs = [d for d in os.listdir() if os.path.isdir(d)]
|
|
assert (
|
|
len(subdirs) == 1
|
|
), f"Expected exactly one subdirectory in {build}, instead got {subdirs}"
|
|
if subdirs:
|
|
os.chdir(subdirs[0])
|
|
|
|
# Run pio check command
|
|
cp = subprocess.run(
|
|
[
|
|
"pio",
|
|
"check",
|
|
"--skip-packages",
|
|
"--src-filters=+<lib/src/>",
|
|
f"--severity={MINIMUM_REPORT_SEVERTIY}",
|
|
f"--fail-on-defect={MINIMUM_FAIL_SEVERTIY}",
|
|
"--flags",
|
|
"--inline-suppr",
|
|
],
|
|
)
|
|
return cp.returncode
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|